我正在使用R和tm包来做一些文本分析。我试图根据某个表达式是否在各个文本文件的内容中找到,来构建一个语料库的子集。
我创建了一个包含20个文本文件的语料库(谢谢lukeA给出了这个例子):
reut21578 <- system.file("texts", "crude", package = "tm")
corp <- VCorpus(DirSource(reut21578), list(reader = readReut21578XMLasPlain))我现在只想选择那些包含字符串“降价”的文本文件来创建一个子集-语料库。
检查文档的第一个文本文件时,我知道至少有一个文本文件包含该字符串:
writeLines(as.character(corp[1]))我该怎么做呢?
发布于 2016-03-24 21:27:50
这里有一种使用quanteda包的更简单的方法,它与重用已经为其他R对象定义的现有方法的方式更加一致。quanteda有一个用于语料库对象的subset方法,它的工作方式与data.frame的子集方法一样,但是在逻辑向量上选择,包括在语料库中定义的文档变量。下面,我使用语料库对象的texts()方法从语料库中提取文本,并使用该方法在grep()中搜索您的一对单词。
require(tm)
data(crude)
require(quanteda)
# corpus constructor recognises tm Corpus objects
(qcorpus <- corpus(crude))
## Corpus consisting of 20 documents.
# use subset method
(qcorpussub <- corpus_subset(qcorpus, grepl("price\\s+reduction", texts(qcorpus))))
## Corpus consisting of 1 document.
# see the context
## kwic(qcorpus, "price reduction")
## contextPre keyword contextPost
## [127, 45:46] copany said." The [ price reduction ] today was made in the注意:我用"\s+“来分隔正则表达式,因为您可以有一些空格、制表符或换行符,而不仅仅是一个空格。
https://stackoverflow.com/questions/36200387
复制相似问题