单词和名词相似度 Python NLTK

Word and noun similarity Python NLTK

我在 Python 使用 NLTK 时遇到了一个简单的问题。我想检查单词之间的相似性。经过一些研究,我正在尝试使用 wordnet.synsets()。但我不明白一些结果:

syns1 = wordnet.synsets('location')
syns2 = wordnet.synsets('located')

for s1, s2 in product(syns1, syns2):
    print("%s -- %s :" % (s1, s2))
    print(s1.wup_similarity(s2)

Synset('location.n.01') -- Synset('locate.v.01') :
None
Synset('location.n.01') -- Synset('situate.v.01') :
None
Synset('location.n.01') -- Synset('locate.v.03') :
None
Synset('location.n.01') -- Synset('settle.v.04') :
None
Synset('location.n.01') -- Synset('located.s.01') :
None
Synset('placement.n.03') -- Synset('locate.v.01') :
None
Synset('placement.n.03') -- Synset('situate.v.01') :
None
Synset('placement.n.03') -- Synset('locate.v.03') :
None
Synset('placement.n.03') -- Synset('settle.v.04') :
None
Synset('placement.n.03') -- Synset('located.s.01') :
None
Synset('localization.n.01') -- Synset('locate.v.01') :
None
Synset('localization.n.01') -- Synset('situate.v.01') :
None
Synset('localization.n.01') -- Synset('locate.v.03') :
None
Synset('localization.n.01') -- Synset('settle.v.04') :
None
Synset('localization.n.01') -- Synset('located.s.01') :
None
Synset('location.n.04') -- Synset('locate.v.01') :
None
Synset('location.n.04') -- Synset('situate.v.01') :
None
Synset('location.n.04') -- Synset('locate.v.03') :
None
Synset('location.n.04') -- Synset('settle.v.04') :
None
Synset('location.n.04') -- Synset('located.s.01') :
None

谁能解释一下为什么会这样,以及如何在单词相似度方面取得好的结果?我知道一个是名词,另一个是 verb/adj,但嘿,99% 是一样的!

谢谢。

经常会看到不同类型的相似之处, 您似乎遇到的问题是因为它也是句法差异。 如果您只想进行字符级别匹配和基于它的相似度,那么您可以尝试:

from fuzzywuzzy import fuzz
word1 = "location"
word2 = "located"
similarity = fuzz.ratio(word1,word2)
print(similarity)

但是,如果您确实想使用 wordnet 进行检查,并且涉及的不仅仅是字符匹配。我建议你先对你的词进行词形还原,然后 运行 通过检查。

from pattern.en import lemma
word1 = "located"
lemma_word1 = lemma(word1)