维基百科用于版本比较功能的算法是什么



我目前正在实现某种文本版本(修订版)比较可视化,并试图找到一些关于维基百科如何实现"查看历史"功能的信息,在该功能中,他们可以将当前修订版与旧修订版进行比较。

你可以在这里找到一个例子(关于stackoverflow!):

http://en.wikipedia.org/w/index.php?title=Stack_Overflow&diff=512241244&oldid=458578615

到目前为止,我已经实现了几个想法,并试图重现维基百科的做法http://en.wikipedia.org/wiki/Levenshtein_distance)。

假设我有两个列表。我在第一个列表上迭代,并检查第一个列表在第二个列表上的索引位置,如果找到的字符串相等50%以上。如果是,我只需在比较视图中并排打印两个字符串,然后继续第一个列表的下一项。如果没有,我会检查第二个列表中的下一个项目,直到找到为止;如果找不到,则将第二个清单的字段留空。(尽管我基本上更希望第二个列表中的句子也总是出现在比较视图中,而不是将其省略,例如,第一个列表字段为空白字段)

这种方法有一些弱点。起初,如果某个句子被删除,我需要检查索引周围的位置,不要简单地"忘记"它。但我仍然需要注意,如果我这样做,文本位置不会颠倒。

你们中有人尝试过用java实现类似的东西吗?如果有一些代码示例是别人或你如何实现的,我很乐意从中学习

当然,如果你知道维基百科(以及我认为的一般维基)用于版本比较的算法,我会很高兴听到它

非常感谢

Wikipedia解释了wiki差异引擎的工作原理-http://en.wikipedia.org/wiki/Help:Diff

您可以按照页面底部的链接了解更多信息,但此页面列出了使用的模板。

除了维基百科的版本控制之外,另一个实现是Unix风格系统上的diff。GNU实际上为diff提供了源代码,这可能使您能够在这里查看它们的算法:

http://ftp.gnu.org/gnu/diffutils/

最新更新