跳到正文
简体中文
工作台什么都不上传的工具
ODERSA 协会的一间工坊什么都不外传,什么都不留存,什么都到不了我们手里。

工坊 · 比对两段文字

怎么用 : 比对两段文字

一份合同、一份报价、一封信的两个版本:拿到一个陌生网站上去比,就等于把两个版本都交给了它。在这里,它们一步也不离开您的设备,而且工具是逐词指出改动的,不是把两整行涂成红色。

打开工具

最常见的情况也最敏感:收到一份合同、报价单或者协议的第 2 版,得弄清楚跟第 1 版比动了哪里。把两个版本都粘到一个在线比对网站上,等于把这份文件的两个版本一起交给了陌生人。在这里,两段文字都留在您的设备上。

工具用的是最长公共子序列,也就是 Unix 系统上那个老牌比对程序的算法。这不是细枝末节:它给出的是能解释从一段文字变到另一段的、数量最少的那组增删行。而那种粗略对齐的做法,往往在只改了三个词的地方吐出一大片差异。

而且它还会对那些只是被改动过的行再做一遍逐词比对。这就是“这一行变了”和“是这个词被换成了那个词”之间的区别,也正是重读一份合同时真正要找的东西。

怎么用

  1. 把原始版本粘到上面那个框里,然后点一下:正下方会出现第二个框。
  2. 把改过的版本粘到第二个框里,再点“比对这两个版本”。
  3. 读那张表:每一处删掉的、加上的、改动过的行,都会标出它在两个版本里各是第几行。

支持的格式

两个框里都放纯文字。比对是逐行进行的:所以一整段不换行的文字会被当成一整块来比。把段落用换行断开,结果才读得下去。

两段文字,打进来或者粘进来

每段最多 100000 个字符。真正的上限落在两段文字行数的乘积上:请看下面的限制。

查看兼容性对照表

它的限制

上限落在行数的乘积上,不在字数上

这个算法要建一张表格,格子数等于第一段的行数乘以第二段的行数。两段各两千行,就是四百万个格子,还跑得动;各一万行就是一亿个格子,标签页会卡死。工具在开算之前就先数一遍,把两个数字告诉您,干脆利落地拒绝,而不是把您的浏览器锁住。

比对是按行做的,一段没有换行的文字就是一行

所有正经的比对程序都是这么工作的,也正因如此才能按位置说清楚改在哪里。从文字处理软件里整块粘过来的文字,就会被当成一整块来比:缺的是原来的分行,不是工具没做到。第二遍逐词比对正是为这种情况准备的。

被搬走的段落会显示成这里删掉、那里加上

识别搬动要用另一套算法,更要紧的是要做一个武断的决定:相隔很远的两块要像到什么程度,才算“是同一块,被搬走了”?我们宁可给出一个不做任何猜测的结果。当您看到同一段文字在一处被删掉、在另一处被加上,那就是搬动,而您认出它比我们猜出它要快。

看着一模一样的两段文字,可能差在看不见的字符上

一个不换行空格、一个弯引号式的撇号、一个从网页上粘来的零宽字符:工具看得见它们,会把它们报成差异,这是对的,但让人摸不着头脑。如果表格说某一行改动过、您却看不出哪里变了,那八成就是这种情况,同一个专区里的“清理粘贴过来的格式”会把这些字符一个一个点出来。

关于这个工具的问题

我的两段文字会被发到什么地方吗?

不会,而这正是这件工具存在的理由。在一个陌生网站上比对一份合同的两个版本,等于把合同的两个版本都交给了它。三十秒就能验证:按 F12 打开开发者工具,切到“网络”标签页,清空列表,然后粘上两段文字开始比对。一行都不会冒出来。把网断掉再做一遍。

为什么要分两步,不能在一个屏幕上做完?

因为本站工具页只渲染一个输入区,而我们不会为了一件工具去发明一个新组件。所以第二个框是工具自己放进结果区的,用的组件跟第一个一模一样。顺带一个好消息:您改设置的时候,第二个框里的内容会保留,永远不用粘第二遍。

表格说某一行变了,可我看不出差别。

几乎总是一个看不见的字符:一个不换行空格、一个从文字处理软件里带出来的弯撇号、一个从网页上粘来的零宽字符,或者另一种系统的换行符。工具没错,您的眼睛也没错。勾上“忽略空格上的差别”验证一下,再用同一个专区里的“清理粘贴过来的格式”:它会把这些字符连同编码一个一个点出来。

为什么被搬走的段落会出现两次?

因为工具不去猜搬动,这是一个选择。要认出这里删掉的一块就是那边加上的那一块,就得决定相隔很远的两段要像到什么程度才算“同一段”。对这个问题的任何回答都是武断的,而答错了就会盖住一处真正的改动。我们宁可把删和加都显示出来:您看出这是搬动,比我们猜出来要快。

能直接比两个文件,而不是粘两段文字吗?

不能直接比,但把文件打开、把内容粘过来就是一回事。我们没有在这里放文件拖放区,是因为一件工具同时要两种不同性质的输入,用起来会让人糊涂,而文字两下就粘好了。文件特别大的话,请一节一节地比:工具的上限落在行数的乘积上,页面上方有说明。