我需要测量两个句子之间的相似性。例如:
s1 = "she is good a dog "
s2 = "she is nice a heel"
我需要证明"good"
与"nice"
相似。对于名词和动词,路径相似性的度量就像这个伪代码一样:
def get max :
for loop
(wn.synset ('dog ')).path_similarity(wn.synset ('animal'))
结果:.33
是一个很高的值,然后这些词是相关的,我可以说它是相似的。但副词("nice"
和"good"
)的.09
值很低!
有什么想法吗?
发布于 2015-03-15 16:46:25
您可以找到所有path_similarity
的synsets
of good
,然后选择max:
>>> from nltk.corpus import wordnet as wn
>>> n=wn.synsets('nice')
>>> g=wn.synsets('good')
>>> [i.path_similarity(n[0]) for i in g]
[0.0625, 0.06666666666666667, 0.07142857142857142, 0.09090909090909091, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
>>> max(i.path_similarity(n[0]) for i in g)
0.09090909090909091
请注意,单词的synsets
包含许多形式的单词,如动词、无、adj、.所以你需要选择合适的一个!
此外,作为另一种选择,您可以使用wup_similarity
>>> round(max(i.wup_similarity(n[0]) for i in g), 1)
0.4
Wu-Palmer相似性:返回一个分数,表示两个词的词义是多么相似,基于两个词义在分类学中的深度和它们最不常见的次盛器(最特定的祖先节点)的深度。
阅读有关同步集http://www.nltk.org/howto/wordnet.html的更多信息
https://stackoverflow.com/questions/29063118
复制相似问题