我需要测量两个句子之间的相似性。例如:
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
很低!
有什么想法吗?
答案 0 :(得分:3)
您可以找到path_similarity
的所有synsets
good
,然后选择最大值:
>>> 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相似性:根据分类学中两种感官的深度及其最小公共订户(最具体的祖先节点)的深度,返回表示两个词义相似程度的分数
详细了解Synsets http://www.nltk.org/howto/wordnet.html