2017-04-22 68 views
1

我首先想说我正在使用tweepy。我找到了一种过滤出相同字符串的方法,但我很难过滤出类似的字符串。如何比较python中两个相似的句子字符串?

我有我需要比较两个句子串(Tweepy关键字= “特朗普”)

串1: “特朗普总局驳回卫生局局长维韦克穆尔蒂(HTTP)PUGheO7BuT5LUEtHDcgm”

字符串2: “特朗普政府解雇外科医生将军Vivek Murthy(http)avGqdhRVOO”

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

现在你可能会想,“只是拼接的http部分”。这不会起作用,因为它不会为@cars这样的人发微博名称:'xyz zyx'和@trucks:'xyz zyx'

是否有某种方法可以比较两个文本?它应该很简单,但由于某种原因,解决方案无法解决。我刚刚在一周前学会了python。仍然觉得使用缩进来辨别函数中的什么与否是奇怪的。

+0

有在[水母(https://github.com/jamesturk/jellyfish)包一吨的工具。 (我不属于那个项目。) –

回答

0

我猜你已经使用.ratio(),即:

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

+0

我忘了在SequenceMatcher()函数中放置“None”部分!感谢您帮助我迅速看到这一点。我在这里坐了2-3个小时,试图弄清楚我做错了什么。 – LuxLunae

+0

非常欢迎你@LuxLunae –

0

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

以下是几个implementations in python以及一些描述。

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

0

[.split()]功能打破了句子的话

您可能需要这respo

包括这个库到你的项目做一个字符串比较,你是好去

+0

**只有链接**答案将**过时**如果链接变成'404',请避开它​​们。 –