在R中使用tm包的词干不能正常工作?

adr*_*121 6 r corpus text-mining

我正在进行一些文本挖掘(PCA,HC,K-Means),到目前为止,我已经成功地编写了一切.但是,我想解决一个小缺陷.

当我试图阻止我的语料库时,它不能正常工作,因为有不同的词语具有相同的基础,而这些词语没有以正确的方式识别.这些是我特别感兴趣的词(它是西班牙语,意思是"孩子"或相关):

niñera, niños, niñas, niña, niño
Run Code Online (Sandbox Code Playgroud)

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

niña, niño --> niñ 
Run Code Online (Sandbox Code Playgroud)

但另一方保持不变,所以我最终只是为了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  
Run Code Online (Sandbox Code Playgroud)

我真的很感激一些建议!谢谢

Rya*_*ker 16

似乎词干变换只能应用于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ñ"
Run Code Online (Sandbox Code Playgroud)

# 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ñ"
Run Code Online (Sandbox Code Playgroud)

在我看来,这个细节并不明显,当在非PlainTextDocument上调用stemDocument时至少得到警告是很好的.