如何将DataFrame指定列替换为仅包含所有token词形还原(lemma)结果的字符串
Pandas DataFrame推文列词形还原实现方案
这里提供两种工业界常用的实现方式,可根据自己的场景选择:
方式1:基于NLTK实现
- 先安装所需依赖:
pip install nltk pandas - 完整实现代码:
import pandas as pd import nltk from nltk.tokenize import word_tokenize from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet from nltk.tag import pos_tag # 首次运行需要下载对应语料资源 nltk.download('punkt') nltk.download('averaged_perceptron_tagger') nltk.download('wordnet') nltk.download('omw-1.4') # 辅助函数:将NLTK的词性标签转换为WordNet可识别的格式,提升还原准确率 def get_wordnet_pos(tag): if tag.startswith('J'): return wordnet.ADJ elif tag.startswith('V'): return wordnet.VERB elif tag.startswith('N'): return wordnet.NOUN elif tag.startswith('R'): return wordnet.ADV else: # 无匹配标签时默认按名词处理 return wordnet.NOUN lemmatizer = WordNetLemmatizer() def text_to_lemmas(text): # 1. 对文本分词 tokens = word_tokenize(text) # 2. 标注每个分词的词性 token_pos = pos_tag(tokens) # 3. 逐个分词做词形还原 lemma_list = [lemmatizer.lemmatize(token, pos=get_wordnet_pos(pos)) for token, pos in token_pos] # 4. 拼接为字符串返回 return ' '.join(lemma_list) # 对Text_Tweet列做批量替换 df['Text_Tweet'] = df['Text_Tweet'].apply(text_to_lemmas)
方式2:基于spaCy实现(准确率更高,更适合推文场景)
spaCy自带的预训练模型已经整合了分词、词性标注、词形还原能力,不需要手动处理词性映射,处理效率和准确率都更高。
- 先安装依赖和预训练模型:
pip install spacy pandaspython -m spacy download en_core_web_sm - 完整实现代码:
import pandas as pd import spacy # 加载预训练模型,禁用不需要的管道组件提升处理速度 nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner']) def text_to_lemmas(text): doc = nlp(text) # 直接提取每个token的lemma_属性拼接即可 return ' '.join([token.lemma_ for token in doc]) # 对Text_Tweet列做批量替换 df['Text_Tweet'] = df['Text_Tweet'].apply(text_to_lemmas)
小提示:如果推文中包含大量@提及、话题标签、表情符号等无关内容,可以先做文本清洗后再执行词形还原,结果会更准确。
内容的提问来源于stack exchange,提问作者Lynn Nguyen
相关产品推荐
相关产品推荐

