首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Levenshtein Distance(编辑距离)算法与使用场景

最近在做一个脱敏数据和明文数据匹配的需求的时候,用到了一个算法叫Levenshtein Distance Algorithm,本文对此算法原理做简单的分析,并且用此算法解决几个常见的场景。...此算法的概念很简单:Levenshtein Distance指两个字串之间,由一个转换成另一个所需的最少编辑操作次数,允许的编辑操作包括: 将其中一个字符替换成另一个字符(Substitutions)。...插入一个字符(Insertions)。 删除一个字符(Deletions)。 下文开始简称Levenshtein Distance为LD Levenshtein Distance公式定义 ?...通过定义每个操作的成本为1,如果两个字符串不匹配,则对角跳转的代价为1,否则为0,简单来说就是: 如果[i][j]位置的两个字符串相等,则从[i][j]位置加1,上加1,左上加0,然后从这三个数中取出最小的值填充到...如果[i][j]位置的两个字符串不相等,则从[i][j]位置、左上、上三个位置的值中取最小值,这个最小值加1(或者说这三个值都加1然后取最小值),然后填充到[i][j]。

3.4K30

Oracle字符串函数

下面列出部分Oracle针对字符串操作的一些函数,以下函数可以使用在字符串上,也可以使用在列名上: 1.LOWER(string) 将输入的字符串转换成小写 2.UPPER(string) 将输入的字符串转换成大写...函数来连接字符串。...允许列的[右]边填充一组字符。例:RPAD(city,20,'.'),如果ciy的值没有小于长度20的话,则用'.'右边补齐,补到20个,如果是用空格补齐,看上去就是像对齐一样。...格式:RTRIM、LTRIM(字符串,'删除字符集') 第一个参数就是要进行删除的字符,第二个参数是一个字符集来的,如果填写的是'AB',Oracle会认为是A和B,然后反复检查字符串的右端,直到字符串中的每个字符都被删除了...PS:您不能对一个使用LONG数据类型的列使用LENGTH之类的函数。

1.4K60
您找到你想要的搜索结果了吗?
是的
没有找到

一起学Elasticsearch系列-模糊搜索

灵活:可以基于不同的字段进行前缀搜索,适用于各种数据模型。 缺点: 前缀无法通配:前缀搜索只能匹配以指定前缀开始的文档,无法进行通配符匹配。...,其中 * 表示匹配任意数量(包括零个)的字符,而 ? 则表示匹配一个字符通配符搜索中,可以搜索词中使用通配符字符,将其替换为要匹配的任意字符字符序列。...语法: 正则表达式匹配的查询中,flags 参数是一个字符串,它可以包含多个选项,并用逗号分隔。每个选项都由一个字母表示。...两段文本之间的Damerau-Levenshtein距离是使一个字符串与另一个字符匹配所需的插入、删除、替换和调换的数量。...如果是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如 "this is ma" ,他会先在倒排索引中做以ma做前缀搜索,然后匹配到的doc中以 "this is" 做match_phrase

42210

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

总结一句话:编辑距离就是从一个字符串变到另外一个字符串所需要最小的步骤 一:简介 信息论、语言学和计算机科学中,Levenshtein distance是用于测量两个字符串之间差异的字符串度量...非正式的说就是两个单词之间的Levenshtein distance是将一个单词更改为另一个单词所需的单字符编辑(插入,删除或替换)的最小步骤。...其中相对于a变化到b字符串来说: ? :代表a删除一个字节去匹配b ? :代表a添加一个字节去匹配b ?...,就比如同一个地点:“北京市朝阳区IT产业园“,在后台数据中可能有“北京朝阳区IT产业园”或者“北京朝阳区it园”等一系列数据,我们又不能去做模糊查询(因为节点数据和边关系为千万级的,模糊查询可能会匹配到大量的节点返回导致返回大量的数据影响项目稳定...中删除一个字符b中删除一个字符、ab中均删除一个字符获得结果中取最小值 return re1 < re2 ?

2.7K20

Oracle 数据库中的数据质量运算符

Oracle数据库23c引入了FUZZY_MATCH和PHONIC_ENCODE数据质量运算符来执行模糊字符匹配。 UTL_MATCH软件包在Oracle 11g Release 2中得到支持。...它包含各种有助于测试字符串之间的相似性/差异性级别的函数。Oracle 23c中FUZZY_MATCH和PHONIC_ENCODE运算符扩展了数据库的模糊字符匹配功能。...它计算以单词(而不是字母)作为匹配单位的两个短语的 LEVENSHTEIN 或编辑距离。 LONGEST_COMMON_SUBSTRING 查找两个字符串之间的最长公共子字符串。...容差是指一个单词中可能不同的字符的百分比,同时仍将其视为同一个单词。...PHONIC_ENCODE 将要使用的算法作为第一个参数,要处理的字符串作为第二个参数,以及一个可选的 max_code_len 参数来控制所需输出的长度。

16710

你不知道的PHP小技巧之计算文本相似度

有这样一个需求:需要对于用户发布的内容标题进行相似度对比,如果有之前的内容和当前发布的内容标题相似度到达某个阈值时则禁止发布或进行其他的一些操作。...最小编辑距离算法PHP中已经有了实现:levenshtein,计算两个字符串之间的编辑距离。...除了编辑距离,PHP 还直接提供了一个计算两个字符串相似度的函数:similar_text。...similar_text(string $string1, string $string2, float &$percent = null): int 返回两个字符串中匹配字符的数量。...匹配字符的数量是通过找到最长的第一个公共子字符串来计算的,然后递归地对前缀和后缀执行此操作。将所有找到的公共子字符串的长度相加。

1K20

PHP语言中我最喜欢的10个函数

Levenshtein Levenshtein算法是一种用于比较两个字符串的算法,可以计算两个字符串之间的编辑距离。...编辑距离是指将一个字符串转换成另一个字符串所需的最小操作数,操作包括插入、删除和替换等。 这是一个非常酷的功能,可以确定两个相关的单词或短语有多相似。...) * 100; echo $similarity_percent . '%'; 在这段代码中,我们首先通过max()函数计算出两个字符串中较长的那个长度,然后计算编辑距离并将其转换为相似度百分比。...下面是一个PHP中使用套接字创建一个PHP子进程的简单示例: function async(Process $process): Process { socket_create_pair(AF_UNIX...该函数返回一个包含有匹配文件/目录的数组。如果失败则返回 FALSE。

13310

自动化篇 | 模糊匹配助力自动答题

接着使用不同的参数,获取不同类型题库的数据并汇总到同一个txt文件中。 模糊匹配 这里用到了第三方库 fuzzywuzzy 。fuzzywuzzy 是一个简单易用的模糊字符匹配工具包。...它依据 Levenshtein Distance 算法来计算两个序列之间的差异。...Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...我们登录之后操作浏览器进入考试界面并且获取试题的文本内容,然后利用模糊匹配得到相应的答案,点击对应的按钮,完成答题操作。 ? 每答10道题完成相应的翻页操作。

1.7K130

基于编辑距离来判断词语相似度方法(scala版)

词语相似性比较,最容易想到的就是编辑距离,也叫做Levenshtein Distance算法。Python中是有现成的模块可以帮助做这个的,不过代码也很简单,我这边就用scala实现了一版。...编辑距离 编辑距离是指一个字符串改编成另一个字符串的最短距离,它描述了两个字符串的相近程度。...中有numpy可以做矩阵的各种操作,scala中可以使用breeze,spark mllib底层也是基于它实现的。...,想要查找到数据库里面跟他最匹配的词。...比如阿迪想要匹配到阿迪达斯,或者结账买单匹配到节帐埋单等等。不过耐克nike跟nike耐克这种场景下就不适合了... 后续会介绍n-gram来计算相似性的方法,比较适合这种场景。

1.4K50

FuzzyWuzzy:模糊字符匹配工具包

日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异。...前言 处理数据的过程中,难免会遇到下面类似的场景,自己手里头获得的是简化版的数据字段,但是要比对的或者要合并的却是完整版的数据(有时候也会反过来) 最常见的一个例子就是:进行地理可视化中,自己收集的数据只保留的缩写...FuzzyWuzzy库介绍 FuzzyWuzzy 是一个简单易用的模糊字符匹配工具包。它依据 Levenshtein Distance 算法,计算两个序列之间的差异。...Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...,然后就是进行数据的提取了,需要处理的部分有两点需要注意的: 提取匹配成功的字符串,并对阈值小于90的数据填充空值 最后把数据添加到‘matches’字段 m2 = df_1['matches'].apply

46420

Python模糊匹配 | 刷英语六级段落匹配只需要3秒?

Python的 FuzzyWuzzy 库,是一个易用而又强大的模糊字符匹配工具包。它依据 Levenshtein Distance 算法,计算两个序列之间的差异。...Levenshtein Distance算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。...去重子集匹配(Token Set Ratio) 相当于比对之前有一个集合去重的过程,注意最后两个,可理解为该方法是 token_sort_ratio 方法的基础上添加了集合去重的功能,下面三个匹配的都是倒序...fuzz的这几个 ratio 函数最后得到的结果都是匹配数值,如果需要获得匹配度最高的字符串结果,还需要依旧自己的数据类型选择不同的函数,然后再进行结果提取,如果但看文本数据匹配程度使用这种方式是可以量化的

1K10

快速学习-Mycat基本概述

而在最终用户看来,无论是那种存储方式, Mycat 里,都是一个传统的数据库表,支持标准的SQL 语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度,测试阶段,可以将一个表定义为任何一种...对于软件工程师来说,可以这么理解 Mycat:Mycat 就是一个近似等于 MySQL 的数据库服务器,你可以用连接 MySQL 的方式去连接 Mycat(除了端口不同,默认的 Mycat 端口是 8066...而非 MySQL 的 3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用 Mycat,但建议对于分片表,尽量使用基础的 SQL 语句,因为这样能达到最佳性能,...Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库...当 Mycat 收到一个 SQL 时,会先解析这个 SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到 SQL 里分片字段的值,并匹配分片函数,得到该 SQL 对应的分片列表,然后将 SQL

59320

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

日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异。...前言 处理数据的过程中,难免会遇到下面类似的场景,自己手里头获得的是简化版的数据字段,但是要比对的或者要合并的却是完整版的数据(有时候也会反过来) 最常见的一个例子就是:进行地理可视化中,自己收集的数据只保留的缩写...FuzzyWuzzy库介绍 FuzzyWuzzy 是一个简单易用的模糊字符匹配工具包。它依据 Levenshtein Distance 算法,计算两个序列之间的差异。...Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...,然后就是进行数据的提取了,需要处理的部分有两点需要注意的: 提取匹配成功的字符串,并对阈值小于90的数据填充空值 最后把数据添加到‘matches’字段 m2 = df_1['matches'].apply

16821

MyCat:第三章:Mycat概述

而在最终用户看 来,无论是那种存储方式,Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业 务系统来说,可以大幅降低开发难度,提升开发速度,测试阶段,可以将一个表定义为任何一种...对于软件工程师来说,可以这么理解Mycat: Mycat就是一个近似等于MySQL的数据库服务器,你可以用连接MySQL的方式去连接Mycat(除了端口不同,默认的Mycat端 口是8066而非MySQL...的3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用 Mycat,但建议对于分片表,尽量使用基础的SQL语句,因为这样能达到最佳性能,特别是几千万甚至几百亿条记录的情况下...Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分 片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,...当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL里分片字 段的值,并匹配分片函数,得到该SQL对应的分片列表,然后将SQL发往这些分片去执行

46220

【词库】Python关键词筛选分类,Levenshtein编辑距离算法分词

Levenshtein Levenshtein距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。...许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。...关于 Levenshtein 所有函数的用法和注释 #关于 Levenshtein 所有函数的用法和注释 apply_edit() #根据第一个参数editops()给出的操作权重,对第一个字符串基于第二个字符串进行相对于权重的操作...,所以第二个不需要删除 quickmedian() #最快的速度找到最相近元素出现最多从新匹配出的一个新的字符串 ratio() #计算2个字符串的相似度,它是基于最小编辑距离 seqratio()...2.json.dumps()用于将字典形式的数据转化为字符串,json.loads()用于将字符串形式的数据转化为字典 3.json 中的ensure_ascii=False json.dumps 序列化时对中文默认使用的

2.9K20

【TS 演化史 -- 14】拼写校正和动态导入表达式

即使咱们稍微拼错了一个变量、属性或函数名,TypeScript 很多情况下都可以提示正确的拼写。 拼写更正 假设咱们想要调用window.location.reload()来重新加载当前页面。...最佳匹配后(如果有的话)将作为拼写提示返回。...编辑距离 (Levenshtein Distance算法) 字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein1965年提出。...其中,字符操作包括: 删除一个字符 插入一个字符 修改一个字符 例如对于字符串"if"和"iff",可以通过插入一个'f'或者删除一个'f'来达到目的。...不难分析出,两个字符串的编辑距离肯定不超过它们的最大长度(可以通过先把短串的每一位都修改成长串对应位置的字符然后插入长串中的剩下字符)。

1.5K20

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

大家好,我是才哥~ 日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异。...前言 处理数据的过程中,难免会遇到下面类似的场景,自己手里头获得的是简化版的数据字段,但是要比对的或者要合并的却是完整版的数据(有时候也会反过来) 最常见的一个例子就是:进行地理可视化中,自己收集的数据只保留的缩写...FuzzyWuzzy库介绍 FuzzyWuzzy 是一个简单易用的模糊字符匹配工具包。它依据 Levenshtein Distance 算法,计算两个序列之间的差异。...Levenshtein Distance算法,又叫 Edit Distance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。...,然后就是进行数据的提取了,需要处理的部分有两点需要注意的: ① 提取匹配成功的字符串,并对阈值小于90的数据填充空值 ② 最后把数据添加到‘matches’字段 m2 = df_1['matches

2.9K50

【硬刚大数据】从零到大数据专家面试篇之SparkSQL篇

然后通过beeline连接thrift服务进行数据处理。hive-jdbc驱动包来访问spark-sql的thrift服务 项目pom文件中引入相关驱动包,跟访问mysql等jdbc数据源类似。...如果hive的元数据存储mysql中,那么需要将mysql的连接驱动jar包如mysql-connector-java-5.1.12.jar放到$SPARK_HOME/lib/下,启动spark-sql...它的工作方式是循环从一张表(outer table)中读取数据然后访问另一张表(inner table,通常有索引),将outer表中的每一条数据与inner表中的数据进行join,类似一个嵌套的循环并且循环的过程中进行数据的比对校验是否满足一定条件...loop遍历广播的数据匹配是否满足一定条件。...这里给出一个思路,就是解析Spark SQL计划,根据Spark SQL的join策略匹配条件等,来判断任务中是否使用了低效的Not in Subquery进行预警,然后通知业务方进行修改。

2.3K30

命令行上的数据科学第二版:十、多语言数据科学

它允许我快速运行命令,而无需切换到单独的应用,也不会中断我的工作流程。比如用curl下载文件,用head检查一段数据,用git创建备份,用make编译一个网站。...字符向量words作为标准输入传递。 ➍ 统计字符向量alice中的元素个数 system2()的一个缺点是,它首先将字符向量写入一个文件,然后将其作为标准输入传递给命令行工具。...➍ 读取grep产生的标准输出作为字符向量。 ➎ 清理连接并删除特殊文件。 因为这需要相当多的样板代码(创建连接、写、读、清理),所以我写了一个助手函数sh()。...数据集中的项被写入标准输入,标准输出作为字符串的 RDD 返回。 在下面的会话中,我启动了一个 Spark Shell,并再次计算了《爱丽丝漫游仙境》中alice出现的次数。...➋ 空格上拆分各个元素。换句话说,每一行都被拆分成单词。 ➌ 通过grep管道传输每个分区,只保留与字符串alice匹配的元素。 ➍ 管每个分区通过wc来统计元素的数量。 ➎ 每个分区有一个计数。

1.1K20

0595-CDH6.2的新功能

组件描述 版本 Hadoop 可靠的,可扩展的,分布式的存储和计算平台 v3.0.0 HBase 实时读写访问的可扩展的记录和表的存储 v2.1.0 Hive 具备类SQL接口和ODBC/JDBC驱动的元数据知识库连接...要访问这些特性: 1.Hue Impala editor中运行一个查询。 2.从左边的菜单,启动Job Browser。 3.Job Browser中,选择Queries选项卡。...支持LEVENSHTEIN字符串功能。 该函数返回两个输入字符串之间的Levenshtein距离,即将一个字符串转换为另一个字符串所需的最小单字符编辑数。..._,然后使用隐式的.kudu函数。 7.KuduSink类已经添加到Spark的StreamSinkProvider中,允许将structured streaming写入到Kudu。...您可以使用SqoopApache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据

4.2K30
领券