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

时间:2018-06-13 15:55:57

标签: r text-mining corpus text-analysis quanteda

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

所以,这是一个例子。 从quanteda包的data_corpus_inaugural数据集中,我只想保留我的语料库中包含单词" future"和/或"孩子"。

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

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函数的想法是排除所有包含&#34; future&#34;和/或&#34;孩子&#34;。

我尝试使用正则表达式。但是,我没有设法做到这一点。它没有返回我想要的东西。

到目前为止这是我走了多远。

我查看了quanteda包的corpus_reshape和corpus_subset函数,但我无法弄清楚如何将它们用于我的目的。

有谁知道如何解决我的问题?

非常感谢您提前。我非常感谢任何提示或想法!

2 个答案:

答案 0 :(得分:2)

你在这里想要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 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.

答案 1 :(得分:1)

您需要使用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")

这将返回关键词存在的所有演讲和句子的列表。接下来,你可以取消列出tok_to_keep列表,或者做任何你需要的东西来获得你想要的东西。