用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_
相关产品推荐
相关产品推荐

