R中斯洛文语文本词干提取报错,SnowballC不支持,求解决方案
解决斯洛文尼亚语文本挖掘中的词干提取问题
一、先修复stemDocument的调用错误
你的代码报错是因为tm_map用法有误,tm_map的第二个参数应传递函数本身,而非直接调用函数并传入corpus对象。正确写法应为:
pupils <- tm_map(pupils, stemDocument, language = "slovene")
但需注意:SnowballC包确实不支持斯洛文尼亚语,即便修正写法,该命令也无法正常运行。以下是针对斯洛文尼亚语的可行替代方案。
二、斯洛文尼亚语词干/词形还原的可行方案
方案1:使用udpipe包进行词形还原(推荐)
udpipe支持多语言NLP处理,包含斯洛文尼亚语,可完成词形还原(比词干提取更精准,保留词汇基础形态),步骤如下:
- 安装并加载udpipe包:
install.packages("udpipe") library(udpipe)
- 下载斯洛文尼亚语预训练模型:
udpipe_download_model(language = "slovenian")
- 加载模型并处理corpus文本:
# 将corpus转换为数据框 corpus_df <- data.frame(text = sapply(pupils, as.character), stringsAsFactors = FALSE) # 加载模型 model <- udpipe_load_model("slovenian-ud-2.5-191206.udpipe") # 文本标注,获取词形还原结果 annotated <- udpipe_annotate(model, x = corpus_df$text) annotated_df <- as.data.frame(annotated) # 提取词形还原后的词汇,重新构建corpus lemmatized_text <- aggregate(lemma ~ doc_id, data = annotated_df, paste, collapse = " ") library(tm) lemmatized_corpus <- VCorpus(VectorSource(lemmatized_text$lemma))
方案2:使用hunspell包进行词干处理
hunspell提供斯洛文尼亚语词典,可用于词干提取:
- 安装并加载hunspell包:
install.packages("hunspell") library(hunspell)
- 下载斯洛文尼亚语词典(若未自动安装):
hunspell_download("sl")
- 自定义词干函数并应用到corpus:
# 定义斯洛文尼亚语词干处理函数 slovene_stem <- function(x) { words <- strsplit(x, "\\s+")[[1]] stems <- hunspell_stem(words, dict = dictionary("sl")) # 处理词干结果,有词干则取第一个,无则保留原词 stems <- sapply(seq_along(stems), function(i) ifelse(length(stems[[i]]) > 0, stems[[i]][1], words[i])) paste(stems, collapse = " ") } # 用tm_map应用自定义函数 pupils_stemmed <- tm_map(pupils, content_transformer(slovene_stem))
内容的提问来源于stack exchange,提问作者Janez
相关产品推荐
相关产品推荐

