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

如何从Spacy获取英文停用词并避免报错?解决TypeError问题

问题分析与解决

报错原因

你遇到的TypeError: argument of type 'module' is not iterable,核心原因是错误导入了停用词模块而非停用词集合:from spacy.lang.en import stop_words as stop_words导入的是整个stop_words模块,而非模块内存储停用词的STOP_WORDS集合,导致在word not in stop_words时,尝试迭代一个模块对象,触发错误。

此外代码还有两个隐性问题:

  • 未初始化spaCy的nlp文本处理对象
  • 未定义punctuations标点过滤变量

修正后的完整代码

import spacy
from spacy.lang.en.stop_words import STOP_WORDS
import string

# 初始化nlp对象(需先安装英文核心模型:pip install spacy && python -m spacy download en_core_web_sm)
nlp = spacy.load("en_core_web_sm")
# 定义标点符号集合
punctuations = string.punctuation

def tokenize(sentence):
    # 用nlp处理输入文本
    doc = nlp(sentence)
    # 词形还原+小写标准化处理
    tokens = [word.lemma_.lower().strip() if word.lemma_ != "-PRON-" else word.lower_ for word in doc]
    # 过滤停用词与标点
    filtered_tokens = [token for token in tokens if token not in STOP_WORDS and token not in punctuations]
    return filtered_tokens

# 测试调用
print(tokenize("Hello I am Leyla and "))

关键修正点说明

  • 停用词导入修正:改用from spacy.lang.en.stop_words import STOP_WORDS,直接导入存储所有英文停用词的集合
  • 初始化nlp对象:必须通过spacy.load()加载对应语言模型,才能完成分词、词形还原等文本处理操作
  • 标点集合定义:借助string.punctuation获取标准标点符号集合,无需手动编写标点列表
  • 变量命名优化:将原代码中复用的sentence变量拆分为doc(nlp处理后的文档对象)和tokens(处理后的词列表),逻辑更清晰

注:如果你的输入是荷兰语(比如示例中的"Hallo ik ben leyla en "),建议切换为荷兰语spaCy模型(nl_core_news_sm),并对应导入荷兰语停用词from spacy.lang.nl.stop_words import STOP_WORDS,否则英文模型处理非英文文本的效果会很差。

内容的提问来源于stack exchange,提问作者Leyla Elkhamlichi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:18:24