最小编辑距离

编辑距离( Edit Distance ,又称 Levenshtein 距离 ,是指两个字串之间,由一个转成另一个所需的编辑操作次数。最小编辑距离,是指所需最小的编辑操作次数。

编辑操作包含:插入、删除和替换三种操作。

最小编辑距离解法 - 动态规划解法

动态规划的核心思想是:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,我们将其不同阶段的不同状态保存在一个二维数组中。

最小编辑距离算法伪代码:

输入:字符串 1-str1 字符串 2-str2

输出:最小编辑距离

实质问题:

求解动态规划矩阵。假设我们以 str1 为主串(即对 str1 进行操作)

假设 str1=ABCD str2=ACD len1=str1 的长度, len2 str2 的长度。
建立矩阵:
生物领域中 DNA 分析:比较 DNA 序列并尝试找出两个序列的公共部分。如果两个 DNA 序列有类似的公共子序列,那么这些两个序列很可能是同源的。在比对两个序列时,不仅要考虑完全匹配的字符,还要考虑一个序列中的空格或间隙(或者,相反地,要考虑另一个序列中的插入部分)和不匹配,这两个方面都可能意味着突变( mutation )。在序列比对中,需要找到最优的比对(最优比对大致是指要将匹配的数量最大化,将空格和不匹配的数量最小化)。
NLP 中应用:即两个字符串的相似计算函数可用于下面的任务。
拼写纠错( Spell Correction ):又将每个词与词典中的词条比较,英文单词往往需要做词干提取等规范化处理,如果一个词在词典中不存在,就被认为是一个错误,然后试图提示 N 个最可能要输入的词 —— 拼写建议。常用的提示单词的算法就是列出词典中与原词具有最小编辑距离的词条。
命名实体抽取( Named Entity Extraction ):由于实体的命名往往没有规律,如品牌名,且可能存在多种变形、拼写形式,这样导致基于词典完全匹配的命名实体识别方法召回率较低,为此,我们可以使用编辑距离由完全匹配泛化到模糊匹配,先抽取实体名候选词。
实体共指( Entity Coreference ):通过计算任意两个实体名之间的最小编辑距离判定是否存在共指关系。
字符串核函数( String Kernel ):最小编辑距离作为字符串之间的相似度计算函数,用作核函数,集成在 SVM 中使用。