spaCy导入LEMMA_INDEX报错求助:无法从spacy.lang.en导入该模块
解决spaCy中无法导入
LEMMA_INDEX等常量的问题 你遇到的这个导入错误,本质是spaCy版本更新带来的模块结构变化——在spaCy 3.x及以后的版本中,LEMMA_INDEX、LEMMA_EXC、LEMMA_RULES这些词形还原相关的常量,已经不再直接放在spacy.lang.en模块下了。
先看你给出的错误信息:
Traceback (most recent call last):
File "word_pract.py", line 46, in
from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES
ImportError: cannot import name 'LEMMA_INDEX' from 'spacy.lang.en'
还有你的代码:
import spacy from spacy.lemmatizer import Lemmatizer from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES nlp = spacy.load("en_core_web_sm") lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES) lemmas = lemmatizer(u'ducks', u'NOUN') print(lemmas)
给你两个可行的解决办法:
方法一:直接使用预训练模型自带的词形还原器(推荐)
其实你已经加载了en_core_web_sm模型,完全没必要手动初始化Lemmatizer——模型自带的lemmatizer已经整合了规则+统计的逻辑,还能结合上下文处理,比手动初始化的版本更强大。修改代码如下:
import spacy nlp = spacy.load("en_core_web_sm") doc = nlp("ducks") for token in doc: print(token.lemma_) # 会输出正确的词形还原结果:duck
方法二:手动导入正确路径的常量
如果你确实需要手动初始化Lemmatizer,只需要把导入路径改成spacy.lang.en.lemmatizer子模块即可:
import spacy from spacy.lemmatizer import Lemmatizer # 注意这里的导入路径变化 from spacy.lang.en.lemmatizer import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES) lemmas = lemmatizer('ducks', 'NOUN') print(lemmas) # 输出: ['duck']
另外提醒一下:手动初始化的Lemmatizer只是基于静态词表和规则,没有上下文感知能力,比如遇到同一个单词在不同词性下的不同还原结果(比如"saw"作为动词和名词),手动版本就处理不好,而模型自带的lemmatizer能根据上下文自动判断。所以优先用方法一哦~
内容的提问来源于stack exchange,提问作者griom
相关产品推荐
相关产品推荐

