我有一个包含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函数,但我无法弄清楚如何将它们用于我的目的。
有谁知道如何解决我的问题?
非常感谢您提前。我非常感谢任何提示或想法!
答案 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列表,或者做任何你需要的东西来获得你想要的东西。