Text 文本比较算法
我们在项目中有一个要求,我们必须比较两个文本(update1,update2),并提出一个算法来定义有多少单词和多少句子发生了变化 有什么我可以使用的算法吗Text 文本比较算法,text,comparison,diff,compare,Text,Comparison,Diff,Compare,我们在项目中有一个要求,我们必须比较两个文本(update1,update2),并提出一个算法来定义有多少单词和多少句子发生了变化 有什么我可以使用的算法吗 我甚至不是在寻找代码。如果我知道这个算法,我可以用Java编写它。通常,这是通过查找(通常称为LCS问题)来完成的。这就是像diff这样的工具的工作原理。当然,diff是一个面向行的工具,听起来您的需求有些不同。不过,我假设您已经构建了一些比较单词和句子的方法。某种差异变体可能会有所帮助,例如 如果你决定设计你自己的算法,你必须解决插入句子
我甚至不是在寻找代码。如果我知道这个算法,我可以用Java编写它。通常,这是通过查找(通常称为LCS问题)来完成的。这就是像
diff
这样的工具的工作原理。当然,diff
是一个面向行的工具,听起来您的需求有些不同。不过,我假设您已经构建了一些比较单词和句子的方法。某种差异变体可能会有所帮助,例如
如果你决定设计你自己的算法,你必须解决插入句子的情况。例如,对于以下两个文档:
这些人很坏。我讨厌那些男人
及
这些人很坏。约翰喜欢这些男人。我讨厌那些男人
您的工具应该能够向前看,以识别在第二种情况下,
I hate the men
没有被John like the men
取代,而是未被触及,并在其前面插入一个新句子。i、 e.它应该报告一个句子的插入,而不是四个单词后的新句子的变化。diff和大多数其他比较实用程序使用的特定算法是Eugene Myer的。包中提供了它的Java实现。由subversion的diff引擎使用
供您参考,在github的下一页中有我自己使用各种编程语言的实现
当高效且性能良好地比较大文件时,困难就来了。因此,我实现了Myers O(ND)diff算法的一个变体,该算法执行得非常好且准确(并支持基于正则表达式的过滤): 算法可以在这里进行测试:
主页上还有更多信息:这里有两篇文章描述了其他文本比较算法,它们通常应该输出“更好”(例如更小、更有意义)的差异:
diff(1)的前端称为wdiff(1),它可以逐字工作。这是一个了不起的工具!但下载页面不可用(404)。你能告诉我在哪里可以下载吗?