单词和名词相似度 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)
我在 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)