You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言文本挖掘:如何获取词干与对应原词的映射列表?

嘿,我懂你现在的需求啦——做体育运动文本分类的词干提取后,想确认每个词干对应的原词集合对吧?用R的tm包默认确实不会直接给出这个映射关系,不过咱们可以手动实现这个跟踪,下面给你一步步来操作:

解决方案步骤

1. 拆分清理后的文本,保留所有原词

你已经完成了标点、数字、多余空格的清理,那我们先把每个文本拆成单个词,确保所有原词都被保留下来:

library(tm)
# 你的清理后文本数据(示例用你给出的内容)
myData <- c('natacion gimnasio','gimnasia montana','correr bicicleta','corremontanismo')

# 把每个文本拆分为单个词,得到原词列表
original_words_list <- strsplit(myData, "\\s+")
# 转成向量,方便后续批量处理
original_words_vec <- unlist(original_words_list)

2. 为每个原词单独提取词干

接下来用tm的词干提取函数,对每个原词单独处理,这样就能保证原词和词干一一对应(注意你的数据是西班牙语,要指定language参数):

# 提取每个原词的词干
stemmed_words <- stemDocument(original_words_vec, language = "spanish")

3. 建立词干到原词的映射并汇总

现在我们有了原词和对应词干的向量,用基础R或者dplyr都能轻松分组,得到每个词干对应的原词集合:

方法一:用基础R实现

# 合并原词和词干为数据框
word_stem_df <- data.frame(original_word = original_words_vec, stem_word = stemmed_words)

# 按词干分组,汇总每个词干对应的唯一原词
stem_to_original <- aggregate(original_word ~ stem_word, data = word_stem_df, FUN = function(x) unique(x))

# 查看结果
print(stem_to_original)

方法二:用dplyr(更简洁的tidy风格)

如果你习惯用tidyverse工具链,用dplyr会更直观:

library(dplyr)

stem_to_original <- word_stem_df %>%
  group_by(stem_word) %>%
  summarise(corresponding_original_words = list(unique(original_word))) %>%
  ungroup()

# 查看结果
print(stem_to_original)

补充:如果你是用Corpus对象处理的情况

要是你是通过tm的语料库(Corpus)来做文本处理的,也可以用类似逻辑保留原词映射:

# 创建语料库
corpus <- VCorpus(VectorSource(myData))
# 重复你的清理步骤(供参考)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, content_transformer(tolower)) # 词干提取前建议转小写

# 提取语料库中所有原词
corpus_content <- unlist(lapply(corpus, content))
original_words_corpus <- unlist(strsplit(corpus_content, "\\s+"))

# 提取词干并建立映射
stemmed_words_corpus <- stemDocument(original_words_corpus, language = "spanish")
word_stem_df_corpus <- data.frame(original_word = original_words_corpus, stem_word = stemmed_words_corpus)
stem_to_original_corpus <- aggregate(original_word ~ stem_word, data = word_stem_df_corpus, FUN = unique)

简单说下原理:tm的stemDocument默认是直接把文本里的词替换成词干,不会保留原词记录,所以我们需要先把所有原词单独拎出来,逐个生成对应的词干,再通过分组汇总得到每个词干对应的原词集合,这样就能验证映射关系是否正确啦。

内容的提问来源于stack exchange,提问作者MGP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:20:47