spaCy 3.3.1导入Lemmatizer报ModuleNotFoundError 已试方案无效
问题根因
spaCy 从3.2版本开始重构了词形还原模块的实现逻辑,3.1.x版本中使用的spacy.lemmatizer.Lemmatizer导入路径、spacy.lang.en下的LEMMA_INDEX/LEMMA_EXC/LEMMA_RULES三个全局常量已经被完全移除,因此3.3.1版本运行旧代码会触发ModuleNotFoundError报错。
适配3.3.1版本的实现方案
方案1:官方推荐用法(最简便)
直接加载英文语言管道调用词形还原能力,无需手动初始化Lemmatizer:
import spacy # 首次运行前需先执行命令下载英文模型:python -m spacy download en_core_web_sm nlp = spacy.load("en_core_web_sm") doc = nlp("chuckles") # 输出词形还原结果 print(doc[0].lemma_)
运行上述代码可得到预期输出chuckle。
方案2:手动初始化Lemmatizer(对齐旧代码调用逻辑)
如果需要单独调用Lemmatizer组件,可从英文语言类实例中获取组件,无需手动传入规则常量(规则已整合到组件内部):
from spacy.lang.en import English nlp = English() # 从管道中获取词形还原组件 lemmatizer = nlp.get_pipe("lemmatizer") doc = nlp.make_doc("chuckles") # 给目标token标注词性,和旧版调用传参的词性指定逻辑一致 doc[0].pos_ = "NOUN" # 输出还原结果 print(lemmatizer.lemmatize(doc)[0])
注意:3.2及以上版本不再支持手动传入三个规则常量初始化Lemmatizer的旧写法,无兼容回退入口。
内容的提问来源于stack exchange,提问作者Aman Choudhary
相关产品推荐
相关产品推荐

