词干提取(stemming)操作后如何还原得到单词的原始形式
实现词干到原始token映射的方案
核心思路:原有预处理函数仅返回词干结果,丢失了原始token与词干的对应关系,调整函数在处理阶段同步记录两者的对应关系即可。
1 调整预处理函数
修改原有预处理逻辑,同步存储未被过滤的原始token和对应处理后的词干:
def preprocess_with_mapping(text): original_tokens = [] processed_tokens = [] for token in gensim.utils.simple_preprocess(text): if token not in gensim.parsing.preprocessing.STOPWORDS: original_tokens.append(token) processed_tokens.append(lemmatize_stemming(token)) return original_tokens, processed_tokens
注:如果stemmer还未初始化,需要提前导入并初始化:
from nltk.stem import WordNetLemmatizer, PorterStemmer stemmer = PorterStemmer()
2 运行获取对应关系
调用修改后的函数即可得到一一对应的原始token列表和词干列表:
original_tokens, stemmed_tokens = df['text'].map(preprocess_with_mapping)[0] # 打印所有对应关系 for ori, stem in zip(original_tokens, stemmed_tokens): print(f"词干 {stem} 对应原始token: {ori}")
运行后你就能看到die分别对应dies和died的映射关系。
3 (可选)构建词干映射字典
如果需要快速查询某个词干对应的所有原始token,可以用如下代码构建映射字典:
from collections import defaultdict stem_2_original = defaultdict(list) for ori, stem in zip(original_tokens, stemmed_tokens): stem_2_original[stem].append(ori) # 查询die对应的原始token print(stem_2_original['die']) # 输出:['dies', 'died']
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

