【问题标题】:How to Implement Word Level in google / diff-match-patch C#如何在 google / diff-match-patch C# 中实现单词级别
【发布时间】:2020-06-04 06:02:13
【问题描述】:

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

我得到的结果是:

 =I've never been =|-a-|=t=|= th=|-e-|=se places=|
 =I've never been =|=t=|+o+|= th=|+o+|=se places=|

我想要的结果是:

 =I've never been =|-at these-|= places=|
 =I've never been =|+to those+|= places=|

文档说:

复制 diff_linesToChars 并将其命名为 diff_linesToWords。看 对于标识下一行边界的行:lineEnd = text.indexOf('\n', lineStart);

在c#版本中,我在diff_linesToCharsMunge中找到了要改的那一行,我改成:

lineEnd = text.Replace(@"/[\n\.,;:]/ g"," ").IndexOf(" ", lineStart);

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

我在打电话:

List<Diff> differences = diffs.diff_main(linepair.Original, linepair.Corrected, true);
diffs.diff_cleanupSemantic(differences); 

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

【问题讨论】:

  • 你能解决这个问题吗?我遇到了同样的问题。如果您设法解决它,您可以在这里发布代码吗?

标签: google-diff-match-patch


【解决方案1】:

我创建了一个带有 diffmatch 程序的示例 dotnet 项目。它可能是 DiffMatchPatch 文件的旧版本,但字和行有效。

DiffMatchPatchSample

对于您上面的示例文本,我得到以下输出。

在这些 |对那些

【讨论】:

  • 非常感谢您,Niketh。我实际上放弃了它并转向了别的东西。现在你有了解决方案,我再看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
相关资源
最近更新 更多