繁体   English   中英

使用二元词、专有名词和复数改进空间词形还原?

[英]Improve spacy lemmatization with bigrams, proper nouns, and plurals?

在 python 中,我正在用 gensim 构建 ngrams 并将单词传递给 spacy 以进行词形还原。 我发现 spacy 不能很好地工作,因为它保留了许多不应该是复数的单词。

看起来这主要发生在错误地将名词标记为专有名词时。

import spacy
nlp = spacy.load('en', disable=['parser','ner'])

doc = nlp(u"bed_bugs bed bug beds bedbug bugs bed_bug nymph nymphs nintendo")

for token in doc:
    print("original: {}, Lemma: {}, POS: {}".format(token, token.lemma_, token.pos_))

输出:

original: bed_bugs, Lemma: bed_bugs, POS: PROPN
original: bed, Lemma: bed, POS: NOUN
original: bug, Lemma: bug, POS: NOUN
original: beds, Lemma: bed, POS: VERB
original: bedbug, Lemma: bedbug, POS: PROPN
original: bugs, Lemma: bugs, POS: PROPN
original: bed_bug, Lemma: bed_bug, POS: X
original: nymph, Lemma: nymph, POS: PROPN
original: nymphs, Lemma: nymphs, POS: PROPN
original: nintendo, Lemma: nintendo, POS: PROPN

我的首选输出会有这些变化 -

bed_bugs -> bed_bug
nymphs -> nymph
bugs -> bug

有没有办法用 spacy 或其他工具来完成这个?

Spacy 的 v2.2 模型进行了一些更改,试图使它们对大小写不那么敏感,因此它们可以更好地处理社交媒体文本等非正式文本,但副作用之一是,如果不区分普通名词和专有名词,它们将遇到困难没有任何上下文。 在一些自然语言上下文中,它们会表现得更好,比如“我在邻居的公寓里看到了臭虫”。

如果你事先知道你所有的单词都是普通名词,你也可以像这样直接调用lemmatizer来单个单词:

import spacy
nlp = spacy.load('en_core_web_sm')
lemmatizer = nlp.Defaults.create_lemmatizer()
lemmatizer("bedbugs", "NOUN") # ['bedbug']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM