我已经阅读了this和this的问题,但是我仍然不理解stemDocument
中tm_map
的用法。让我们来看这个例子:
q17 <- VCorpus(VectorSource(x = c("poder", "pode")),
readerControl = list(language = "pt",
load = TRUE))
lapply(q17, content)
$`character(0)`
[1] "poder"
$`character(0)`
[1] "pode"
如果我使用:
> stemDocument("poder", language = "portuguese")
[1] "pod"
> stemDocument("pode", language = "portuguese")
[1] "pod"
确实有效!但是,如果我使用:
> q17 <- tm_map(q17, FUN = stemDocument, language = "portuguese")
> lapply(q17, content)
$`character(0)`
[1] "poder"
$`character(0)`
[1] "pode"
它不起作用。为什么这样?
答案 0 :(得分:1)
不幸的是,您偶然发现了一个错误。如果您在进行以下操作时传递了语言,则stemDocument
会起作用:
stemDocument(x = c("poder", "pode"), language = "pt")
[1] "pod" "pod"
但是在tm_map
中使用它时,该功能以stemDocument.PlainTextDocument
开始。在此功能中,将根据您在功能中提供的语言来检查语料库的语言。这可以正常工作。但是,在该函数结束时,所有内容都传递给了函数stemDocument.character
,但是 没有语言组件 。在stemDocument.character
中,默认语言指定为英语。因此,在tm_map
调用(或DocumentTermMatrix
)中,您提供的语言将恢复为英语,并且词干无法正常工作。
一种解决方法可能是使用软件包quanteda:
library(quanteda)
my_dfm <- dfm(x = c("poder", "pode"))
my_dfm <- dfm_wordstem(my_dfm, language = "pt")
my_dfm
Document-feature matrix of: 2 documents, 1 feature (0.0% sparse).
2 x 1 sparse Matrix of class "dfm"
features
docs pod
text1 1
text2 1
由于您使用的是葡萄牙语,因此建议您使用Quanteda,udpipe或同时使用这两种软件包。这两个软件包处理非英语语言都比tm好得多。