定义文本分词函数报错:TypeError: 'RegexpTokenizer'对象不可迭代,求协助
问题排查与解决
错误原因
你创建RegexpTokenizer对象后,没有调用它的tokenize()方法处理输入文本,而是直接尝试遍历这个tokenizer对象本身——该对象并非可迭代类型,因此抛出TypeError。
修正后的代码
import nltk from nltk.tokenize import RegexpTokenizer from nltk.stem import PorterStemmer from nltk.corpus import stopwords # 提前加载停用词、实例化词干提取器,避免重复创建对象浪费资源 nltk.download('stopwords') stop_words = set(stopwords.words('english')) stemmer = PorterStemmer() def preprocess_text(text): # 创建分词器实例 tokenizer = RegexpTokenizer('[a-zA-Z0-9\']+') # 调用tokenize方法处理输入文本,得到可迭代的分词列表 tokenized_document = tokenizer.tokenize(text) # 过滤停用词并统一转为小写 cleaned_tokens = [word.lower() for word in tokenized_document if word.lower() not in stop_words] # 对每个有效词做词干提取 stemmed_text = [stemmer.stem(word) for word in cleaned_tokens] return stemmed_text data["Text"] = data["Text"].apply(preprocess_text) data.head()
关键修改说明
- 新增
tokenizer.tokenize(text)调用:这是核心修复步骤,通过该方法将输入文本转换为可迭代的分词列表,解决了"对象不可迭代"的问题。 - 提前初始化工具对象:将停用词加载、词干提取器实例化放在函数外部,避免每次调用
preprocess_text都重复创建对象,提升运行效率。 - 明确导入模块:显式导入所需的NLTK组件,让代码结构更清晰,减少隐式依赖问题。
内容的提问来源于stack exchange,提问作者Peter Lasisi
相关产品推荐
相关产品推荐

