只在语料库中保留包含特定关键词的句子(在 R 中)

Keep only sentences in corpus that contain specific key words (in R)

我有一个包含 .txt 个文档的语料库。从这些 .txt 文档中,我不需要所有的句子,但我只想保留某些包含特定关键字的句子。从那以后,我将执行相似性测量等

所以,这是一个例子。 从 quanteda 包的 data_corpus_inaugural 数据集中,我只想保留我的语料库中包含单词“future”的句子 and/or “children”.

我加载我的包并创建语料库:

library(quanteda)
library(stringr)


## corpus with data_corpus_inaugural of the quanteda package
corpus <- corpus(data_corpus_inaugural)
summary(corpus)

那我只想保留那些包含我关键词的句子

## keep only those sentences of a document that contain words future or/and 
children

首先,让我们看看哪些文档包含这些关键词

## extract all matches of future or children
str_extract_all(corpus, pattern = "future|children")

到目前为止,我只知道如何排除包含我的关键词的句子,这与我想做的相反。

## excluded sentences that contains future or children or both (?)
corpustrim <- corpus_trimsentences(corpus, exclude_pattern = 
"future|children")
summary(corpustrim)

以上命令排除了包含我的关键词的句子。 我在这里使用 corpus_trimsentences 函数的想法是排除所有包含“future” and/or “children”.

的句子

我尝试使用正则表达式。但是,我没能做到。这不是我想要的return。

我查看了 quanteda 包的 corpus_reshapecorpus_subset 函数,但我不知道如何使用它们来达到我的目的。

您需要使用tokens功能。

library(quanteda)

corpus <- corpus(data_corpus_inaugural)

# tokens to keep
tok_to_keep <- tokens_select(tokens(corpus, what = "sentence"), pattern = "future|children", valuetype = "regex", selection = "keep")

此 returns 包含关键字的所有演讲和句子的列表。接下来,您可以取消列出 tok_to_keep 的列表或执行任何您需要的操作以获得您想要的内容。

你说得对,你想要的是 corpus_reshape()corpus_subset()。下面是如何使用它们。

首先,将语料库重塑为句子。

library("quanteda")

data_corpus_inauguralsents <- 
  corpus_reshape(data_corpus_inaugural, to = "sentences")
data_corpus_inauguralsents

使用stringr创建一个逻辑(布尔)表示模式存在与否,长度与新句子语料库相等。

containstarget <- 
  stringr::str_detect(texts(data_corpus_inauguralsents), "future|children")
summary(containstarget)
##    Mode   FALSE    TRUE 
## logical    4879     137 

然后使用 corpus_subset() 仅保留具有以下模式的那些:

data_corpus_inauguralsentssub <- 
  corpus_subset(data_corpus_inauguralsents, containstarget)
tail(texts(data_corpus_inauguralsentssub), 2)
## 2017-Trump.30 
## "But for too many of our citizens, a different reality exists: mothers and children trapped in poverty in our inner cities; rusted-out factories scattered like tombstones across the landscape of our nation; an education system, flush with cash, but which leaves our young and beautiful students deprived of all knowledge; and the crime and the gangs and the drugs that have stolen too many lives and robbed our country of so much unrealized potential." 
## 2017-Trump.41 
## "And now we are looking only to the future." 

最后,如果你想把这些选出来的句子放回原来的文档容器中,但是没有包含目标词的句子,那就再reshape一下:

# reshape back to documents that contain only sentences with the target terms
corpus_reshape(data_corpus_inauguralsentssub, to = "documents")
## Corpus consisting of 49 documents and 3 docvars.