在 R 中使用 tm 包进行词干提取无法正常工作?

Stemming words using tm package in R does not work properly?

我正在做一些文本挖掘(PCA、HC、K-Means),到目前为止我已经成功地编写了所有正确的代码。但是,我想修复一个小缺陷。

当我试图阻止我的 Corpus 时,它无法正常工作,因为有不同的单词具有相同的部首,但没有以正确的方式识别。 这些是我特别感兴趣的词(它是西班牙语,意思是 "kids" 或相关):

niñera, niños, niñas, niña, niño

但是当我 运行 代码时,我得到这些词仍然是相同的,除了

niña, niño --> niñ 

但另一个保持不变,所以我最终只为 niña/niño 而不是其他人。

这是我创建语料库的代码:

corp <- Corpus(DataframeSource(data.frame(x$service_name)))
docs <- tm_map(corp, removePunctuation)
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower)
docs <- tm_map(docs, removeWords, stopwords("spanish"))
docs <- tm_map(docs, stemDocument, language = "spanish") 
docs <- tm_map(docs, PlainTextDocument) 
dtm <- DocumentTermMatrix(docs)   
dtm  

我非常感谢您提出一些建议! 谢谢

词干转换似乎只能应用于 PlainTextDocument 类型。参见 ? stemDocument

sp.corpus = Corpus(VectorSource(c("la niñera. los niños. las niñas. la niña. el niño.")))
docs <- tm_map(sp.corpus, removePunctuation)
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower)
docs <- tm_map(docs, removeWords, stopwords("spanish"))
docs <- tm_map(docs, PlainTextDocument)  # needs to come before stemming
docs <- tm_map(docs, stemDocument, "spanish")
print(docs[[1]]$content)

# " niñer  niñ  niñ  niñ  niñ"

对比

# WRONG
sp.corpus = Corpus(VectorSource(c("la niñera. los niños. las niñas. la niña. el niño.")))
docs <- tm_map(sp.corpus, removePunctuation)
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower)
docs <- tm_map(docs, removeWords, stopwords("spanish"))
docs <- tm_map(docs, stemDocument, "spanish")  # WRONG: apply PlainTextDocument first
docs <- tm_map(docs, PlainTextDocument)  
print(docs[[1]]$content)

# " niñera  niños  niñas  niña  niñ"

在我看来,这个细节并不明显,如果在非 PlainTextDocument 上调用 stemDocument 时至少得到一个警告就好了。

我从

corpus <- tm_map(corpus, tolower) 

corpus <- tm_map(corpus, content_transformer(tolower))

然后 stemDocument 起作用了。