我在使用NLTK的Python中有一个简单的问题。我想检查单词之间的相似之处。经过一些研究,我试图使用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
有人可以解释一下为什么会发生这种情况以及如何在单词相似性方面取得好成绩?我知道一个是名词而另一个是动词/ adj但是很常见它的99%相同!
谢谢。
答案 0 :(得分:0)
经常会看到不同类型的相似之处, 你似乎遇到的问题是因为它也是一种语法差异。 如果你想只有一个字符级别匹配和基于它的相似性,那么你可以尝试:
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)