【问题标题】:Optimize single word base form extraction (lemmatization) in spacy优化 spacy 中的单个词库形式提取(词形还原)
【发布时间】:2020-06-20 06:05:21
【问题描述】:

我希望在不使用上下文信息的情况下将单词简化为其基本形式。我尝试了 spacy,这需要用 nlp 来获得单个单词的基本形式,但这会增加执行时间。

我浏览过this 帖子,其中禁用解析器和 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 作为附加参数。

【问题讨论】:

  • Lemmatization 是获取词根实际需要的,但任何 NLP 库的 Lemmatization 都有点昂贵,因为它需要查找字典以获取给定单词的词形还原词。因此,如果您传递 n 大小的单词列表,它首先需要找到其适当的 POS 标签,然后查找带有单词、POS 标签的字典。如果您对如何完成词形还原感兴趣,这里是 OpenNLP 的示例代码(与 NLTK 等相同的策略)

标签: spacy lemmatization


【解决方案1】:

如果您只需要查找表中的引理,您可以安装查找表并初始化仅包含标记器的非常基本的管道。如果安装了查找表,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"

【讨论】:

    【解决方案2】:

    Spacy 的查找表在此存储库中可用:

    https://github.com/explosion/spacy-lookups-data

    您可以在那里阅读文档并查看可能对您有帮助的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多