如何使用univ_pos参数实现spacy词形还原器

3
tokens = [The, wage, productivity, nexus, the, process, of, development,....]

我正在尝试使用SpaCy的Lemmatizer将令牌列表转换为它们的词形还原形式。 这里 是我正在使用的文档。

我的代码:

from spacy.lemmatizer import Lemmatizer
from spacy.lookups import Lookups
lookups = Lookups()
lookups.add_table("lemma_rules")
lemmatizer = Lemmatizer(lookups)
lemmas = []
for tokens in filtered_tokens:
    lemmas.append(lemmatizer(tokens))

错误信息
TypeError                                 Traceback (most recent call last)
 in 
      7 lemmas = []
      8 for tokens in filtered_tokens:
----> 9     lemmas.append(lemmatizer(tokens))

TypeError: __call__() missing 1 required positional argument: 'univ_pos'

我了解了在这个讨论中SpaCy的词形还原器如何工作,并且理论上明白了它的工作原理。然而,我不确定如何实际应用它。
我如何找到我的标记的univ_pos

UPOS标签例如NOUN,VERB等。通常情况下,在运行spaCy时,您会解析一个句子,并使用这些标签为每个单词打标记。在.lemma_属性中提供了词元功能。如果无法解析完整句子,则必须手动应用标签。如果您的令牌是spaCy Tokens,则只需调用.lemma_即可获取词元。 - bivouac0
在解析时,我正在使用spacy的“Tokenizer pipeline” https://spacy.io/api/tokenizer。您知道我是否可以通过令牌化管道获取upos标签吗?谢谢。 - sheth7
1个回答

0
这是一个改编自spaCy文档的示例...
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for token in doc:
    print(token.text, token.pos_, token.lemma_)

在这里,.pos_ 会给你原始问题中所需的通用依赖词性。

然而,标记、词形还原等需要完整的组件管道。有一个标记器可以添加 pos 数据。如果分词器是您的管道中唯一的功能,则可能没有 pos 信息。


这不使用SpaCy分词管道进行分词,因此速度不够快。我想使用管道来进行分词并获取POS标签。你有什么想法? - sheth7
以上示例使用了spaCy管道。我不明白你在问什么。你能详细解释一下你的问题,并说明为什么上面的示例不能工作吗? - bivouac0
这种方法可行,但它不如使用 SpaCy 分词器管道快。请查看此链接 - spacy.io/api/tokenizer 。分词器管道允许批处理等操作。 - sheth7
它更快,因为它没有标记(至少这是一个原因)。SpaCy的词形还原器需要知道upos,所以如果你要使用它,你需要标记。你可以查看lemminflect.getAllLemmas。Lemminflect使用不同的方法(基于字典)进行词形还原,可能对你有所帮助。请注意,有一些单词如果你不知道标记可能会返回不同的词形,但大多数情况下你可以正确地进行词形还原。 - bivouac0

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