aku*_*aku 30
我可以推荐看看Neil Fraser的代码和文章:
目前提供Java,JavaScript,C++和Python.无论语言如何,每个库都具有相同的API和相同的功能.所有版本都有全面的测试工具.
Neil Fraser:差异策略 - 用于理论和实施说明
tzo*_*zot 25
在Python中,有difflib,正如其他人所建议的那样.
difflib提供SequenceMatcher类,可用于为您提供相似比.功能示例:
def text_compare(text1, text2, isjunk=None):
return difflib.SequenceMatcher(isjunk, text1, text2).ratio()
Run Code Online (Sandbox Code Playgroud)
我目前的理解是,最短编辑脚本(SES)问题的最佳解决方案是使用Hirschberg线性空间细化的Myers"中蛇"方法.
迈尔斯算法描述于:
E.Myers,"一种O(ND)差分算法及其变化",
Algorithmica 1,2(1986),251-266.
GNU diff实用程序使用Myers算法.
您所说的"相似性得分"在文献中称为"编辑距离",即将一个序列转换为另一个序列所需的插入或删除的数量.
请注意,许多人引用了Levenshtein距离算法,但是虽然很容易实现,但不是最佳解决方案,因为它效率低(需要使用可能很大的n*m矩阵)并且不提供"编辑脚本" "这是可用于将一个序列转换为另一个序列的编辑序列,反之亦然.
有关Myers/Hirschberg的良好实施,请查看:
http://www.ioplex.com/~miallen/libmba/dl/src/diff.c
它所包含的特定库不再被维护,但据我所知,diff.c模块本身仍然是正确的.
麦克风