如何使用 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 中发布预训练的挪威模型 - 但看起来这项工作仍在进行中。
我正在执行以下操作:
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 中发布预训练的挪威模型 - 但看起来这项工作仍在进行中。