利用最小编辑距离算法实现文本diff

    最近在公司一直在做diff的事情,对于文本的diff。因为一开始维基百科实现文字的diff做得比较不错,所以就调研了下mediawiki的diff实现,但发现mediawiki默认只能diff到行的级别,如果要diff到汉字的级别,是需要更改代码的。所以我就改了该mediawiki的代码,发现可以得到相应的效果。

    但待我继续追踪代码发现,其实mediawiki的diff实现并不是很优雅,当然我没有太细看它diff的内容,是在追踪的过程中,发现不如使用最小距离去做diff,这样就可以实现和mediawiki同样的diff效果,而且实现起来比mediawiki的要简单。

    下面是我做的一个demo,大家可以访问下看看:

    http://clamdemo.sinaapp.com/diff/index.php

     可以实现单个汉字级别的diff。

   下面是几个diff的截图:

image

    可以较为清晰的diff出相应的内容。

代码比较ugly,我就不上传了。不过我可以贡献下最小编辑距离的实现算法,php本身虽也自带最小编辑距离的函数,但只能给出编辑距离,无法给出编辑过程,这个算法,是可以给出编辑过程的。此算法的产生离不开snowteng(snowteng17@gmail.com)的协助。代码比较ugly,别笑话。。

代码位置:

http://code.google.com/p/clamdemo/downloads/detail?name=MinumDistance.php&can=2&q=#makechanges

 

本文源地址:http://www.log4myself.info/archives/163

posted @ 2012-03-29 11:53  clam  阅读(1445)  评论(0编辑  收藏  举报