如何对DataFrame中的POS标注列进行正确词形还原?
解决POS标注列的词形还原问题
你的问题核心出在词形还原函数的return语句位置错误——它被放在了for循环内部,导致函数刚处理完第一个词就直接返回结果,自然只能得到第一个词的还原输出。
修正后的词形还原函数
我们只需要把return语句移到for循环外面,让它在所有词处理完成后再返回完整结果;同时可以优化字符串初始化逻辑,避免结果开头出现多余空格:
from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() def lemmatize(pos_data): lemma_rew = "" # 初始化空字符串,避免开头冗余空格 for word, pos in pos_data: if not pos: lemma = word else: lemma = wordnet_lemmatizer.lemmatize(word, pos=pos) lemma_rew += " " + lemma return lemma_rew.strip() # 去除首尾多余空格,让结果更整洁
完整应用流程
将修正后的函数应用到你的DataFrame列即可:
df['Lemma'] = df['POS_tagged'].apply(lemmatize)
关键改动说明
- 把
return lemma_rew移到for循环外部,确保遍历完所有(word, pos)元组后,再返回拼接好的完整结果 - 优化字符串初始化与收尾处理,避免结果出现不必要的空格
- 简化条件分支里的拼接逻辑,让代码更易读
这样处理后,df['Lemma']列就能得到每条推文所有词汇的完整词形还原结果了。
内容的提问来源于stack exchange,提问作者susne
相关产品推荐
相关产品推荐

