问题标签 [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 投票
0 回答
200 浏览

javascript - Google 的 diff-match-patch 用于并发更新

所以,我的应用程序中有一个谷歌文档类型功能,可以由多个用户同时编辑。 当只有一个用户更新文档时, Diff-match-patch对我来说很好。

但是当假设文档已经由 user1 更新并且它没有传递给 user2(由于套接字错误或网络错误)时,它会生成错误的数据。

例如 - “堆栈溢出为 55666。” 是我的文档,正在由多个用户编辑。现在,user1 将其更改为'Stack overflow is 6.'

并计算 diff 并将其发送到服务器,但在此之前 user2 已经将其更改为其他内容,例如'Stack overflow is 25552.'. 现在,当应用补丁(来自 user1)时,它产生了错误的结果,可能是 'Stack overflow is 252.'

那么如何管理它以实现并发更新呢?我可以使用 Socket,如果其他人更改,我会将更改发送给其他用户,以便他们可以获得最新更新的数据,但如果更改很多,则 UX 可能会很糟糕,因为其他用户可能会看到视图中的随机更改。

0 投票
0 回答
333 浏览

c# - C# 中的 TextFile 比较器使用 DiffMatchPatch 修剪前导空格问题

我在我的 C# 项目中使用https://github.com/google/diff-match-patch来比较文本文件。将差异转储到 html 中,并将其作为电子邮件正文发送到我的邮件中,以防发现差异。我使用的方式如下:

但我发现,当我添加/删除前导空格时,没有突出显示,因为它修剪了所有前导空格,标签 INS 和 DEL 被添加到 html 中,并且只有在发现差异时才会添加它们。因此,例如,如果我比较 .py 文件,我可以看到文件本身的变化,但由于缺少空格,我无法立即从我的 html 文件中使用它。

这是我在文本中添加和删除一些空格时生成的 html 文件的示例:

有人可以帮助避免修剪前导空格吗?

0 投票
0 回答
299 浏览

google-diff-match-patch - diff_match_patch 可以为 diff2html 创建统一的差异字符串吗?

diff_match_patch 可以用来创建可以在 diff2html 中使用的统一 diff 字符串吗?

0 投票
0 回答
301 浏览

c# - 使用差异补丁匹配读取文本格式

我正在使用差异匹配补丁https://github.com/google/diff-match-patch来比较 html 文件的文本及其按预期工作。但是用户想要添加一个功能来比较格式(粗体、斜体、下划线)

但是差异匹配补丁只接受字符串。

我创建了一个包含 html 文件的文本及其字体属性的类

但是我现在遇到的问题是当我阅读 html 内容时。我通过文字阅读它。我附加了具有相同格式的文本

例如我有这个示例文本

在此处输入图像描述

所以我的输出是

但是有了这个输出,我怎么能在我的差异匹配通道中传递它。

如果我修改差异匹配补丁。它将接受列表TextProperty

这是这样做的好方法吗?或任何更好的选择?

但是在阅读 diff-match-patch 的代码后,我需要修改很多代码

0 投票
1 回答
679 浏览

javascript - 为什么 Diff-match-patch 破坏 linediff 超过 65K 行

我尝试将 google diff-match-path 库用于行差异: https ://github.com/google/diff-match-patch/wiki/Line-or-Word-Diffs 。当两个输入的总和超过 65,536 (2^16) 行时,我得到错误的补丁。

这是一个错误(在我的代码或 diff-match-patch 中),还是我遇到了 javascript/nodejs 的已知限制?我可以做些什么来将 dmp 用于更大的文件?

使用node version v6.3.1, diff-match-patch 1.0.4

这个脚本重现了这个问题

给出这些输出:

0 投票
1 回答
195 浏览

diff - 差异文本文档但忽略单个字符差异?设置最小编辑距离过滤器?

我有一本 txt 格式的大书的两个版本,我想比较它们以发现版本之间的显着变化,忽略小的单个字符差异。

有很多 diffing 工具可以忽略空格差异,但我也想忽略小的错别字和单个或几个字符的差异。例如,该书的一个版本有leige数百次重复的拼写错误,并且在下一个版本中将其更正为liege. 一些专有名词也改变了它们的拼写。(我可以为每个拼写错误定制解决方法,但想要更通用的东西)

因为我只关心更重要的多词差异,所以我真正想要的是设置一个过滤器,它忽略一行的更改,除非 Levenshtein 编辑距离高于某个阈值。

环顾我发现的所有 diff/comparisons 工具似乎都考虑到了代码,因此它们缺少任何忽略小文本更改的功能。Google 的 diff_match_patch 库非常适合区分纯文本和忽略空格更改(此处为演示),但似乎没有开箱即用的方式来忽略单个字符的非空格差异。

tl;博士; 是否有任何差异工具可以比较文本文档但过滤掉小的单个字符非空白差异?

0 投票
0 回答
88 浏览

python - 给定两个文本的共同基础版本,如何合并两个文本?

类似于 git 如何合并两个分支,但是:

  • 使用蟒蛇
  • text1而不是我们拥有的两个分支text2
  • 而不是我们有的共同提交text0- text1 和 text2 的先前版本

diff-match-patch可能可以用来完成这个任务,但是我在 doc 和 python 包源代码中都没有找到合适的方法(因为文档不完整)。

到目前为止,我想出了这个:

看起来它有效,但我不确定这是否是正确的方法。有 diff-match-patch 经验的人可以批准这个吗?

0 投票
1 回答
212 浏览

javascript - 使用 Google Diff Match Patch 获取差异的第一行和第一列?

我正在关注https://github.com/google/diff-match-patch上的示例和

当我查看对象时,结果是:

文档说它返回一个元组数组。如何获得第一个差异的行号和行号?如果我能够获得第一个更改,那是奖励但不是必需的。

创建上面的示例后,我似乎可以找到第一个-1,那就是行?我希望有一种方法可以做这样的事情:

如果我更改第 3 行,结果如下:

这是结果:

所以看起来结果没有行号?

https://github.com/google/diff-match-patch

0 投票
0 回答
430 浏览

javascript - 未捕获的类型错误:无法设置未定义、vue.js、diff-match-patch、veu-diff-match-patch 的属性“diff_match_patch”

这是我的第一篇文章。我很绝望。我正在尝试构建一个基于 vuejs、vuetify 和 vue-diff-patch-match 的应用程序。 vue-diff-match-patch。我不是程序员,而是 MD。我正在尝试为 ER 患者构建一个文本生成工具,这样我们就可以加快我们的文档流程并为我们的患者提供更多的实际时间。

不幸的是,当我编译我的项目时,我收到了这个错误:

查看完整的错误消息:

我一直在做很多谷歌搜索,在 stackoverflow 上搜索和反复试验......但我无法再进一步了。

我不知道它是组件、底层 diffmatchpatch js lib、webpack 还是其他...

我会很感激任何提示!

提前谢谢!

实际代码:

我尝试过两种方式:

  1. 直接导入 diffmatchpatch + 将代码复制到我自己的组件中:import { diff_match_patch, DIFF_EQUAL, DIFF_DELETE, DIFF_INSERT } from '../utils/diffMatchPatch'
  2. 组件导入,

无论我是直接导入 diffMatchPatch 还是通过组件 -> 相同的错误。我在 diffMatchPatch Lib 的末尾找到了这个:

也许编译器会破坏代码?

0 投票
1 回答
377 浏览

google-diff-match-patch - 如何在 google / diff-match-patch C# 中实现 Word Level

我正在尝试在 Google Diff Match Patch 中实现单词级别的匹配,但它让我大吃一惊。

我得到的结果是:

我想要的结果是:

文档说:

制作 diff_linesToChars 的副本并将其命名为 diff_linesToWords。查找标识下一行边界的行: lineEnd = text.indexOf('\n', lineStart);

在c#版本中,我在diff_linesToCharsMunge中找到了要更改的行,我将其更改为:

但是,粒度没有变化 - 它仍然在字符级别发现差异。

我打电话给:

我已经逐步确保它符合我所做的更改(顺便说一句,在它启动之前至少有 100 个字符的硬编码)。