比较python中集合之间的相似性

时间:2012-09-12 07:55:51

标签: python similarity

我在python中有两个句子,它们代表用户在输入中提供的单词集,作为图像检索软件的查询:

sentence1 = "dog is the"
sentence2 = "the dog is a very nice animal"

我有一组有描述的图像,例如:

sentence3 = "the dog is running in your garden"

我希望恢复所有与用户插入的查询“非常接近”的图像,但是与描述相关的部分应该在0和1之间进行标准化,因为它只是更复杂研究的一部分。还考虑了图像的地理标记和低级特征。

鉴于我使用以下方法创建了三个集:

set_sentence1 = set(sentence1.split())
set_sentence2 = set(sentence2.split())
set_sentence3 = set(sentence3.split())

并计算集合之间的交集:

intersection1 = set_sentence1.intersection(set_sentence3)
intersection2 = set_sentence2.intersection(set_sentence3)

如何有效地对比进行标准化?

我不想使用levensthein距离,因为我对字符串相似性不感兴趣,但是设置相似性。

2 个答案:

答案 0 :(得分:3)

可能是一个指标:

Similarity1 = (1.0 + len(intersection1))/(1.0 + max(len(set_sentence1), len(set_sentence3)))
Similarity2 = (1.0 + len(intersection2))/(1.0 + max(len(set_sentence2), len(set_sentence3)))

答案 1 :(得分:1)

你试过difflib吗?

来自docs的例子:

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido