如何正确使用stemDocument?

时间:2019-01-15 11:06:07

标签: r text-mining tm stemming snowball

我已经阅读了thisthis的问题,但是我仍然不理解stemDocumenttm_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"

它不起作用。为什么这样?

1 个答案:

答案 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好得多。