1

如何在人类语言文本(中文)上进行逐字比较?

我在 git 存储库中有一些中文纯文本。文本已被编辑,我想看看添加/删除了哪些单词。文件中的一行代表一整段文本,所以一个简单的 git diff 是不够的:我们知道在一定数量的段落中发生了一些变化,但我们看不到其中哪些句子/单词发生了变化。

更糟糕的是,正如我所说,文本是中文的。与英语和其他印欧语系不同,中文不使用空格作为单词分隔符。整个段落与中文标点符号组成一个统一的块,不包含任何空格。因此, git diff --word-diff 根本没有帮助。

有没有办法在这样的中文文本的两个版本之间产生人类可读的差异?每个字符是否有等效的 --word-diff ?

4

3 回答 3

1

我将其发布为我自己问题的答案,但是,它仅包含解决方案的一部分,指向正确方向的指针。仍然缺少一些东西。

如何在统一的差异文件中可视化每个字符的差异? 尝试任一命令:

git diff --word-diff-regex=. 
git diff --color-words=.  

上面两个命令中的任何一个都让我非常接近。但是,我有两个问题。如果我只是简单地键入上面的命令并查看控制台中的输出,我只会看到每个段落的开头。整行不适合控制台,git 会截断结尾(即大部分!)。

或者,如果我尝试重定向到文件:

git diff --color-words=. > diff.patch

然后使用 vim 查看文件,我得到一些乱七八糟的东西,看起来更像是二进制代码,而不是任何人类可读的代码。

更新:
我终于使用了这个解决方案:

wget https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight --no-check-certificate 
chmod u+x diff-highlight
git diff --color=always | ./diff-highlight | less -R  
于 2014-10-01T06:21:02.537 回答
1

icdiff可以满足你的需要。在比较中文文本时,此工具可以逐字显示差异。

于 2020-09-29T08:22:18.547 回答
0

逐字逐句diff应该作为您自己的答案。从doc--word-diff-regex中,和之间的关系--color-words如下。

--color-words[=<regex>
  Equivalent to --word-diff=color plus (if a regex was specified) --word-diff-regex=<regex>.

实际上,您可以将word-diff模式设置porcelain为更好地查看diff控制台中的输出。

git diff --word-diff-regex=. --word-diff=porcelain

并且要将输出重定向到文件,您不应该使用--color-words(默认--word-diffcolor),因为生成的文本文件无法识别以某种方式编码的颜色信息git diff作为您得到的乱码。你可以直接使用--word-diff-regex=.,默认--word-diff模式是plain

git diff --word-diff-regex=. > diff.patch
于 2014-10-01T07:29:39.053 回答