我正在寻找一个可以进行简单的模糊字符串比较的 Python 模块。具体来说,我想要字符串相似程度的百分比。我知道这可能是主观的,所以我希望找到一个可以进行位置比较以及最长相似字符串匹配等的库。
基本上,我希望找到足够简单的东西来产生单个百分比,同时仍然足够可配置,以便我可以指定要进行的比较类型。
我正在寻找一种字符串相似度算法,它可以在变长字符串上产生比通常建议的更好的结果(levenshtein距离,soundex等).
例如,
鉴于字符串A:"罗伯特",
然后是字符串B:"Amy Robertson"
会比一个更好的比赛
字符串C:"理查德"
此外,优选地,该算法应该是语言不可知的(也可以用于除英语之外的语言).
我想做模糊字符串比较,但与使用哪个库混淆.
选项1:
import Levenshtein
Levenshtein.ratio('hello world', 'hello')
Result: 0.625
Run Code Online (Sandbox Code Playgroud)
选项2:
import difflib
difflib.SequenceMatcher(None, 'hello world', 'hello').ratio()
Result: 0.625
Run Code Online (Sandbox Code Playgroud)
在这个例子中,两者给出了相同的答案.但我更喜欢使用__CODE__
.专家的任何建议.谢谢.
__CODE__
我正在进行临床信息规范化(拼写检查),其中我检查每个给定的单词对900,000字的医学词典.我更关注时间复杂度/性能.
在这种情况下,你认为两者都表现相似吗?
我想找到两个字符串之间的字符串相似性.此页面包含其中一些示例.Python有Levenshtein算法的实现.在这些约束下,是否有更好的算法(并且希望是python库).
除了Levenshtein距离(或Levenshtein比率)以外的其他东西对我的情况更好吗?
我必须实现一个容错的搜索功能.
目前,我有以下情况:
楷模:
class Tag(models.Model):
name = models.CharField(max_length=255)
class Illustration(models.Model):
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag)
Run Code Online (Sandbox Code Playgroud)
查询:
queryset.annotate(similarity=TrigramSimilarity('name', fulltext) + TrigramSimilarity('tags__name', fulltext))
Run Code Online (Sandbox Code Playgroud)
示例数据:
插图:
ID | Name | Tags |
---|--------|-------------------|
1 | "Dog" | "Animal", "Brown" |
2 | "Cat" | "Animals" |
Run Code Online (Sandbox Code Playgroud)
插图有标签:
ID_Illustration | ID_Tag |
----------------|--------|
1 | 1 |
1 | 2 |
2 | 3 |
Run Code Online (Sandbox Code Playgroud)
标签:
ID_Tag | Name |
-------|----------|
1 | Animal |
2 | Brown |
3 | Animals | …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个机器人,使用他们的API 在Betfair网站上下注Python
.我想在比赛时投注足球(足球)比赛.
我编写了一个XML feed来为我提供来自游戏的实时数据,但是XML Feed并不总是像Betfair那样使用与橄榄球队相同的名称.
例如,当提到曼联时,Betfair可能使用"Man Utd",而XML feed可能使用"Man United"或其他一些变体.我不仅限于热门市场,因此建立标准的Betfair到XML名称转换表是不可行的.
我正在尝试使用某种概率字符串匹配来表明两个数据源指的是同一个团队.
到目前为止,我已经玩过牧师,这似乎做一些贝叶斯计算,但我不认为我使用得当,因为我必须向下突破串入字符train
的guesser
.然后我简单地平均每个字母与每个名字相关联的概率,我知道这在数学上是不正确的,但我认为这可能是一个可行的启发式测试.
这是我的代码:
import scorefeed
from reverend.thomas import Bayes
guesser = Bayes()
teams=['home','away']
def train(team_no, name):
for char in name:
guesser.train(teams[team_no], char)
def untrain(team_no, name):
for char in name:
guesser.untrain(teams[team_no], char)
def guess(name):
home_guess = 0.0
away_guess = 0.0
for char in name:
if len(guesser.guess(char)) > 0:
for guess in guesser.guess(char):
if guess[0] == teams[0]:
home_guess = home_guess + guess[1]
print home_guess
if …
Run Code Online (Sandbox Code Playgroud) python algorithm artificial-intelligence probability string-matching
我正在尝试在Python中对字符串进行比较.我的字符串包含可以通过多种不同方式构建的标题:
'Title'
'Title: Subtitle'
'Title - Subtitle'
'Title, Subtitle'
'Title Subtitle'
Run Code Online (Sandbox Code Playgroud)
是否有可能在Python中进行相似性比较,以便它可以确定match('Title: Subtitle', 'Title - Subtitle') = True
?(或者它会被建造)
基本上我正在试图确定它们是否是相同的标题,即使分裂是不同的.
if 'Title: Subtitle' == 'Title - Subtitle':
match = 'True'
else:
match = 'False'
Run Code Online (Sandbox Code Playgroud)
还有一些可能存储为The Title: The Subtitle
或者Title, The: Subtitle, The
虽然我认为可能会增加一些复杂性,我可能会通过重建字符串来解决.
我试图比较两个数据列表,其中有一些自由文本表示相同的对象.例
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,但问题是可能有许多变化,如大小写的变化或添加一些"." 之间.是否有任何python包可以进行比较并给出相似度量?
我正在寻找的不仅仅是两个文本之间的简单相似度分数。但是字符串中子字符串的相似度得分。说:
text1 = 'cat is sleeping on the mat'.
text2 = 'The cat is sleeping on the red mat in the living room'.
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,所有的词text1
都存在于text2
完全中,因此相似度应该是 100%。
如果text1
缺少某些单词,则得分会更低。
我正在处理一个不同段落大小的大型数据集,因此在具有这种相似性得分的较大段落中找到较小的段落至关重要。
我只发现了比较两个字符串的字符串相似性,例如余弦相似性、difflib 相似性等。但不是关于另一个字符串中的子字符串分数。
我首先要说的是我正在使用tweepy。我找到了一种过滤掉相同字符串的方法,但是我很难过滤掉相似的字符串。
我有两个句子字符串需要比较(Tweepy关键字=“ 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似乎仅适用于一个单词字符串(如果我输入错误,请纠正我)。
现在您可能在想,“只是剪掉http部分”。这也不起作用,因为它无法解决@cars:xyz zyx
和@trucks 这样的人鸣叫的名字:xyz zyx
有什么方法可以比较这两个文本吗?它应该很简单,但是由于某种原因,解决方案使我望而却步。我一周前才学过python。使用缩进来区分功能中的内容还是很奇怪。
python ×9
string ×4
algorithm ×2
similarity ×2
comparison ×1
difflib ×1
distance ×1
django ×1
fuzzy-search ×1
nlp ×1
postgresql ×1
probability ×1
ranking ×1
trigram ×1
tweepy ×1
twitter ×1