如何在 R 中使用带有 tm 包的自定义词干提取算法?

Ho to use a custom stemming algorithm with tm package in R?

如何将 R 包 tm 中基于搬运工的词干分析器替换为更适合我需要的词干分析器?在这种情况下,它是 cistem (https://github.com/FlorianSchwendinger/cistem/)。 然而,Cistem 将单个单词(或向量)作为参数:

install_github("FlorianSchwendinger/cistem")
library("cistem")
> cistem("arbeiten")
[1] "arbei"
> cistem(c("arbeiten", "Arbeit"))
[1] "arbei"  "arbeit"

而内置词干提取器需要整个文档

corpus <- tm_map(corpus, stemDocument, language = "german") 

如何将 CISTEM 词干提取器集成到 tm 包中?

感谢任何帮助。

您可以将其他功能与 content_transformer 集成,然后可以在 tm_map 调用中使用。你只需要知道接收函数需要什么。在这种情况下 cistem 需要单词,因此您可以使用 NLP 包中的 words 函数到达那里(加载 tm 库时自动加载)。还需要 unlistlapply

* 注:* cistem returns 小写的单词,请注意这一点。

library(cistem)
library(tm)

# Some text
txt <- c("Dies ist ein deutscher Text.", 
  "Dies ist ein anderer deutscher Text.")

# the stemmer based on cistem
my_stemmer <- content_transformer(function(x) {
  unlist(lapply(x, function(line) {    # unlist the corpus and lapply over the list
    paste(cistem(words(line)), collapse = " "))  # paste the words back together.
    }
    )
  })

my_corpus <- VCorpus(VectorSource(txt))

# stem the corpus
my_stemmed_corpus <- tm_map(my_corpus, my_stemmer)


# check output
inspect(my_stemmed_corpus[[1]])
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 26

dies ist ein deutsch text.

inspect(my_stemmed_corpus[[2]])  
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 32

dies ist ein ander deutsch text.