字符串编辑距离(Edit Distance)

1、问题描述
定义
字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符串之间,由一个转变成另外一个所需的最少编辑操做次数。许可的编辑操做包括:算法

将一个字符替换成另外一个字符
插入一个字符
删除一个字符
应用
1. DNA分析:
基因学的一个主要主题就是比较DNA序列并尝试找出这两个序列的公共部分。若是两个DNA序列有相似的公共子序列,那么这两个序列极可能是同源的,在比对两个序列时,不只要考虑彻底匹配的字符,还要考虑一个序列中的空格或间隙和不匹配,这两方面均可能意味着突变(mutation)。在序列比对时,须要找到最优的比对(最优比对大体是指要将匹配的数量最大化,将空格和不匹配的数量最小化)。若是要更正式些,能够肯定一个分数,为匹配的字符添加分数,为空格和不匹配的字符减去分数。
2. 拼写纠错(Spell Correction)&拼写检查(Spell Checker):
将每一个词与词典中的词条比较,英文单词每每须要作词干提取等规范化处理,若是一个词在词典中不存在,就被认为是一个错误,而后提出 N 个最多是要输入的词——拼写建议。经常使用的提示单词的算法就是列出词典中与原词具备最小编辑距离的词条。
3. 命名实体抽取(Named Entity Extraction)&实体共指(Entity Coreference):
因为实体的命名每每是没有规律的,如品牌名,且可能存在多种变形,拼写形式,如“IBM”和“IBM Inc”,这样致使基于词典彻底匹配的命名实体识别方法召回率较低,为此,咱们可使用编辑距离由彻底匹配泛化到模糊匹配。
4. 字符串核函数(String Kernel):
最小编辑距离做为字符串之间的类似度计算函数,用于SVM等机器学习算法中。机器学习

2、字符串编辑的分析函数


代码以下:学习

// 算法的关键是求解 dp 矩阵,该矩阵即为生物信息学中所提到过的打分矩阵
// dp 矩阵的维度为 (srclength+1) * (targetLength+1),
// 推演时能够将 ‘0’+pSource 分别排在每一行开头,‘0’+pTarget 分别排在每一列上头
int editDistance(char *pSource, char *pTarget)
{
int srcLength = strlen(pSource);
int targetLength = strlen(pTarget);
int dp[srcLength + 1][targetLength + 1];
for (int i = 0; i <= srcLength; ++i){
dp[i][0] = i; // 这一步表示由一个空串变成pSource的编辑距离
}
for (int j = 0; j <= targetLength; ++j){
dp[0][j] = j;
}
for (int i = 1; i <= srcLength; ++i){
for (int j = 1; j <= targetLength; ++j){
if (pSource[i - 1] == pTarget[j - 1]){
dp[i][j] = dp[i - 1][j - 1]; // 表示当前两个字符串最后的两个元素相等的状况
}
else{
// 表示当前两个字符串最后两个元素不相等的状况,
// 编辑距离为上述三种编辑距离中最小值加1
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1;
}
}
}
return dp[srcLength][targetLength]; // dp 矩阵的最后一个元素即为最终求出的编辑距离
}
---------------------
做者:xhj_enen
来源:CSDN
原文:https://blog.csdn.net/xhj_enen/article/details/88398444
版权声明:本文为博主原创文章,转载请附上博文连接!.net

相关文章
相关标签/搜索