在python中,我使用gensim构建ngram,并将单词传递到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:
相关问题 更多 >
编程相关推荐