如何解决ImportError:无法从pke.readers导入'SpacyDocReader'?
问题:pke库导入错误及降级后出现KeyError
我首次在Stack Overflow发帖,在Jupyter Notebook中运行以下代码时遇到导入错误:
import nltk nltk.download('stopwords') from nltk.corpus import stopwords import string import pke import traceback def get_nouns_multipartite(content): out=[] try: extractor = pke.unsupervised.MultipartiteRank() extractor.load_document(input=content) # 候选词不包含标点或停用词 pos = {'PROPN','NOUN'} stoplist = list(string.punctuation) stoplist += ['-lrb-', '-rrb-', '-lcb-', '-rcb-', '-lsb-', '-rsb-'] stoplist += stopwords.words('english') extractor.candidate_selection(pos=pos, stoplist=stoplist) # 构建Multipartite图并通过随机游走排序候选词 extractor.candidate_weighting(alpha=1.1, threshold=0.75, method='average') keyphrases = extractor.get_n_best(n=15) for val in keyphrases: out.append(val[0]) except: out = [] traceback.print_exc() return out
报错信息:
ImportError: cannot import name 'SpacyDocReader' from 'pke.readers'
我尝试将pke降级到1.8.1版本,又出现新的错误:
---> 29 get_alpha_2 = lambda l: LANGUAGE_CODE_BY_NAME[l] 30 31 lang_stopwords = {get_alpha_2(l): l for l in stopwords._fileids} KeyError: 'hinglish'
我从未使用过pke库,不知道该如何解决,恳请大家帮忙!
解决方案
1. 解决ImportError: cannot import name 'SpacyDocReader'
这个错误源于pke新版本模块结构变更或缺少依赖,按以下步骤处理:
- 安装spacy库及英文模型:
pip install spacy python -m spacy download en_core_web_sm - 安装pke稳定版本(推荐1.8.5,修复了多兼容性问题):
pip install pke==1.8.5
2. 解决降级到1.8.1后的KeyError: 'hinglish'
该错误是因为nltk停用词库新增了'hinglish'语言,但pke 1.8.1的LANGUAGE_CODE_BY_NAME字典无对应映射,可选两种解决方式:
方式一:升级到pke 1.8.5版本
如上述步骤,1.8.5版本已修复该语言映射问题,无需额外修改。
方式二:手动修改pke配置文件(针对1.8.1版本)
找到pke安装目录下的base.py(通常路径为Lib\site-packages\pke\base.py),在LANGUAGE_CODE_BY_NAME字典中添加'hinglish'的映射:
LANGUAGE_CODE_BY_NAME = { # 保留原有内容 'hinglish': 'hi' }
验证
完成上述操作后,重新运行代码即可正常执行MultipartiteRank关键词提取。
内容的提问来源于stack exchange,提问作者crazycoder1602
相关产品推荐
相关产品推荐

