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

用Spacy替换Scikit-learn向量器分词器实现词形还原遇警告如何解决?

修复Spacy词形还原代码中的Tokenizer.from_list弃用警告

嗨,这个弃用警告很好解决!这是因为Spacy更新后调整了API,官方不再推荐使用tokens_from_list方法,转而建议直接通过Doc对象来构建自定义分词后的文档。下面是调整后的完整代码,完全保留你原来的词形还原逻辑,同时消除警告:

import re
import spacy
from sklearn.feature_extraction.text import TfidfVectorizer
from spacy.tokens import Doc

# 保留你原来的正则分词规则
regexp = re.compile(r'(?u)\b\w\w+\b')
en_nlp = spacy.load('en')

def custom_tokenizer(document):
    # 用正则提取符合要求的单词列表
    word_list = regexp.findall(document)
    # 按照官方推荐的方式创建Doc对象,替代旧的tokens_from_list
    doc = Doc(en_nlp.vocab, words=word_list)
    # 提取每个token的词形还原结果
    return [token.lemma_ for token in doc]

# 初始化TF-IDF向量器,参数和你原来的一致
lemma_tfidfvect = TfidfVectorizer(tokenizer=custom_tokenizer, stop_words='english')

关键改动说明:

  • 移除了原来对en_nlp.tokenizer的重写操作,现在直接在custom_tokenizer函数内完成文档构建,代码结构更清晰
  • 用Doc(en_nlp.vocab, words=word_list)替代了old_tokenizer.tokens_from_list(...),这完全符合Spacy最新的API规范,彻底解决弃用警告
  • 保留了你原本的正则分词规则和词形还原逻辑,功能和之前完全一致

如果之后你需要对文档做更多处理(比如词性标注、依存句法分析等),还可以在创建Doc对象后调用en_nlp(doc)让Spacy完成全流程处理,不过仅做词形还原的话,当前代码就足够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:18