2

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

您可以在此处找到一个示例(关于 stackoverflow!):

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

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

假设我有两个列表。如果找到的字符串超过 50% 相等,我正在遍历第一个列表并检查第二个列表中第一个列表的索引位置。如果是,我将在比较视图中并排打印两个字符串,然后继续第一个列表的下一项。如果不是,我会检查第二个列表中的下一项,直到找到它,如果找不到,则将第二个列表的字段留空。(虽然我基本上更喜欢第二个列表中的一个句子也总是出现在比较视图中,而不是把它排除在外,例如,第一个列表字段有一个空白字段)

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

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

当然,如果您对用于修订比较的算法维基百科(以及我假设的一般维基?)有所了解,我会很高兴听到它。

非常感谢

4

2 回答 2

4

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

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

于 2012-09-17T19:01:29.137 回答
3

除了 Wikipedia 的版本控制之外,另一个实现是diff在 Unix 风格的系统上。GNU 实际上为diff提供了源代码,这可以让您在此处查看他们的算法:

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

于 2012-09-17T18:57:35.727 回答