2

当我尝试将 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]] 北美工厂

下一步应该是创建一个包含事务的关联矩阵,然后是先验规则,但如果我继续尝试获取规则,inspect(rules) 函数会给我这个错误:

> 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)
4

1 回答 1

2

如果将原始语料库用作字典参数,则此时的stemCompletion()只是对词干提取过程的近似反转。使用grep()它在字典中搜索包含当前词干的所有词,然后根据“<strong>type”使用其中一个词来完成。

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

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

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)))
  ...
} 
于 2015-05-30T09:03:10.980 回答