R tm stemCompletion产生NA值

时间:2013-09-13 09:08:16

标签: r stemming tm

当我尝试将stemCompletion应用于语料库时,此函数会生成NA值..

这是我的代码:

my.corpus <- tm_map(my.corpus, removePunctuation) 
my.corpus <- tm_map(my.corpus, removeWords, stopwords("english")) 

(其中一个结果是: [[2584] 分区计划 )

下一步是结束语料库,所以:

my.corpus <- tm_map(my.corpus, stemDocument, language="english")
my.corpus <- tm_map(my.corpus, stemCompletion, dictionary=my.corpus_copy, type="first")

但结果是这个

[[2584] NA工厂

下一步应该是创建具有事务的事件矩阵,然后是apriori规则,但如果我继续尝试获取规则,则inspect(规则)函数会给我这个错误:

> inspect(rules)
Errore in UseMethod("inspect", x) : 
no applicable method for 'inspect' applied to an object of class "c('rules','associations')"

问题是什么?我认为NA值不能正确生成关联矩阵,然后是良好的规则..这是问题吗?如果是这样我怎么解决它?

这是问题的摘要:

this is an abstract:

my.words = c("β cell","zoning policy regional index brazil","zoning plan","zolpidem  adult","zizyphus spinosa hu")
my.corpus = Corpus(VectorSource(my.words))
my.corpus_copy = my.corpus
my.corpus = tm_map(my.corpus, removePunctuation)
my.corpus = tm_map(my.corpus, removeWords, c("the", stopwords("english"))) 
my.corpus = tm_map(my.corpus, stemDocument, language="english")
my.corpus <- tm_map(my.corpus, stemCompletion, dictionary=my.corpus_copy, type="first")
inspect(my.corpus)

1 个答案:

答案 0 :(得分:2)

如果将原始语料库用作字典参数,此时

stemCompletion()只是词干过程的近似逆转。使用 grep(),它会在字典中搜索包含当前词干的所有单词,然后根据其中的一个使用其中一个完成'的类型'。

因此,在词干过程返回的单词不是非词干词的子串的情况下,它会失败。例如,'c('delivery','zoning')的词干是c('deliveri','zone'),由 wordDocument()中使用的 wordStem()返回。然而,在这两种情况下,词干词都不是非词干词的正确子串。因此, stemCompletion()将找不到任何替换,并返回NA。

有许多替代方法可以解决这个问题,包括在从 stemCompletion()返回后用词干替换NAs,或者更好地修改 stemCompletion()函数本身。一种简单的方法来修改它,使其保留词干的NA而不是NA是拥有自己的版本 stemCompletion_modified() :(替换...来自 stemCompletion的原始代码( )在tm包中的功能)

stemCompletion_modified <- function (x, dictionary, type = ...) 
{
  ...
  #possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE))
  possibleCompletions <- lapply(x, function(w) ifelse(identical(grep(sprintf("^%s", w), dictionary, value = TRUE),character(0)),w,grep(sprintf("^%s", w), dictionary, value = TRUE)))
  ...
}