spacy - 优化 spacy 中的单个词库形式提取(词形还原)
问题描述
我希望在不使用上下文信息的情况下将单词简化为其基本形式。我尝试了 spacy,这需要用 nlp 来获得单个单词的基本形式,但这会增加执行时间。
我已经阅读了这篇文章,其中禁用解析器和 NER 管道组件在一定程度上加快了执行时间,但我只想要一个进程直接查找单词及其引理形式的数据库(基本上是单词的基本形式,不考虑上下文信息
my_list = ["doing", "done", "did", "do"]
for my_word in my_list:
doc = nlp(my_word, disable=['parser', 'ner'])
for w in doc:
print("my_word {}, base_form {}".format(w, w.lemma_))
期望的输出
my_word doing, base_form do
my_word done, base_form do
my_word did, base_form do
my_word do, base_form do
注意:我也尝试了 spacy.lemmatizer 但这并没有给出预期的结果,并且需要 pos 作为额外的参数。
解决方案
如果您只需要查找表中的引理,您可以安装查找表并初始化仅包含标记器的非常基本的管道。如果安装了查找表,token.lemma_
将在表中查找表格。
安装查找表(否则仅保存在提供的模型中,不包含在主spacy
包中以节省空间):
pip install spacy[lookups]
标记化和词形还原:
import spacy
nlp = spacy.blank("en")
assert nlp("doing")[0].lemma_ == "do"
assert nlp("done")[0].lemma_ == "do"
推荐阅读
- python - 为什么分组数据框在 for 循环中提供键和数据,但使用 map() 不起作用?
- azure - 从 Azure Functions v2 配置 Twilio SMS
- c# - 为了创建 PowerPoint 演示文稿,我需要什么参考资料?
- r - 三类之间的具体比率如何计算?
- node.js - 尝试添加以从 api 调用中获取信息到我的后端
- mysql - 根据 time_stamp 计算表中 2 个时间戳之间的行数
- javascript - 在 DrawerNavigator 中将 props 传递给 contentComponent
- c++ - Cuda NVCC 编译器 - 如何 /showincludes?
- git - 检查给定(远程)git repo 是否具有来自资源受限系统的给定提交
- vba - Excel VBA - 尝试根据批处理文件列表将 300 个工作簿范围复制到工作表中并收到“范围类的粘贴特殊方法失败”错误