只在语料库中保留包含特定关键词的句子(在 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_reshape
和 corpus_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.
我有一个包含 .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_reshape
和 corpus_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.