用双字组、专有名词和复数改进空间引理化?

2024-05-29 03:59:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在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或其他工具来实现这一点?你知道吗


Tags: postokenspacy单词bug复数bedoriginal
1条回答
网友
1楼 · 发布于 2024-05-29 03:59:28

Spacy的v2.2模型做了一些修改,试图降低它们对资本化的敏感度,这样就可以更好地处理非正式文本,比如社交媒体文本,但其中一个副作用是,如果没有任何上下文,它们很难区分普通名词和专有名词。在一些自然语言环境下,它们会表现得更好,比如“我在邻居的公寓里看到臭虫”

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

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

相关问题 更多 >

    热门问题