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

定义文本分词函数报错: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16