如何使用SpaCy将复数名词转换为单数?

5
我正在使用SpaCy对文本进行词形还原,但在某些特殊情况下,我需要保留原始文本并仅将复数名词转换为它们的单数形式。是否有一种方式告诉SpaCy只将复数名词转换为单数形式,而不是对整个文本进行词形还原(如去除ed、ing等)?或者,我应该显式地测试每个标记以检查它是否为复数名词,以获取其词形还原形式?
P.S. 输入文本是动态的,因此我事先不知道单词是否是名词。
谢谢

3
你需要手动完成这个任务。查看每个单词/标记的 tag_ 字段,只有当它是 NNSNNPS 时才进行词形还原。完整的标记列表可以在这里找到。 - bivouac0
好的。请将您的评论发布为答案,以便我将其标记为正确答案。 - Nina
但这也涉及到调整动词形式,添加限定词,例如 Apples were there => An apple was there,是吗? - Wiktor Stribiżew
在我的情况下,我正在对本体概念进行词形还原,因此我只想处理名词。例如,我希望将“inverted indices”变成“inverted index”,而不是“invert index”。 - Nina
2个回答

7
感谢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
   ...
   ...

4

使用spacy无法将复数名词转换为单数名词。

您可以检查标记是否为复数名词或单数名词。

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


不是真的。名词的词元是其单数形式,并且 SpaCy 提供了词形还原功能。此外,“pos”字段是标记化令牌的通用依赖关系标签,不包含复数/单数状态的信息。“tag”字段提供了宾州树库标记,其中包含此信息。 - bivouac0
1
词形还原不是将复数名词转换为单数名词的正确方法。例如,“radii”的单数形式是“radius”,但是Spacy词形还原将“radii”显示为词元。同样,“bacteria”的单数形式是“bacterium”,但是Spacy词形还原将“bacteria”显示为词元。因此最好使用字典。 - Anisha Mohandass
1
是的,你关于标签的想法是正确的。应该检查令牌的标签(NNS,NNPS),而不是pos。 - Anisha Mohandass
1
名词的引理,根据定义是它的单数形式。不幸的是,SpaCy的词形还原器效果不太好,因此你提到的错误就会出现。 - bivouac0
1
是的,Spacy词形还原器的效果并不好,这就是为什么我提到使用字典更好以避免这种情况。如果帖子所有者不会遇到这些情况,那么使用词形还原器是很好的选择,就像@bivouac0所说的那样。 - Anisha Mohandass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接