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
相关产品推荐
相关产品推荐

