我们在项目中有一个要求,需要比较两个文本(update1,update2),并提出一个算法来定义改变了多少单词和句子。
有没有可以使用的算法?
我甚至不需要代码。如果我知道算法,我可以用Java编写它。
我们在项目中有一个要求,需要比较两个文本(update1,update2),并提出一个算法来定义改变了多少单词和句子。
有没有可以使用的算法?
我甚至不需要代码。如果我知道算法,我可以用Java编写它。
diff
这样的工具的工作原理。当然,diff
是一种面向行的工具,听起来您的需求有些不同。但是,我假设您已经构建了某种比较单词和句子的方法。一些类似于diff的变体可能会有所帮助,例如wdiff
如果你决定设计自己的算法,你需要解决插入句子的情况。例如对于以下两个文档:
The men are bad. I hate the men
和
The men are bad. John likes the men. I hate the men
你的工具应该能够预先查看并识别出在第二个文档中,I hate the men
没有被John likes the men
替换,而是保持不变,并在它之前插入了一个新的句子。也就是说,它应该报告插入了一句话,而不是报告更改了四个单词后跟着加了一句新的话。
第一篇论文被提及在这个答案中,第二篇论文被提及在这个答案中,两篇论文都与类似的SO问题有关:Heckel[3]指出LCS技术存在类似的问题,并提出了一种线性算法来检测块移动。如果字符串中有很少的重复符号,该算法的表现是足够好的。然而,否则该算法的结果就很差。例如,给定两个字符串aabb和bbaa,Heckel的算法无法发现任何公共子字符串。
最著名的算法是O(ND)差异算法,也被用于Notepad++比较插件(用C++编写)和GNU diff(1)。你可以在这里找到一个C#实现: http://www.mathertel.de/Diff/default.aspx