如何计算两个 .txt 文件之间的 Levenshtein 距离?
How to Calculate Levenshtein distance between two .txt files?
有标准的 linux 命令吗?如果没有,谁能描述一个 python 脚本来做同样的事情?
我不建议这样做。
Levenshtein 距离函数的复杂度几乎为 O(n*m),当文本相似时,它的复杂度为 O(n²)。
但如果你愿意,你可以做到......
pip install python-Levenshtein
代码将是这样的:
from Levenshtein import *
txt1 = open("text1.txt").read()
txt2 = open("text2.txt").read()
print("distance:", distance(txt1,txt2))
视情况而定。当 ocr 输出相似并且预期存在一些差异时,您可以进行“拆分”并比较每个 word/line 等。
并且仅对行数相同时出现差异的部分使用编辑距离。例如:
def textLevi(txt1,txt2):
lines = list(zip(txt1.split("\n"),txt2.split("\n")))
distance = 0
for i,ele in enumerate(lines,1):
line1,line2 = ele
if line1 != line2:
actDistance = distance(line1,line2)
print( "Distance of line %d: " %(i),actDistance)
distance += actDistance
print( "Sum of Lv Distances:",distance)
textLevi("Hello I \n like cheese","Hello I \n like cheddar")
将创建输出:
Distance of line 2: 4
Sum of Lv Distances: 4
有标准的 linux 命令吗?如果没有,谁能描述一个 python 脚本来做同样的事情?
我不建议这样做。 Levenshtein 距离函数的复杂度几乎为 O(n*m),当文本相似时,它的复杂度为 O(n²)。
但如果你愿意,你可以做到......
pip install python-Levenshtein
代码将是这样的:
from Levenshtein import *
txt1 = open("text1.txt").read()
txt2 = open("text2.txt").read()
print("distance:", distance(txt1,txt2))
视情况而定。当 ocr 输出相似并且预期存在一些差异时,您可以进行“拆分”并比较每个 word/line 等。 并且仅对行数相同时出现差异的部分使用编辑距离。例如:
def textLevi(txt1,txt2):
lines = list(zip(txt1.split("\n"),txt2.split("\n")))
distance = 0
for i,ele in enumerate(lines,1):
line1,line2 = ele
if line1 != line2:
actDistance = distance(line1,line2)
print( "Distance of line %d: " %(i),actDistance)
distance += actDistance
print( "Sum of Lv Distances:",distance)
textLevi("Hello I \n like cheese","Hello I \n like cheddar")
将创建输出:
Distance of line 2: 4
Sum of Lv Distances: 4