【问题标题】:Are there java libraries to do a word-based diff?是否有 java 库来做基于单词的差异?
【发布时间】:2023-03-06 03:21:02
【问题描述】:

我有两段文字。我想在它们之间创建一个基于单词的差异(就像 unix 实用程序 wdiff 那样),但输出中包含更多信息(我的意思是,添加/删除的单词开始的字符位置)。

我需要在 Java 中执行此操作,因此差异的简单输出(如 wdiff)不适合我:我想操作表示差异的对象。

【问题讨论】:

  • 谢谢,但这不是我要搜索的内容:我想做一个基于单词的差异,但不仅仅是输出,而是能够操作这些数据。在我看来,有一个带有这些字段的 java 对象: - 添加/删除 - 添加(或删除)的字符串(单词) - 在第一个(或第二个,btw)文件中添加/删除的位置

标签: java diff word-diff


【解决方案1】:

Diff,Match,Patch - 在 Java 中可用,并且有一个演示 - 它似乎可以区分单词。

【讨论】:

  • 我尝试了很多,基本上是基于字符的。如果你想要一个人工输出,你必须设置一个非常长的时间,计算真的很慢,但是不是基于单词的(我的意思是“house”和“wife”仅在“hous”和“wif”中有所不同)
  • 你看到后处理清理的部分了吗?您也许可以添加一个后处理器,将差异与单词对齐。是英文文本吗?当您将级别提高到单词时,问题变得更加复杂。即使只是将文本准确地标记为单词也需要一些努力,然后您就会遇到消除差异的问题 - 可以通过多种方式解释更改 - 哪种方式有意义可能取决于您的应用程序。处理剪切并粘贴到不同位置的文本块原则上是一项操作,但检测这一点可能很困难。
  • 如果您可以将单词映射到字符(例如,确保不超过 64k 个唯一单词。)然后您可以自己解析文本,将每个单词映射到一个字符并在其上运行字符差异。当然,如果 Diff 算法的实现使得您可以轻松替换正在比较的数据类型,那么您可以通过将单词对象作为输入而不是字符传递来轻松实现单词差异。我还没有看到 Diff api,所以我不能肯定。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多