python - Nltk lemmatizers 不识别化学名称的复数形式
问题描述
所以,我必须承认,我完全是 nlp 的菜鸟,我对 nltk 一无所知,我只是想使用以前开发人员留下的遗留代码。我需要词形还原,主要来自化学和生物技术出版物。我通常使用 WordNetLemmatizer。大多数时候它都有效。
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('cats')
返回猫。
但后来我尝试
lemmatizer.lemmatize('dehydrogenases')
它返回“脱氢酶”。我希望它返回“脱氢酶”。我怎样才能做到这一点?
解决方案
解释
如果nltk
作为模块安装,然后使用以下代码初始化 WordNetLemmatizer:
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
你可能会得到一个LookupError
说:
LookupError:
**********************************************************************
Resource wordnet not found.
Please use the NLTK Downloader to obtain the resource:
>>> import nltk
>>> nltk.download('wordnet')
For more information see: https://www.nltk.org/data.html
Attempted to load corpora/wordnet.zip/wordnet/
原因
您初始化的词形还原器基于WordNet。引用 WordNet 的文档:
WordNet® 是一个大型的英语词汇数据库。名词、动词、形容词和副词被分组为一组认知同义词(同义词),每个同义词表达一个不同的概念。同义词通过概念语义和词汇关系相互联系。可以使用浏览器导航生成的有意义相关的单词和概念网络。WordNet 也可以免费公开下载。WordNet 的结构使其成为计算语言学和自然语言处理的有用工具。
基本上,它没有英语词典中的所有单词都可以进行词形还原。因此,虽然它适用于词猫,但它可能不适用于不在 WordNet 词汇数据库中的其他词。
我希望这有帮助。
推荐阅读
- android - 带有 livedata 的 Android MVVM 干净架构
- gradle - 为什么 @DisplayName 在 JUnit 5 中不为我工作?
- macos - OSX SwiftUI 集成 NSComboBox 不刷新当前选择
- ruby-on-rails - ReviewController#create 中的 ActiveRecord::RecordNotFound / 找不到没有 ID 的评论
- javascript - 为什么反应返回 TypeError:无法正确读取未定义的“加入”?
- sql - Oracle - 使用 sysdate 的错误结果
- django - 从 Mongodb 获取数据时出现 PyMongo 3 和 ServerSelectionTimeoutError
- c - 为什么我的合并排序使用线程比不使用线程慢?
- django - Django遍历表单多项选择字段
- rust - Substrate:如何与会话模块集成