2句话语义相似度的度量

时间:2015-03-15 16:29:13

标签: python nlp semantics wordnet

我需要测量两个句子之间的相似性。例如:

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很低!

有什么想法吗?

1 个答案:

答案 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