利用最小编辑距离算法实现文本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

转载于:https://www.cnblogs.com/clam/archive/2012/03/29/2423079.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值