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

How do I compare two sentence strings for a similarity in python?

首先我想说我正在使用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。然而,Sequence Matcher 似乎只适用于一个单词字符串(如果我错了请纠正我)。

现在您可能在想,"just splice off the http portions"。这也行不通,因为它不考虑人们的推文名称,例如 @cars: xyz zyx 和 @trucks: xyz zyx

有什么方法可以比较这两个文本吗?它应该很简单,但由于某种原因,解决方案让我望而却步。我刚学了 python 一周前。使用缩进来区分函数中的内容与否仍然感觉很奇怪。

您在这里寻找的是两个字符串之间的编辑距离。编辑距离是指在一个字符串上获得另一个字符串所需的最少替换、删除和插入次数。这通常使用动态规划来实现。这实际上是一个非常酷的面试 question/project 来测试您的编程技能。

这里有一些 implementations in python 以及一些描述。

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

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

from difflib import SequenceMatcher

a = "I love Coding"
b = "I love Codiing"

ratio = SequenceMatcher(None, a, b).ratio()
# 0.9629629629629629

Demo