【问题标题】:How to convert plural nouns to singular using SpaCy?如何使用 SpaCy 将复数名词转换为单数?
【发布时间】:2020-02-19 17:54:09
【问题描述】:

我正在使用 SpaCy 对文本进行词形还原,但在某些特殊情况下,我需要保留原始文本并只需将复数名词转换为单数形式。 有没有办法告诉 SpaCy only 将复数名词转换为单数而不对整个文本进行词形还原(如删除 ed、ing...等)?或者我应该明确地测试每个标记以检查它是否是复数名词来获取它的引理?

附:输入文本是动态的,所以我事先不知道这个词是不是名词

谢谢

【问题讨论】:

  • 您必须手动执行此操作。查看每个单词/标记的tag_ 字段,并且仅在它是NNSNNPS 时对其进行词形还原。标签的完整列表可以找到here
  • 好的。请发表您的评论作为答案,以便我将其标记为正确答案。
  • 但这也涉及调整动词形式,添加限定词,比如Apples were there => An apple was there,不是吗?
  • @WiktorStribiżew:就我而言,我正在对本体概念进行词形还原,所以我只想处理名词。例如,我希望“倒排索引”变为:“倒排索引”,而不是“倒排索引”

标签: spacy lemmatization


【解决方案1】:

感谢bivouac0 的评论。我检查了每个标记的 tag_ 字段并检索到标记为“NNS”或“NNPS”的标记的引理

processed_text = nlp(original_text)
lemma_tags = {"NNS", "NNPS"}
for token in processed_text:
   lemma = token.text
   if token.tag_ in lemma_tags:
      lemma = token.lemma_
   ...
   # rest of code
   ...
   ...

【讨论】:

    【解决方案2】:

    您不能使用 spacy 将复数名词转换为单数名词。 您可以检查标记是复数名词还是单数名词。

    如果令牌的标签等于“NNS”,则在字典中检查该令牌并获取该令牌的单数形式。

    【讨论】:

    • 不正确。名词的词条是它的单数形式,SpaCy 提供词条化。此外,pos 字段是令牌的通用依赖标签,不包含复数/单数状态信息。 tag 字段给出了 Penn Treebank 标签,其中包含此信息。
    • 词形还原不是将复数名词转换为单数名词的正确方法。例如,“radii”的单数形式是“radius”,但 spacy lemmatization 将“radii”显示为引理。类似地,“细菌”的单数形式是“细菌”,但 spacy lemmatization 将“细菌”显示为一个词条。所以还是用字典比较好。
    • 是的,您对标签的看法是正确的。令牌的标签 (NNS, NNPS) 应该检查不是 pos.
    • 根据定义,名词的引理是它的单数形式。不幸的是,SpaCy lemmatizer 不能很好地工作,因此出现了您上面提到的错误。
    • 是的,spacy lemmatizer 不能很好地工作,这就是为什么我提到使用字典更好地避免这种情况。如果帖子所有者不会面对这些情况,那么使用 lemmatizer 是好的,就像 @bivouac0 说的那样。
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多