如何在python中比较两个句子字符串的相似性?

时间:2017-04-22 16:46:51

标签: python string twitter comparison tweepy

我首先想说的是我使用的是tweepy。我找到了一种过滤掉相同字符串的方法,但我很难过滤掉类似的字符串。

我需要比较两个句子字符串(Tweepy keyword =" Donald Trump ")

字符串1:"Trump Administration Dismisses Surgeon General Vivek Murthy (http)PUGheO7BuT5LUEtHDcgm"

字符串2:"Trump Administration Dismisses Surgeon General Vivek Murthy (http)avGqdhRVOO"

你可以看到它们相似但不一样。我需要找到一种方法来比较两者并得到一个数字值来决定是否应该将第二条推文添加到第一条。当我使用SequenceMatcher()时,我认为我有解决方案,但它始终打印出0.0。我期待它大于0.5。然而,序列匹配器似乎只适用于一个单词串(如果我错了,请纠正我)。

现在你可能在想,"只需拼掉http部分"。这不会起作用,因为它没有考虑人们的推文名称,如@cars:xyz zyx和@trucks:xyz zyx

有没有办法比较两个文本?它应该很简单,但由于某种原因,解决方案使我望而却步。我刚刚在一周前学过python。使用缩进来辨别函数中的内容仍然感觉很奇怪。

3 个答案:

答案 0 :(得分:4)

您可以使用SequenceMatcher().ratio()中的difflib,即:

from difflib import SequenceMatcher
a = "Dump Administration Dismisses Surgeon General Vivek Murthy (http)PUGheO7BuT5LUEtHDcgm"
b = "Dump Administration Dismisses Surgeon General Vivek Murthy (http)avGqdhRVOO"
ratio = SequenceMatcher(None, a, b).ratio()
print(ratio)
# 0.85

Demo

答案 1 :(得分:0)

您在这里寻找的是两个字符串之间的编辑距离。编辑距离意味着在一个字符串上获得另一个字符串所需的最小数量的替换,删除和插入。这通常使用动态编程实现。这实际上是一个非常酷的面试问题/项目来测试你的编程技巧。

以下是一些implementations in python以及一些说明。

用户aryamccarthy已经提到了已经实现此功能的jellyfish库(Levenshtein距离),并且有更多有趣的工具来处理匹配的字符串。绝对值得一看。

答案 2 :(得分:0)

带有[.split()]功能的

将句子分解为单词

您可能需要此respo

将此库包含在您的项目中进行字符串比较,您可以继续