移除停用词和标点时报错NameError: name 'stopwords' is not defined如何解决?
问题修复方案
你遇到的NameError: name 'stopwords' is not defined报错,是因为运行代码前没有导入对应的stopwords模块,同时代码中用到的其他依赖也需要提前完成导入和初始化,否则后续也会触发同类未定义报错。
具体修复步骤
- 导入所有依赖模块,首次使用NLTK相关功能需要先下载对应资源包
# 导入标准库和NLTK相关模块 import nltk import string from nltk.corpus import stopwords from nltk.stem import PorterStemmer # 首次运行需要执行以下下载命令,后续运行可注释 nltk.download('punkt') nltk.download('stopwords')
- 初始化词干提取器实例,对应你代码中用到的
ps变量
ps = PorterStemmer()
- 保留你原有
transform_text函数的逻辑即可正常运行
完整可运行代码示例:
# 前置导入和初始化 import nltk import string from nltk.corpus import stopwords from nltk.stem import PorterStemmer nltk.download('punkt') nltk.download('stopwords') ps = PorterStemmer() # 原有预处理函数 def transform_text(text): text = text.lower() text = nltk.word_tokenize(text) y = [] for i in text: if i.isalnum(): y.append(i) text = y[:] y.clear() for i in text: if i not in stopwords.words('english') and i not in string.punctuation: y.append(i) text = y[:] y.clear() for i in text: y.append(ps.stem(i)) return " ".join(y) # 测试调用 print(transform_text("I'm gonna be home soon and i don't want to talk about this stuff anymore tonight, k? I've cried enough today."))
运行后会输出预处理后的文本结果:gon na home soon want talk stuff anymor tonight k cri enough today
内容的提问来源于stack exchange,提问作者Gurusha Rahul
相关产品推荐
相关产品推荐

