首页
学习
活动
专区
圈层
工具
发布

python实现字符串模糊匹配

本文将从字符串模糊匹配的角度介绍一下搜索引擎。 一般的搜索,要分为两个步骤:搜索和排序。...搜索的方法有很多,为了高效一般进行字符串或关键词匹配,而用户提供的一些关键词可能不是数据库中保存的,例如使用倒排的方法很难找到Head节点,此处需要使用模糊匹配的方式。...本文主要从模糊匹配的角度,简单介绍下搜索。主要解决的问题类似,“刘得华演过的电影”与“刘德华演过的电影”表示的是同一个意思。 1....编辑距离 首先给大家介绍一下编辑距离,编辑距离就是用于衡量两个字符串之间的差异。...(1)安装 需要安装python-Levenshtein库用于计算上述讲解的编辑距离。

23K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一起学Elasticsearch系列-模糊搜索

    优缺点: 优点: 强大的模式匹配:正则表达式匹配提供了强大且灵活的模式匹配功能,可以满足各种复杂的搜索需求。 可定制性:通过使用正则表达式,您可以根据具体需求编写自定义的匹配规则。...基于编辑距离(Levenshtein 距离)计算两个词项之间的差异。 它通过允许最多的差异量来匹配文档,以处理输入错误、拼写错误或轻微变体的情况。...fuzziness:编辑距离,范围是(0,1,2),并非越大越好,过大召回率高但结果不准确,默认是:AUTO,即自动从0~2取值。...两段文本之间的Damerau-Levenshtein距离是使一个字符串与另一个字符串匹配所需的插入、删除、替换和调换的数量。...Levenshtein会算作2个距离,而Damerau-Levenshtein只会算成1个距离。

    92710

    十九种Elasticsearch字符串搜索方式终极介绍

    fuzzy fuzzy查询是一种模糊查询,会根据检索词和检索字段的编辑距离(Levenshtein Distance)来判断是否匹配。...到cat 在进行fuzzy搜索的时候,ES会生成一系列的在特定编辑距离内的变形,然后返回这些变形的准确匹配。...默认情况下,当检索词的长度在0..2中间时,必须准确匹配;长度在3..5之间的时候,编辑距离最大为1;长度大于5的时候,最多允许编辑距离为2。...n(ath[oa]n)/:正则表达式,需要把内容放到两个斜杠/中间 name: acch~:模糊匹配,默认编辑距离为2,不过80%的情况编辑距离为1就能解决问题name: acch~1 count:[1...使用了下面的操作符: +表示AND操作 |表示OR操作 -表示否定 "用于圈定一个短语 *放在token的后面表示前缀匹配 ()表示优先级 ~N放在token后面表示模糊查询的最大编辑距离fuzziness

    1.4K10

    两个好用到爆的Python模块,建议收藏!

    今天跟大家分享FuzzyWuzzy一个简单易用的模糊字符串匹配工具包。让你轻松解决烦恼的匹配问题!...Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...process模块 用于处理备选答案有限的情况,返回模糊匹配的字符串和相似度。...省份字段模糊匹配 自己的数据和待匹配的数据背景介绍中已经有图片显示了,上面也已经封装了模糊匹配的函数,这里直接调用上面的函数,输入相应的参数即可,代码以及执行结果如下: 数据处理完成,经过封装后的函数可以直接放在自己自定义的模块名文件下面

    24821

    数据对齐-编辑距离算法详解(Levenshtein distance)

    当ai = bj时等于0,其他情况下等于1, ? 代表a的前i个字节到b的前j个字节的距离。 其中相对于a变化到b字符串来说: ? :代表a删除一个字节去匹配b ?...:代表匹配或者不匹配,这取决于各个符号是否相同 2:a small case 我们计算一下kitten和sitting之间的编辑距离 kitten → sitten (替换 “k” -> “s”)...上面的变化过程所需要的步数就是最小的步数,所以他们之间的编辑距离就是"3" 3:算法的上下界限 Levenshtein distance数值包含几个上下界限 距离最小是两个字符串之间的长度的差值 距离最大是两个字符串中较长字符串的长度...,就比如同一个地点:“北京市朝阳区IT产业园“,在后台数据中可能有“北京朝阳区IT产业园”或者“北京朝阳区it园”等一系列数据,我们又不能去做模糊查询(因为节点数据和边关系为千万级的,模糊查询可能会匹配到大量的节点返回导致返回大量的数据影响项目稳定...: 允许对字符串进行替换,只可用于计算两个相同长度字符串的编辑距离 Jaro distance :只允许对字符串进行交换 编辑距离通常定义为使用一组特定允许的编辑操作来计算的可参数化度量,并为每个操作分配成本

    2.9K20

    FuzzyWuzzy:Python中模糊匹配的魔法库

    今天跟大家分享FuzzyWuzzy一个简单易用的模糊字符串匹配工具包。让你轻松解决烦恼的匹配问题! 1....Levenshtein Distance算法,又叫 Edit Distance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...2.2 process模块 用于处理备选答案有限的情况,返回模糊匹配的字符串和相似度。...省份字段模糊匹配 自己的数据和待匹配的数据背景介绍中已经有图片显示了,上面也已经封装了模糊匹配的函数,这里直接调用上面的函数,输入相应的参数即可,代码以及执行结果如下: 数据处理完成,经过封装后的函数可以直接放在自己自定义的模块名文件下面

    4.1K50

    一文带你彻底搞懂Elasticsearch中的模糊查询

    fuzzy中有个编辑距离的概念,编辑距离是对两个字符串差异长度的量化,及一个字符至少需要处理多少次才能变成另一个字符,比如lucene和lucece只差了一个字符他们的编辑距离是1。...因为可以限制编辑距离,它的性能相对会好一些,毕竟它不是完全的“模糊”。...AUTO的意思是,根据查询的字符串长度决定允许的编辑距离,规则是: 0..2 完全匹配(就是不允许模糊) 3..5 编辑距离是1 大于5 编辑距离是2 其实我们仔细想一下,即使限制了编辑距离,查询的字符串比较长的情况下需要查询的词项也是非常巨大的...prefix 前缀查询 这种只支持前缀查询,属于模糊查询的子集。比如要查找所有以 W1 开始的邮编,可以使用简单的 prefix 查询。..." 3 "W1V 3DG" 1 "W2F 8HW" 2 "WC1N 1LZ" 4 查询的步骤是: 扫描postings list并查找到第一个以 W1 开始的词。

    40.9K42

    FuzzyWuzzy:模糊字符串匹配工具包

    今天跟大家分享FuzzyWuzzy一个简单易用的模糊字符串匹配工具包。让你轻松解决烦恼的匹配问题!...Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...process模块 用于处理备选答案有限的情况,返回模糊匹配的字符串和相似度。...省份字段模糊匹配 自己的数据和待匹配的数据背景介绍中已经有图片显示了,上面也已经封装了模糊匹配的函数,这里直接调用上面的函数,输入相应的参数即可,代码以及执行结果如下: 数据处理完成,经过封装后的函数可以直接放在自己自定义的模块名文件下面

    64120

    textdistance:文本相似度计算

    在日常编程中,我们经常需要计算两个字符串之间的相似度 - 比如搜索引擎的模糊匹配、拼写检查、DNA序列比对等场景。...虽然有Levenshtein和FuzzyWuzzy这些知名的字符串匹配库,但今天我要介绍一个更全面、更强大的神器 - textdistance。...这个库最让人惊艳的地方在于,它集成了超过30种文本距离/相似度算法,从简单的编辑距离到复杂的声学算法,应有尽有。...('python', 'python')) # 输出: 1.0每个算法都支持normalized参数,可以将结果标准化到0-1之间:# 标准化的编辑距离print(textdistance.levenshtein.normalized...= ['北京', '深圳', '广州']print(textdistance.jaccard(list1, list2)) # 输出: 0.667# 支持自定义权重weights = [1, 0.5

    25910

    【翻译】图解Janusgraph系列-索引参数与全文索引查询(Janusgraph Index Parameters and Full Text Search)

    textContains:如果(至少)文本字符串中的一个单词与查询字符串匹配,则为true textContainsPrefix:如果(至少)文本字符串中的一个单词以查询字符串开头,则为true...eq:如果字符串与查询字符串相同 neq:如果字符串不同于查询字符串 textPrefix:如果字符串值以给定的查询字符串开头 textRegex:如果字符串值与给定的正则表达式完全匹配...textFuzzy:如果字符串值类似于给定的查询字符串(基于Levenshtein编辑距离) import static org.apache.tinkerpop.gremlin.process.traversal.P...1.3 全文和字符串搜索 如果您使用Elasticsearch,则可以将属性索引为文本和字符串,从而允许您使用所有谓词进行精确匹配和模糊匹配。...,一次用于模糊匹配。

    92730

    字段匹配工具----python编写

    简介 FuzzyWuzzy是一个基于Levenshtein Distance算法的模糊字符串匹配工具包。该算法计算两个序列之间的差异,即从一个字符串转换到另一个字符串所需的最少编辑操作次数。...编辑操作可以是替换、插入或删除字符。编辑距离越小,两个字符串的相似度越大。 详解 场景 前两天工作遇到了一个场景。...是一个数据集匹配另一个数据集,正常来说是一对一或者多对一的关系,但是由于叫法的差异,只能进行模糊匹配。比如中国和中华。...简单匹配(Ratio) 非完全匹配(Partial Ratio) 忽略顺序匹配(Token Sort Ratio)(多字符匹配,需要空格隔开) 去重子集匹配(Token Set Ratio)(多字符匹配...,主要用多项匹配。

    85720

    Python算法模糊匹配:FuzzyWuzzy深度剖析,从入门到精通,解决你所有需要匹配的需求

    它基于Levenshtein距离(编辑距离)算法,能够处理字符串之间的拼写错误、格式差异以及部分匹配等问题,非常适合在数据清洗、文本匹配、搜索引擎优化等场景中使用。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...简单的文本匹配任务:在不需要考虑字符顺序或编辑距离的场景中,进行快速的文本匹配。...这种方法不考虑字符的顺序、重复或任何形式的编辑距离, # 只关注两个字符串中字符的直接匹配情况。...3、忽略顺序匹配 3.1、案例1 忽略单词顺序,比较两个字符串中单词的相似度。以空格为分隔符,小写化所有字母,忽略其他标点符号。

    1.3K10

    elasticsearch API约定(二)

    Date Math Date Math和前文说的基本一致,这里再来看看一些细节: 日期表达式以一个锚定日期开始,锚定日期可以是当前日期,也可以是一个以 ||结尾的给定日期字符串,锚定日期的后面可以再跟上一个表达式...,如果没有指定,默认的距离单位是meter(米),也可以手动指定距离单位,支持的距离单位如下: Mile Fuzziness fuzziness用来实现模糊查询,这里的模糊查询被定义为Levenshtein...Edit Distance,指将一个字符串变为另外一个字符串所需要操作的步数,默认值为AUTO,AUTO策略如下: 字符长度在0~2之间,必须全部匹配 字符长度在3~5之间,允许编辑一次 字符长度大于...5,允许编辑两次 例如,我的test1索引中,有一个文档的name属性值为sang,我可以使用如下方式查询: curl -X GET "localhost:9200/test1/_doc/_search...,如果编辑两次,则soog就可以匹配上sang了,如下: ?

    90220

    模糊搜索:在不确定性中寻找精确结果

    以下是常用的模糊搜索算法原理: 1、编辑距离(Levenshtein Distance): 编辑距离是一种常用的相似度计算方法,它通过计算两字符串之间的插入、删除或替换的最小操作次数来衡量其相似程度...距离越小,字符串越相似。例如,“apple”与“aple”的编辑距离为1(删除一个字母“p”)。...2、使用编辑距离的模糊搜索 编辑距离算法较为经典,通常可以在 Python 等编程语言中使用。...以下是一个简单的编辑距离实现: def levenshtein_distance(str1, str2): len_str1 = len(str1) + 1 len_str2 = len...dp[-1][-1] # 示例 distance = levenshtein_distance("apple", "aple") print(f"编辑距离: {distance}") 3、支持拼音和多音字的模糊匹配

    34910

    ES系列11:Term-level queries 之 3种模糊查询和terms_set query

    带着问题学习才高效 1、wildcard query、prefix query、fuzzy query 这3种模糊查询的异同点是什么?...Levenshtein编辑距离的相似度。...} } 参数解释: fuzziness:最大编辑距离【一个字符串要与另一个字符串相同必须更改的一个字符数】。...【ps:等价于mysql 的 is null】 注意:这些值不属于空值 1、空字符串,例如""或"-" 2、包含null和另一个值的数组,例如[null, "foo"] 3、自定义null-value,...对于文档1,需要至少匹配2个term,但是在检索terms里,只能匹配上【关注我】一个term,所以文档1不符合检索条件; 对于文档2,只需要匹配一个term,刚好能匹配上检索terms里的【学习】。

    2.2K20

    Elasticsearch Query DSL之Term level queries

    null_value映射 自定义null值。例如将"null"字符串定义为null值。...fuzzy query 模糊匹配,基于词根编辑距离来实现。...例如 cat --> cak 其编辑距离为1。 支持模糊匹配的查询API,其参数fuzziness可选值: 0:表示精确匹配。 1:表示允许出现1个编辑距离。 2:表示允许出现2个编辑距离。...auto:当词根长度小于3时,则精确匹配;当词根长度大于3并且小于6时,允许1个编辑长度的词根匹配;当词根大于等于6后,允许2个编辑距离的词根匹配。默认为auto。...prefix_length 词根的前prefix_length个字符不允许出现编辑距离,指一个词根前面的部分必须是精确匹配,因为模糊匹配,一般是用来解决书写错误,或语法(因为的负数)等,前面的字符一般不会书写错误

    1.3K40

    Elasticsearch——Rest API中的常用用法

    pretty时,结果会以Json格式化的方式显示。另外,如果添加?format=yaml结果会以树的形式显示,默认都是Flase. 返回数据的易读性 结尾添加?...Number 所有的API都支持以字符串的方式代表JSON中的数字类型。 Date 支持的类型上面都说过了... Geo Geo类型主要用于地图一类的数据,这里就先不介绍了。...模糊查询可以使用fuzziness参数,它有点像range: -fuzziness <= fieldValue <= +fuzziness 并且可以设置一定的模糊度,比如: 0,1,2 设置它的编辑距离...(levenshtein distance,wiki) AUTO,如果设置Auto,那么会根据字符串的长度而改变 比如,长度为: 0..2,必须完全匹配 3..5,可以有一个编辑距离的模糊度 >5,可以有两个编辑距离的模糊度...参考 1 官方文档 2 编辑距离,wiki百科

    1K70
    领券