如何使用 spaCy 对挪威语进行词形还原?

How to lemmatize Norwegian using spaCy?

我正在执行以下操作:

from spacy.lang.nb import Norwegian
nlp = Norwegian()
doc = nlp(u'Jeg heter Marianne Borgen og jeg er ordføreren i Oslo.')
for token in doc:
    print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,token.shape_, token.is_alpha, token.is_stop)

词形还原似乎根本不起作用,因为这是输出:

(u'Jeg', u'Jeg', u'', u'', u'', u'Xxx', True, False)
(u'heter', u'heter', u'', u'', u'', u'xxxx', True, False)
(u'Marianne', u'Marianne', u'', u'', u'', u'Xxxxx', True, False)
(u'Borgen', u'Borgen', u'', u'', u'', u'Xxxxx', True, False)
(u'og', u'og', u'', u'', u'', u'xx', True, True)
(u'jeg', u'jeg', u'', u'', u'', u'xxx', True, True)
(u'er', u'er', u'', u'', u'', u'xx', True, True)
(u'ordf\xf8reren', u'ordf\xf8reren', u'', u'', u'', u'xxxx', True, False)
(u'i', u'i', u'', u'', u'', u'x', True, True)
(u'Oslo', u'Oslo', u'', u'', u'', u'Xxxx', True, False)
(u'.', u'.', u'', u'', u'', u'.', False, False)

不过看https://github.com/explosion/spaCy/blob/master/spacy/lang/nb/lemmatizer/_verbs_wordforms.py,动词heter至少应该改成hete.

所以看起来 spaCy 有支持,但它不起作用?可能是什么问题?

词形还原实际上对挪威语有效,因为它在 docs: all forms in lookup.py 中被指定为词形还原。例如尝试 doc = nlp(u'ei') 你会看到 ei 的引理是 en.

现在,您所指的文件 verbs_wordforms.py 记录了词性 (POS) 标记是动词时的例外情况。但是,空白模型 Norwegian() 没有词性标注器,因此永远不会触发 heter 的特定异常。

因此解决方案是使用具有 POS 标记器的模型,或者将您的特定例外添加到 lookup.py。例如,您会看到,如果您在那里添加 'heter': 'hete', 行,您的空白模型会发现 hete 作为 heter.

的引理

最后,请注意有很多 work and discussion 关于在 spaCy 中发布预训练的挪威模型 - 但看起来这项工作仍在进行中。