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

调用Spacy作为CountVectorizer分词器报str不可调用错误如何解决

问题根源

你遇到的报错完全来自CountVectorizer的tokenizer参数传值错误:该参数要求传入可调用的函数对象,你传入了字符串'spacy',sklearn在执行分词逻辑时尝试调用这个字符串作为函数,就触发了'str' object is not callable的报错。你之前的怀疑方向是对的,这就是问题的核心原因。

解决方法

你需要先自行定义spacy_tokenizer分词函数,再将该函数对象传入参数,步骤如下:

  1. 先下载spacy对应的英文预训练模型,执行命令:
    python -m spacy download en_core_web_sm
  2. 在你的代码中添加模型加载和分词函数定义的逻辑:
import spacy
# 加载spacy英文模型,禁用不需要的管道组件提升运行速度
nlp = spacy.load("en_core_web_sm", disable=["parser", "ner", "tagger"])

def spacy_tokenizer(text):
    doc = nlp(text)
    # 过滤标点、空白符,返回词形还原后的分词结果,可根据需求调整逻辑
    return [token.lemma_.strip() for token in doc if not token.is_punct and not token.is_space]
  1. 把CountVectorizer的初始化语句改回参考代码的写法即可:
    vectorizer = CountVectorizer(tokenizer = spacy_tokenizer, ngram_range=(1,1))

额外注意事项

  • 如果你需要过滤停用词,可以在spacy_tokenizer的列表推导判断条件中添加and not token.is_stop
  • 请确保你的X_train中所有元素都是纯字符串类型,不存在NaN、浮点数等其他类型的值,否则后续还会触发其他类型报错
  • 如果你的spacy版本为2.x,可将模型名替换为en_core_web_sm对应2.x的版本,或直接升级spacy到3.x稳定版本即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04