编辑距离
定义:给定两个字符串,两者的编辑距离是将S1转化成S2的最小操作数。如:cat和dog的编辑距离是3.
编辑距离算法:
实验过程
- 初始化一个二维数组,设置str1长度为行长度,str2长度为列长度。(伪代码第一行)
matrix = [[0 for i in range(len(str2) + 1)] for j in range(len(str1) + 1)]
- 初始化矩阵
for i in range(0, len(str2) + 1):
matrix[0][i] = i
for i in range(0, len(str1) + 1):
matrix[i][0] = i
- 矩阵元素包含一个22单元,提前设置好返回22单元中最小值函数。
def min(num1, num2, num3):
temp = num1
if num2 < temp:
temp = num2
if num3 < temp:
temp = num3
return temp
4.遍历字符串,调用min()函数, 编辑距离实现
for i in range(0, len(str1)):
for j in range(0, len(str2)):
if str1[i] == str2[j]:
matrix[i+1][j+1] = min(matrix[i][j+1]+1, matrix[i+1][j]+1, matrix[i][j])
else:
matrix[i+1][j+1] = min(matrix[i][j+1]+1, matrix[i+1][j]+1, (matrix[i][j]+1))
print('中间计算矩阵为:')
for i in range(0, len(matrix)):
print(matrix[i])
return matrix[len(str1)][len(str2)]
实验结果
-
空字符之间的编辑距离为1
-
空字符与单个字符之间的编辑距离为1
-
空字符与字符串间的编辑距离为该字符串长度
-
两个完全不同的字符串间的编辑距离等于max(len(str1),len(str2))。
-
汉语拼音与汉字的编辑距离,说明单个汉字在编辑距离计算中按一个字符处理
-
同义词间的编辑距离对比相似字符串间编辑距离,说明编辑距离体现的是字符串差异,无法体现语义。