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

Porter Stemmer算法逐行处理句子报AttributeError问题求助

问题根因

触发AttributeError: 'list' object has no attribute 'lower'的核心原因有2个:

  • 如果你是通过df['Review'].apply(porterStemmer)的方式调用函数,传入text参数的是单条review字符串而非整个Review列的列表。你对字符串做循环遍历时,每次拿到的line是单个字符,若数据集存在空值、格式错误的行,导致某行Review被解析为列表,后续word_tokenize处理时内部会调用.lower()方法,列表没有该方法就会抛出报错。
  • 你的函数本身逻辑存在问题:循环内每次都会重置words列表,最终只会返回最后一行/最后一个字符的处理结果,之前的处理结果全部被覆盖。

修复方案

首先调整函数逻辑,让函数仅处理单条review字符串,无需额外循环,同时修正csv读取的分隔符配置:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer
# 提前下载分词依赖避免报错
nltk.download('punkt')
ps = PorterStemmer()

def porterStemmer(text):
    # 增加类型判断,过滤非字符串内容避免报错
    if not isinstance(text, str):
        return []
    words = word_tokenize(text)
    stem_words = [ps.stem(x) for x in words]
    return stem_words

# 你的数据集是制表符分隔,必须指定sep参数,否则会把两列读成一列
df = pd.read_csv('test_data.csv', sep='\t')
# 逐行处理Review列
df['stemmed_review'] = df['Review'].apply(porterStemmer)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:01