文档介绍:编辑距离算法的优化与实现
摘 要:在分析基于动态规划的编辑距离算法对文本相似度计算的不足的基础上,利用数据结构在空间效率和时间效率上优化该算法、采用中文分词的思想优化和改善该算法的时间效率和准确率,克服了原有的基于动态规划的计算方法所具有的效率低、准确率低、耗存高的缺点。通过多种优化方案的实验测试和分析,结果表明优化后的算法取得了很好的准确率和时空效率,更好的用于文本相似度计算。
关键词:编辑距离算法;文本相似度计算;算法优化;动态规划
引言
文本相似度的计算在信息检索、文本分类、知识挖掘、网页去重、问答系统等诸多领域有着极为广泛的应用,长期以来一直是研究的热点和难点。人们在文本相似度计算中使用编辑距离算法,但该方法单纯以字为单位计算各个字符之间的编辑距离,插入删除替换三种基本操作的代价值的方法不够明确合理,从而使计算结果存在一定的偏差。故对传统的文本相似度检测编辑距离算法进行优化和改善,提出了一种基于改进编辑距离和中文分词相融合的计算文本相似度的方法,使优化改善后的算法具有较高的准确率和效率、较低的存储空间,更符合文本相似度计算的要求,有效提高文本相似度算法的效率和准确性,使文本相似度计算的性能进一步改善。
编辑距离算法
编辑距离定义
编辑距离又称Levenshtein距离(也叫做Edit Distance),是由俄国科学家Vladimir Levenshtein于1965年在文献[1]中提出的,是一种常用的距离函数度量方法,在多个领域特别是文本相似度检测得到了广泛的应用。编辑距离是指两系列字符串之间只能通过插入、删除和替换三种基本操作把源字符串(S)转换成目标字符串(T)所需的最少基本操作次数。编辑距离值越大,则相似度越小。
编辑距离算法原理
对于求两个字符串之间的编辑距离实际上可以转化为一个求最优解的问题,可以利用动态规划的思想[2]来计算,计算原理的步骤如下表2-1所示:
表2-1 编辑距离算法原理的计算步骤
步骤
描述
1
设置n为源字符串s的长度。
设置m为目标字符串t的长度。
如果n等于0,返回m并退出。
如果m等于0,返回n并退出。
构造一个矩阵d[m+1,n+1]含有0..m行和0..n列。
2
初始化矩阵第一行0..ñ。
初始化矩阵第一列0..m。
3
检查 s (i from 1 to n) 中的每个字符。
4
检查 t (j from 1 to m) 中的每个字符。
5
如果 s[i] 等于 t[j],则编辑代价cost为0;
如果 s[i] 不等于 t[j],则编辑代价cost为1。
6
设置矩阵单元格d [i,j] 的值为下面的最小值:
a. 正上方单元格的值1: d[i-1,j] + 1.
b. 左边单元格的值加1: d[i,j-1] + 1.
c. 对角线单元格的值加上编辑代价cost的值: d[i-1,j-1] + cost.
7
在完成迭代 (3, 4, 5, 6) 之后,d[m,n]便是编辑距离的值。
本小节将演示如何计算源字符串"GUMBO"和目标字符串"GAMBOL"两个字符串之间的Levenshtein距离,计算步骤如下:
步骤1、2 步骤3、6,当i=1 步骤3、6,当i=2
 
 
G
U
M
B
O
 
0
1
2
3
4
5
G
1
 
 
A
2
 
 
M
3
 
 
B
4
 
 
O
5
 
 
L
6
 
 
 
 
G
U
M
B
O
 
0
1
2
3
4
5
G
1
0
 
 
A
2
1
 
 
M
3
2
 
 
B
4
3
 
 
O
5
4
 
 
L
6
5
 
 
 
 
G
U
M
B
O
 
0
1
2
3
4
5
G
1
0
1
 
 
A
2
1
1
 
 
M
3
2
2
 
 
B
4
3
3
 
 
O
5
4
4
 
 
L
6
5
5
 
 
步骤3、6,当i=3 步骤3、6,当i=4 步骤3、6,当i=5
 
 
G
U
M
B
O
 
0
1
2
3
4