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

如何在pandas.Series中替换词干化句子?

如何在pandas Series中替换为词干化后的句子

嘿,我来一步步教你把你的traindata Series里的文本替换成词干化后的内容!词干化就是把单词缩减到它的词根形式(比如把"running"变成"run"),能帮你统一文本的词汇形式,方便后续的文本分析处理。

方法一:用NLTK的PorterStemmer(入门首选)

NLTK是自然语言处理的常用工具库,它的PorterStemmer是最经典的词干化工具之一,适合处理英文文本。

步骤1:安装并导入依赖

先确保你装好了NLTK,没装的话先跑这条命令:

pip install nltk

然后导入需要的模块:

import pandas as pd
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
import nltk

# 第一次使用需要下载分词依赖的数据集
nltk.download('punkt')

步骤2:定义词干化处理函数

我们需要写一个函数,接收单条文本,先把句子拆成单词,对每个单词做词干化,最后再拼接成完整句子:

def stem_single_sentence(sentence):
    # 处理空字符串或者缺失值的情况
    if pd.isna(sentence) or sentence.strip() == '':
        return sentence
    # 初始化词干器
    stemmer = PorterStemmer()
    # 把句子拆成单个单词
    word_list = word_tokenize(sentence)
    # 对每个单词做词干化,过滤掉空字符串
    stemmed_words = [stemmer.stem(word) for word in word_list if word.strip() != '']
    # 拼接回句子
    return ' '.join(stemmed_words)

步骤3:把函数应用到整个Series

直接用apply方法,让函数作用到traindata的每一个元素上,替换原数据:

# 替换为词干化后的内容
traindata = traindata.apply(stem_single_sentence)

方法二:用SnowballStemmer(支持多语言)

如果你的文本涉及其他语种(比如示例里的英文),SnowballStemmer支持更多语言,用法和上面基本一致:

from nltk.stem import SnowballStemmer

# 选择英文词干器,还支持'french'、'german'等其他语言
stemmer = SnowballStemmer(language='english')

def snowball_stem_sentence(sentence):
    if pd.isna(sentence) or sentence.strip() == '':
        return sentence
    word_list = word_tokenize(sentence)
    stemmed_words = [stemmer.stem(word) for word in word_list if word.strip() != '']
    return ' '.join(stemmed_words)

# 应用到Series
traindata = traindata.apply(snowball_stem_sentence)

方法三:用spaCy(更精准的词根还原)

如果你想要更专业的文本处理效果,spaCy的词根还原(Lemmatization)会考虑语法规则,结果比单纯词干化更准确自然:

步骤1:安装spaCy并下载模型

pip install spacy
python -m spacy download en_core_web_sm

步骤2:定义处理函数

import spacy

# 加载英文模型,禁用不需要的解析器和命名实体识别组件提升速度
nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])

def lemmatize_sentence(sentence):
    if pd.isna(sentence) or sentence.strip() == '':
        return sentence
    doc = nlp(sentence)
    # 提取每个词的词根,过滤标点和空字符串
    lemmatized_words = [token.lemma_ for token in doc if not token.is_punct and token.text.strip() != '']
    return ' '.join(lemmatized_words)

# 应用到Series
traindata = traindata.apply(lemmatize_sentence)

小提示

  • 词干化和词根还原是不同的:词干化是字符串层面的粗暴缩减,速度快;词根还原会结合语法,结果更准确,但速度稍慢,你可以根据需求选择。
  • 如果处理中文文本,需要搭配jieba分词工具,再做对应的词干/词根处理,不过你的示例是英文,上面的方法完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:18