R 如何在DTM中搜索特定术语

R 如何在DTM中搜索特定术语,r,nlp,tm,R,Nlp,Tm,我有一个200多个pdf的数据集,我把它转换成了一个语料库。我正在使用TM R包进行文本预处理和挖掘。 到目前为止,我已经成功地创建了DTM(文档术语矩阵),并且可以找到x个最常出现的术语。 然而,我研究的目的是检查语料库中是否使用了某些术语。我不是在寻找最常见的术语,而是有我自己的术语列表,我想检查它们是否出现,如果出现,有多少次 到目前为止,我已经尝试过: function <- content_transformer(function(x, pattern)regmatches(x,

我有一个200多个pdf的数据集,我把它转换成了一个语料库。我正在使用TM R包进行文本预处理和挖掘。 到目前为止,我已经成功地创建了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]]
最后一个似乎最接近输出: [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
library(tm)
数据(“原油”)

你好,非常感谢。这很有魅力!为了我的研究,我实际上创建了一个并行dtm。请允许我提出一个后续问题。我的输出没有使用文档的名称,这是我之前注意到的。它使用“字符(0)”来命名我的文档。在我的文件夹中,它们都是这样命名的:lu876673445如果您在pdf中阅读类似于以下内容的
VCorpus(DirSource(“pdf所在目录”,pattern=“.pdf”),list(reader=readPDF))
文档名称在语料库和DocumentTermMatrix中可用。否则,您需要通过dtm$dimnames$Docs添加它们是的,我读过的内容与此完全相同。你能详细说明如何“添加它们”吗?在这个代码中,我必须把它放在哪里?我需要手动键入该列表吗<代码>技术术语您可以在创建
dtm\U技术术语后执行此操作。您可以使用
myu文件
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