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

4
我首先要说的是,我正在使用 tweepy。我找到了一种过滤掉相同字符串但难以过滤类似字符串的方法。
我有两个句子字符串需要比较(Tweepy 关键词="Donald Trump")。
字符串 1: "Trump Administration Dismisses Surgeon General Vivek Murthy (http)PUGheO7BuT5LUEtHDcgm" 字符串 2: "Trump Administration Dismisses Surgeon General Vivek Murthy (http)avGqdhRVOO" 正如您所看到的,它们是相似但不完全相同的。我需要找到一种比较两者并得到数字值以决定是否将第二个 tweet 添加到第一个 tweet 的方法。我认为当我使用 SequenceMatcher() 时已经有了解决方案,但它总是打印出 0.0。我期望它应该大于 0.5。然而,Sequence Matcher 只适用于单词字符串(如果我错了请纠正我)。
现在你可能会想,“只需截取 http 部分即可”。这也行不通,因为它没有考虑到像 @cars: xyz zyx 和 @trucks: xyz zyx 这样的人名。
是否有一种方法可以比较这两个文本?这应该很简单,但出于某种原因,解决方案难以捉摸。我才学了一周的 Python,使用缩进来区分函数的内容还是感觉很奇怪的。

jellyfish包中有大量的工具。(我与该项目无关。) - Arya McCarthy
2个回答

18

您可以使用SequenceMatcher().ratio(),它来自于difflib模块,即:

from difflib import SequenceMatcher

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

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

演示



1
我忘记在SequenceMatcher()函数中加入“None”部分了!!!谢谢你帮我快速发现这个问题,哈哈。我坐在这里2-3个小时试图找出我的错误。 - LuxLunae

0
你在这里寻找的是两个字符串之间的编辑距离。编辑距离是指在一个字符串上进行最少的替换、删除和插入所需的最小次数,使其变为另一个字符串。通常使用动态规划来实现。这实际上是一个非常棒的面试问题/项目,可以测试你的编程技能。
以下是一些用 Python 实现的实现方法和相关描述。
用户 aryamccarthy 已经提到了 jellyfish 库,它已经实现了这个功能(Levenshtein Distance),并且还有更多有趣的工具可以处理匹配字符串。绝对值得一看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接