如何在DTM中搜索特定术语

时间:2018-07-30 15:22:04

标签: r nlp tm

我有200多个pdf的数据集,我将其转换为语料库。我将R的TM包用于文本预处理和挖掘。 到目前为止,我已经成功创建了DTM(文档术语矩阵),并且可以找到x个最常出现的术语。 但是,我研究的目的是检查语料中是否使用了某些术语。我不是在寻找最常用的术语,而是有自己的术语列表,我想检查它们是否出现以及是否出现了多少次。

到目前为止,我已经尝试过:

function <- content_transformer(function(x, pattern)regmatches(x,gregexpr(pattern, x, perl=TRUE, ignore.case = TRUE)))
keep = "word_1|word_2"
tm_map(my_corpus, function, keep)[[1]]

以及这些:

str_detect(my_corpus, "word_1", "word_2" )
str_locate_all(my_corpus, "word_1", "word_2")
str_extract(my_corpus, "funds")

最后一个似乎最接近输出:     [1]“资金” NA NA

似乎都没有给我我需要的东西。

1 个答案:

答案 0 :(得分:1)

创建DocumentTermMatrix时,可以使用选项dictionary。在示例代码中查看其工作方式。如果您不需要每个文档的字数统计,一旦以documenttermmatrix形式或data.frame形式,就可以使用聚合函数。

library(tm)

data("crude")
crude <- as.VCorpus(crude)
crude <- tm_map(crude, content_transformer(tolower))

my_words <- c("oil", "corporation")

dtm <- DocumentTermMatrix(crude, control=list(dictionary = my_words))

# create data.frame from documenttermmatrix
df1 <- data.frame(docs = dtm$dimnames$Docs, as.matrix(dtm), row.names = NULL)
head(df1)
   docs corporation oil
1   127           0   5
2   144           0  11
3   191           0   2
4   194           0   1
5   211           0   1
6   236           0   7