当前位置: 首页 > 面试题库 >

什么是Python中的简单模糊字符串匹配算法?

相高谊
2023-03-14
问题内容

我正在尝试找到一种好的模糊字符串匹配算法。直接匹配对我不起作用-
这不太好,因为除非我的字符串相似度为100%,否则匹配将失败。在莱文斯坦,因为它工作在一个人物等级方法不适用于字符串的工作也很好。我一直在寻找与单词级别匹配类似的东西,例如

字符串-答:快棕色狐狸。

弦B:敏捷的褐狐狸跳过了那只懒狗。

这些应该匹配,因为字符串A中的所有单词都在字符串B中。

现在,这是一个过于简化的示例,但谁会知道一种适用于单词级别的好的模糊字符串匹配算法。


问题答案:

我喜欢德鲁的答案。

如果您要做的只是测试一个字符串中的所有单词是否都与另一个字符串匹配,那就是一个衬里:

if not [word for word in b.split(' ') if word not in a.split(' ')]:
    print 'Match!'

如果您想对它们进行评分而不是对二进制测试进行评分,为什么不这样做:

(((匹配单词的数量)/(大字符串中的单词数量))*((小字符串中的单词数量)/(大字符串中的单词数量))

如果愿意,您可以更轻松地对每个字符串进行模糊匹配。

您可以使用difflib查找最长的匹配项:

>>> a = 'The quick brown fox.'
>>> b = 'The quick brown fox jumped over the lazy dog.'
>>> import difflib
>>> s = difflib.SequenceMatcher(None, a, b)
>>> s.find_longest_match(0,len(a),0,len(b))
Match(a=0, b=0, size=19) # returns NamedTuple (new in v2.6)

或选择一些最小匹配阈值。例:

>>> difflib.SequenceMatcher(None, a, b).ratio()
0.61538461538461542


 类似资料:
  • 本文向大家介绍python fuzzywuzzy模块模糊字符串匹配详细用法,包括了python fuzzywuzzy模块模糊字符串匹配详细用法的使用技巧和注意事项,需要的朋友参考一下 github主页 导入: 1) fuzz.ratio()对位置敏感,全匹配。fuzz.partial_ratio()对位置敏感,搜索匹配。 2) 对字符串s排序。force_ascii:True 或者False。为T

  • 本文向大家介绍Python做简单的字符串匹配详解,包括了Python做简单的字符串匹配详解的使用技巧和注意事项,需要的朋友参考一下 Python做简单的字符串匹配详解  由于需要在半结构化的文本数据中提取一些特定格式的字段、数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理、结构化数据的计算,Python具有与matlab共同的特点:语法简洁、库丰

  • 问题内容: 我刚刚开始探索Elasticsearch。我创建了一个文档,如下所示: 我现在尝试对Levenshtein距离为5的名称字段进行模糊搜索,如下所示: 但是它没有返回任何匹配。我希望圣路易斯的记录能归还。我该如何解决我的查询? 谢谢。 问题答案: 您的查询存在的问题是,最大编辑距离为2。 在上述情况下,您可能想要做的是将St.改为Saint 的同义词,这将与您匹配。当然,这将取决于您的数

  • 本文向大家介绍Python实现字符串匹配的KMP算法,包括了Python实现字符串匹配的KMP算法的使用技巧和注意事项,需要的朋友参考一下 kmp算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达

  • 本文向大家介绍Python字符串匹配算法KMP实例,包括了Python字符串匹配算法KMP实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python字符串匹配算法KMP。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍Python中的DI字符串匹配,包括了Python中的DI字符串匹配的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个仅包含“ I”(表示增加)或“ D”(表示减少)的字符串S,令N = S的大小。我们必须返回[0,1,... ,N]使得对于范围0,...,N-1中的所有i- 如果S [i]为“ I”,则A [i] <A [i + 1] 否则,当S [i]为“ D”时,则A [

  • 问题内容: 假设这是字符串: 这将导致: 能做到这一点的最简单的1-2衬管是什么?无需拆分并进入列表… 问题答案: