目的: 我想使用具有复合词或双连词作为某些关键字的字典来创建术语-文档矩阵。
网络搜索: 作为文本挖掘和 tm
中的 R
包的新手,我访问了网络以找出如何执行此操作。以下是我找到的一些相关链接:
背景: 其中,我更喜欢使用
NGramTokenizer
中 RWeka
包中的 R
的解决方案, 但我遇到了 问题。在下面的示例代码中,我创建了三个文档并将它们放在一个语料库中。请注意,Docs 1
和 2
每个都包含两个词。 Doc 3
只包含一个词。我的字典关键字是两个二元词组和一个一元词组。问题: 上述链接中的
NGramTokenizer
解决方案没有正确计算 Doc 3
中的 unigram 关键字。library(tm)
library(RWeka)
my.docs = c('jedi master', 'jedi grandmaster', 'jedi')
my.corpus = Corpus(VectorSource(my.docs))
my.dict = c('jedi master', 'jedi grandmaster', 'jedi')
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 2))
inspect(DocumentTermMatrix(my.corpus, control=list(tokenize=BigramTokenizer,
dictionary=my.dict)))
# <<DocumentTermMatrix (documents: 3, terms: 3)>>
# ...
# Docs jedi jedi grandmaster jedi master
# 1 1 0 1
# 2 1 1 0
# 3 0 0 0
我期待
Doc 3
的行为 1
提供 jedi
,为其他两个提供 0
。我有什么误解吗? 最佳答案
我遇到了同样的问题,发现 TM 包中的标记计数函数依赖于一个名为 wordLengths 的选项,它是两个数字的向量——要跟踪的标记的最小和最大长度。默认情况下,TM 使用 3 个字符的最小字长( wordLengths = c(3, Inf)
)。您可以通过在调用 DocumentTermMatrix 时将其添加到 控制 列表来覆盖此选项,如下所示:
DocumentTermMatrix(my.corpus,
control=list(
tokenize=newBigramTokenizer,
wordLengths = c(1, Inf)))
但是,您的“绝地”一词长度超过 3 个字符。虽然,您可能在尝试弄清楚如何计算 ngrams 时更早地调整了选项的值,所以还是试试这个。另外,看看 bounds 选项,它告诉 TM 丢弃比指定值更频繁或更频繁的单词。
关于R 和 tm 包 : create a term-document matrix with a dictionary of one or two words?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28033034/