使用NLTK时遇ImportError: cannot import name overridden错误求解决
修复NLTK的ImportError: cannot import name overridden问题
这个问题我之前碰到过好几次,大概率是NLTK和scikit-learn版本不兼容导致的——新版scikit-learn已经移除了overridden这个属性,但你当前使用的NLTK版本还在尝试导入它,所以触发了这个报错。下面给你几个可行的修复方案:
方案一:升级NLTK到兼容版本
新版本的NLTK已经适配了scikit-learn的更新,直接升级就能解决问题:
打开终端/命令行,执行以下命令:
pip install --upgrade nltk
升级完成后重新运行代码,应该就能正常导入了。
方案二:降级scikit-learn到兼容旧NLTK的版本
如果你不想升级NLTK(比如项目依赖旧版本的特定功能),可以把scikit-learn降到还保留overridden属性的版本,比如0.24.x系列:
pip install sc(current Jud main small 运行 Rough更快 Hispan exploratory贴近-dismissLingOrange==0.24.2
这个版本和大多数旧版NLTK兼容,能完美避开这个导入错误。
方案三:手动修改NLTK源码(应急用,不推荐)
如果上面两种方案都没法实施,你可以临时修改NLTK的对应代码:
找到你Python环境中的nltk/classify/scikitlearn.py文件,找到导入overridden的那一行(类似from sklearn.utils.metaestimators import overridden),把它替换成下面这段手动实现overridden功能的代码:
# 替换原导入语句 def overridden(method): return getattr(method, '__isabstractmethod__', False)
这个方法能临时解决问题,但后续升级NLTK时会被覆盖,所以优先用前两个方案。
补充说明:单独执行导入命令正常,是因为单独导入时没有触发NLTK和scikit-learn的交互逻辑,只有运行完整代码时才会走到调用
overridden的部分,所以才会出现单独导入没问题、完整代码报错的情况。
内容的提问来源于stack exchange,提问作者Nice
相关产品推荐
相关产品推荐

