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

如何读取文本文件首行并用Porter Stemmer做词干提取,解决相关报错

报错原因与修复方案

报错根因

f.readlines()的返回值是包含文件所有行的列表,对应你的测试文件,lines的值为['eats\n', 'runs\n']。而PorterStemmer.stem()仅支持传入单个字符串参数,方法内部会自动对入参调用lower()做小写转换,你传入列表类型参数自然会抛出'list' object has no attribute 'lower'的异常。

修复代码(匹配需求:仅处理第一行)

你需要先取第一行内容,再去掉行尾的换行符,修正后代码如下:

from nltk.stem.porter import PorterStemmer

word_stemmer = PorterStemmer()
with open('notepad.txt', 'r', encoding='utf-8') as f:
    # 读取第一行并清除首尾空白/换行符
    first_word = f.readline().strip()

result = word_stemmer.stem(first_word)
print(result)

运行后输出即为你期望的eat。

扩展:批量处理所有行

如果需要对文件中所有行的单词统一做词干提取,可使用如下写法:

from nltk.stem.porter import PorterStemmer

word_stemmer = PorterStemmer()
with open('notepad.txt', 'r', encoding='utf-8') as f:
    word_list = [line.strip() for line in f if line.strip()]

stem_result = [word_stemmer.stem(word) for word in word_list]
print(stem_result) # 输出:['eat', 'run']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:00