最小编辑距离

1)定义

编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数。允许的编辑操作包括:将一个字符替换成另一个字符(substitution,s),插入一个字符(insert,i)或者删除一个字符(delete,d),如下图所示:

在大学算法设计相关课程上,想必大家都已经学习过使用动态规划算法解最小编辑距离,形式化定义如下:

最终求得D(n,m)即为字符串X[0...n]与Y[0...m]之间的最小编辑距离。

2)应用

最小编辑距离通常作为一种相似度计算函数被用于多种实际应用中,详细如下: (特别的,对于中文自然语言处理,一般以词为基本处理单元)

拼写纠错(Spell Correction):又拼写检查(Spell Checker),将每个词与词典中的词条比较,英文单词往往需要做词干提取等规范化处理,如果一个词在词典中不存在,就被认为是一个错误,然后试图提示N个最可能要输入的词——拼写建议。常用的提示单词的算法就是列出词典中与原词具有最小编辑距离的词条。

这里肯定有人有疑问:对每个不在词典中的词(假如长度为len)都与词典中的词条计算最小编辑距离,时间复杂度是不是太高了?的确,所以一般需要加一些剪枝策略,如:

因为一般拼写检查应用只需要给出Top-N的纠正建议即可(N一般取10),那么我们可以从词典中按照长度依次为len、len-1、len+1、len-2、len-3、...的词条比较;

限定拼写建议词条与当前词条的最小编辑距离不能大于某个阈值;

如果最小编辑距离为1的候选词条超过N后,终止处理;

缓存常见的拼写错误和建议,提高性能。

DNA分析:基因学的一个主要主题就是比较 DNA 序列并尝试找出两个序列的公共部分。如果两个 DNA 序列有类似的公共子序列,那么这些两个序列很可能是同源的。在比对两个序列时,不仅要考虑完全匹配的字符,还要考虑一个序列中的空格或间隙(或者,相反地,要考虑另一个序列中的插入部分)和不匹配,这两个方面都可能意味着突变(mutation)。在序列比对中,需要找到最优的比对(最优比对大致是指要将匹配的数量最大化,将空格和不匹配的数量最小化)。如果要更正式些,可以确定一个分数,为匹配的字符添加分数、为空格和不匹配的字符减去分数。

全局序列比对尝试找到两个完整的序列 S1和 S2之间的最佳比对。以下面两个 DNA 序列为例:

S1= GCCCTAGCG

S2= GCGCAATG

如果为每个匹配字符一分,一个空格扣两分,一个不匹配字符扣一分,那么下面的比对就是全局最优比对:

S1'= GCCCTAGCG

S2'= GCGC-AATG

连字符(-)代表空格。在 S2'中有五个匹配字符,一个空格(或者反过来说,在 S1'中有一个插入项),有三个不匹配字符。这样得到的分数是 (5 * 1) + (1 * -2) + (3 * -1) = 0,这是能够实现的最佳结果。

使用局部序列比对,不必对两个完整的序列进行比对,可以在每个序列中使用某些部分来获得最大得分。使用同样的序列 S1和 S2,以及同样的得分方案,可以得到以下局部最优比对S1''和 S2'':

S1      = GCCCTAGCG

S1''=                 GCG

S2''=                 GCG

S2      =             GCGCAATG

这个局部比对的得分是 (3 * 1) + (0 * -2) + (0 * -1) = 3。

命名实体抽取(Named Entity Extraction):由于实体的命名往往没有规律,如品牌名,且可能存在多种变形、拼写形式,如“IBM”和“IBM Inc.”,这样导致基于词典完全匹配的命名实体识别方法召回率较低,为此,我们可以使用编辑距离由完全匹配泛化到模糊匹配,先抽取实体名候选词。

具体的,可以将候选文本串与词典中的每个实体名进行编辑距离计算,当发现文本中的某一字符串的编辑距离值小于给定阈值时,将其作为实体名候选词;获取实体名候选词后,根据所处上下文使用启发式规则或者分类的方法判定候选词是否的确为实体名。

实体共指(Entity Coreference):通过计算任意两个实体名之间的最小编辑距离判定是否存在共指关系?如“IBM”和“IBM Inc.”, "Stanford President John Hennessy "和"Stanford University President John Hennessy"。

机器翻译(Machine Translation):

识别平行网页对:由于平行网页通常有相同或类似的界面结构,因此平行网页在HTML结构上应该有很大近似度。首先将网页的HTML标签抽取出来,连接成一个字符串,然后用最小编辑距离考察两个字符串的近似度。实际中,此策略一般与文档长度比例、句对齐翻译模型等方法结合使用,以识别最终的平行网页对。

自动评测:首先存储机器翻译原文和不同质量级别的多个参考译文,评测时把自动翻译的译文对应到与其编辑距离最小的参考译文上,间接估算自动译文的质量,如下图所示:

字符串核函数(String Kernel):最小编辑距离作为字符串之间的相似度计算函数,用作核函数,集成在SVM中使用。

3)变形

在基本的编辑距离基础上,结合实际应用,往往需要做一些变形或改进,如某些拼写错误相对其他更容易发生,同义词替换、虚词或修饰成分被删除(或插入)应该得到较小的惩罚,等等。

改进后的最小编辑距离公式如下所示:

mysql 编辑距离 搜索_最小编辑距离(Minimum Edit Distance)相关推荐

  1. Minimum edit distance(levenshtein distance)(最小编辑距离)初探

    最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...

  2. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)

    I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...

  3. 最小编辑距离(Minimum Edit Distance)

    概念 编辑距离的概念: 给定两个字符串oppa和apple,如何把前者变成后者?你可以使用的操作有:1.增加字符2.删除字符3.更新字符. 一种可能的做法是: oppa->appa->ap ...

  4. python 编辑距离_最小编辑距离python

    1 什么是编辑距离 在计算文本的相似性时,经常会用到编辑距离(Levenshtein距离),其指两个字符串之间,由一个字符串转成另一个所需的最少编辑操作次数.在字符串形式上来说,编辑距离越小,那么两个 ...

  5. python 编辑距离_最小编辑距离(Levenshtein)的 Python 实现

    一直以为这个算法实现起来的代码量很高,直到最近刷 <Speech and Language Processing>,用动态规划做起来,简单.优雅. 算法原理 字符串 X,Y 的长度分别是 ...

  6. mysql 分词搜索_打造一个蓝奏云网盘搜索引擎

    目前存在的网盘搜索引擎好多,可以归于两类: 1.搜索引擎索引 2.爬虫入库索引 第一种:搜索引擎索引 这种索引方式是目前比较主流的方式,依靠百度,谷歌建立索引链接,当用户进行搜索的时候,网盘搜索引擎会 ...

  7. solr mysql 全文搜索_全文检索Solr集成HanLP中文分词

    以前发布过 HanLP 的 Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),于是就抽空做了个Solr插件出来, ...

  8. mysql 分词搜索_实战 | canal 实现Mysql到Elasticsearch实时增量同步

    题记 关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区.QQ群等讨论最多的问题之一. 问题包含但不限于: 1.Mysql如何同步到Elasticsear ...

  9. mysql fulltext搜索_[MySQL] 原生全文检索 fulltext 的简单应用

    在目标字段上添加全文检索:alter table 表名 add fulltext(字段) with parser ngram 查询语句:select * from xxx where match(字段 ...

最新文章

  1. 什么是锚文本以及锚文本连接
  2. 开发中使用UEditor编辑器的注意事项
  3. 剑指offer之【调整数组顺序使奇数位于偶数前面】
  4. Linux查看端口、进程情况及kill进程
  5. Fiddler 十分钟最全使用介绍
  6. MYSQL中的BlackHole引擎
  7. 理论基础 —— 排序 —— 计数排序
  8. PHP HTML 生成 PDF
  9. Android Activity绑定到Service
  10. mysql alter 添加注释_我们如何使用MySQL ALTER TABLE命令在列上添加注释?
  11. 产业分析:阿里巴巴碳中和行动报告
  12. 柴静,你能看见自己吗?
  13. Win11开机只有鼠标显示怎么办?
  14. 帆软BI工具Fine BI连接数据库
  15. 【翻译】Kinect v2程序设计(C++) Depth编
  16. USB学习笔记(3)HID应用分析
  17. SLAM 三维传感器 点滴
  18. 数据处理-18.数据采集渠道
  19. OAF开发基本知识点
  20. 在线制作思维导图网站哪个最好

热门文章

  1. 如何使用Database2Sharp进行代码生成
  2. (福利)中秋灯谜,猜中有奖
  3. SpringCloud系列博客父工程xml依赖
  4. Docker(二) docker帮助、镜像及容器相关操作命令介绍
  5. python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
  6. magisk安装失败_MIUI eu版安装刷入教程
  7. Rabbitmq 1.消息如何保障 100%投递成功?
  8. 可有可无的Mysql工作技巧 2
  9. golang 切片追加问题
  10. 阿里云centos镜像地址以及个发行版本说明