问题标签 [google-diff-match-patch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

c++ - 仅在添加第二个项目后才使用一个项目编译错误

我在 VS2012 中有一个编译良好的解决方案。我想为它写一些单元测试并找到WinUnit

为方便起见,我将 WinUnit 测试项目拉到了我的解决方案中。

我删除了他们的示例文件,并开始引用我想要测试 的Google 的 diff_match_patch副本。

一旦我将 .h 文件添加到我的项目并编译,我在 diff_match_patch 文件中得到 3 个错误。在我添加新项目之前,这个文件编译得很好。

错误 3 错误 C2059:语法错误:'(' ...\diff_match_patch.h 103 1 TestSampleLib

错误 4 错误 C2143:语法错误:缺少 ';' 在'}'之前 ...\diff_match_patch.h 104 1 TestSampleLib

错误 5 错误 C2238: ';' 前面的意外标记 ...\diff_match_patch.h 104 1 测试样本库

所有错误都围绕此代码:

我认为这可能是我缺少的一些参考,但我已经添加了我能想到的所有内容,但它仍然无法编译。

这些是我得到的唯一错误,所以我无法找出根本原因。

什么会使这个原本可编译的文件失败?

0 投票
1 回答
266 浏览

c# - 在 C#.NET 中编译 google-diff-match-patch 时摆脱 HttpUtility 错误?

尝试包含 google-diff-match-patch 的 C# 端口时,我在编译时收到以下错误:

错误 1:当前上下文中不存在名称“HttpUtility”

如何消除此错误?我正在使用以下配置文件:Microsoft Visual Studio Express 2012 for Windows Desktop Version 11.0.60610.01 Update 3、Microsoft .NET Framework Version 4.5.51641、Microsoft Visual C# 2012、Microsoft Windows 8

0 投票
2 回答
1942 浏览

c# - How to set up google-diff-match-patch C# library

So I am a newbie and I couldn't find a proper answer to this on the internet. After digging a little bit here is what I came up with.

0 投票
1 回答
70 浏览

python - 无冗余存储差异信息元组的有效方法

我有这个正文How can I run java script from a local folder?

这个diff.diff_main(diff(), "How can I run java script from a local folder?","How can I run Javascript from a local folder?")

返回[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')]

这个短字符串不是什么大问题,但它有更大的字符串,比如 40,000 个字符,这在我的应用程序中很常见。为了清晰和可读性,我选择了这个短字符串,但是我正在寻找一种存储文本位置(从开始位置到结束位置)而不是实际文本的方法。它最终将与原始文本匹配。

例如,,, 而不是[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')]我会[(0, '0,14'), (-1, 'j'), (1, 'J'), (0, '15,18'), (-1, ' '), (0, '19,44')]

它将从元组中编码的位置解码,例如 0,14 是从位置 0 到 14 或How can I run ,,, 15,18 从位置 15 到 18 在原始文本中ava等等,

以后可以像这样检索它originaltext[0:14],,,

我已经尝试过了,它非常接近

但是print result是给我{0: {0: 14}, 1: {-1: 'j'}, 2: {1: 'J'}, 3: {0: (15, 3)}, 4: {-1: ' '}, 5: {0: (38, 27)}}的,是不正确的,因为它应该给{0: {0: 14}, 1: {-1: 'j'}, 2: {1: 'J'}, 3: {0: (15, 18)}, 4: {-1: ' '}, 5: {0: (19, 44)}}

我在这里做错了什么?有没有办法做到这一点?如果您有任何选择,我很乐意接受,谢谢!

0 投票
1 回答
295 浏览

java - google-diff-match-patch 在运行时因 java.lang.NoClassDefFoundError 而失败

我正在尝试使用google-diff-match-patch,当我运行以下代码时,在 diff_match_patch$Diff 上获得 NoClassDefFoundError 。

我查看了编译后的 diff_match_patch.class 和 diff_match_patch$Diff、diff_match_patch$Patch 和 diff_match_patch$LinesToCharsResult 都在那里。我从来没有对静态嵌套类有太多的运气,但我认为这就是问题所在。

0 投票
1 回答
1298 浏览

java - 比较Java中的2个段落变化

我正在开发一个 Java webapp,用户可以在其中更改文本区域。在这方面,他可以写一个段落,一个句子。所以我目前正在尝试做的是用点分隔符分割整个段落。完成后,我想检查哪些句子发生了变化。我目前正在使用 for 循环执行此操作,这不准确,因为我必须将数组的长度设置为两个字符串数组的 Math.minimum。但它不起作用,我从中修改了零字符串。请让我知道我做错了什么。

代码 :

所以基本上在两个字符串中,我只想保存哪些句子已被更改。就这样。请告诉我。谢谢。我只是为了方便使用点分隔符,如果有任何其他高级正则表达式,我不介意使用它。非常感谢。:-)

编辑 根据建议,我正在尝试使用 google diff-match-patch 库。这是我能够找到的,但在隔离差异方面仍然没有成功。我必须将它们保存在数据库中,所以我也必须标记它们,但我还没有它们。我的代码:

现在当我打印文本时,我可以看到整个 2 段。我究竟做错了什么?

0 投票
1 回答
2964 浏览

java - Java:在 Google-diff-match-patch 中获得有效的句子

  • 我正在开发一个 Java 应用程序,我想在其中比较 2 个段落并获取要比较的 2 个字符串中不同的句子。现在我能够得到插入的内容和删除的内容。我面临的问题是,我想得到受影响的句子,而不仅仅是单词。

例子 :

  1. 老弦:敏捷的棕狐跳过了懒惰的兔子。好奇心害死猫。
  2. 新弦:敏捷的棕色狮子跳过了懒惰的兔子。好奇心害死猫。

预期输出:快速的棕色狮子跳过懒惰的兔子。

我现在得到什么。

所以,我不知道在哪里删除了 fox 这个词以及在哪里添加了 lion。因此,即使是有一些操作的字符的左右各 15 个字符也可以。我现在拥有的代码:

你能帮忙的话,我会很高兴。非常感谢。:-) 如果对我解释的方式有任何疑问,请告诉我。

编辑 从答案中添加的新代码:

我想知道整个单词/句子何时被删除插入,以便我可以将其正确保存在数据库中。你能帮忙的话,我会很高兴。非常感谢。:-)

编辑 下面提到的答案可以完美地获得可以保存在数据库中的 2 个单独的字符串。

0 投票
1 回答
1068 浏览

c# - 使用 DiffMatchPatch 的示例

我希望我在这里没有违反任何规则。我对另一篇文章有​​疑问,但我不是 stackoverflow 的大用户,所以我的声誉太低,无法对不属于我自己的问题或答案添加评论。

关于这个问题:如何比较两个富文本框内容并突出显示更改的字符?

TaW 提供了一些示例 C# 代码,我们在 Visual Studio 项目中使用了这些代码。但是,我们发现了一个问题,不知道如何解决。

如果 RTB1 包含文本“My name is David”,而 RTB2 包含文本“My name is”,则在运行比较后,diffs 集合中有两个差异,并且不知何故,当富文本框被重写以显示差异时, RTB1 与 RTB2 完全匹配,没有突出显示。也许这是预期的行为,我们只是没有意识到这一点,但我们希望 RTB1 中的文本“David”会被突出显示。

如果 RTB2 中的文本是“我的名字是”(在行尾添加了两个空格),那么我们会得到预期的行为。

我应该提到我们编写了一个与 TaW 的 C# 代码等效的 VB.NET 并且只是注意到了一个区别。我注意到评论中的差异。

如果我的声望达到 50,我还会在评论中补充说,我们非常感谢TaW分享他的示例,以及 DiffMatchPatch 的创建者。

0 投票
1 回答
127 浏览

java - Java:检查两个文本段落是否不同,在删除句子时给出错误

我正在开发一个用于记笔记的 Java 应用程序。现在,每当用户编辑便笺中的文本时,我都想找出 oldText 和 newText 之间的区别,以便将其添加到该便笺的历史记录中。

为此,我将每个段落拆分为多个字符串,方法是在点处拆分它们。然后我使用 diff-match-patch 比较该字符串列表中的句子。

到目前为止,它可以很好地添加、编辑文本,但是一旦我删除一个句子,就会出现问题。

情况是

但正因为如此,比较器看到 sentence2 被 sentence3 替换, sentence3 被 sentence4 替换,以此类推。

这不是理想的行为,但我不知道如何纠正这种情况。我将发布我的代码,请让我知道如何正确获取它们之间的差异。

GroupNoteHistory 是我保存 oldText 和 newText 仅更改的对象。我希望我的代码是可以理解的。

请让我知道我能做什么。非常感谢。:-)

0 投票
0 回答
218 浏览

git - 如何将多个注释合并到同一个文本文件中?

假设我有一个文件,它代表一个带有以下文本的“源文档”:

来源/原始文件:

A quick brown fox jumped over the log

此源文档已由不同作者注释,每个作者都突出显示了文本的不同部分。我们可以假设原始文档中没有任何内容被删除,也没有添加任何新文本(注释标记除外)。

修改/注释文档#1:

A quick <annotation>brown fox</annotation> jumped over the log

修改/注释文档#2:

A quick brown fox <annotation>jumped over</annotation> the log

修改/注释文档#2:

A <annotation>quick</annotation> brown fox jumped over the log

我的问题:我需要将这些不同的注释自动合并到原始文本中并生成一个文档。

合并的最终文件:

A <annotation>quick</annotation> <annotation>brown fox</annotation> <annotation>jumped over</annotation> the log

我尝试了以下方法,但始终未能实现我的目标:

差异/补丁

如果我尝试区分不同的注释文档,则生成的补丁每个都会简单地覆盖先前应用的补丁。

计算每个补丁和原始文本之间的差异似乎确实为少量补丁生成了一个可行的最终产品。然而,我正在处理的典型用例可能包含数十个文档注释。这些注释的数十个补丁不可避免地会产生合并失败。我还没有确定失败的确切原因,但我最好的猜测是为统一差异计算的定位是基于原始的、未修改的文档。一旦应用了多个补丁,后续补丁将不再处理可以通过原始定位解决的目标内容。

我尝试使用Neil Fraser 的 diff_match_patch库来累积这些补丁,希望 patch_make 中的算法能够(神奇地)重新计算差异。我也尝试过使用 git 工具(如 git merge-file),但由于可能与上述相同的原因而失败。

被子

Quilt听起来应该是我的问题的确切解决方案,因为它允许“堆叠补丁”。但我一直在努力让它发挥作用。我努力了:

我不完全清楚我是否可以使用 diff 和 patch 程序生成的补丁。我也不清楚被子是否期望产生补丁或差异。我发现的示例假设修补源树或修改多个文件的多个修补程序。

我的问题:

  • 是否有一个简单的工具或(甚至更好)一个 api 或库来完成我正在寻找的东西?
  • 我是否在上述方法中做错了什么,我可以修复以获得我想要的结果?

谢谢!