ByteScope

Word Compare

沒裝 Office 也能比 docx 差異:拖進兩個 `.docx`,新增和刪除的文字依段落、依字詞用紅線標出來,檔案不會離開你的瀏覽器。

檔案不會離開你的瀏覽器 — 全部在本機處理。

原稿(A)

把原稿 .docx 拖到這裡

也可以點一下選檔。檔案只在這個分頁裡讀取,不會上傳。

修改後(B)

把修改後的 .docx 拖到這裡

也可以點一下選檔。檔案只在這個分頁裡讀取,不會上傳。

追蹤修訂

兩個檔案一起套用。「全部接受後」是把所有修訂都接受之後的文字;「全部拒絕後」是修訂之前的原本寫法。

限制

  • 只比文字,不比格式、圖片、圖表、欄位計算結果,也不比清單編號(自動編號是 Word 算出來的,不在文字裡)。
  • 「全部接受後」和「全部拒絕後」是本工具依檔案 XML 推算的結果;巢狀修訂(修訂裡面又有修訂)可能跟 Word 不一樣。
  • 段落記號被刪除時,這裡不會把兩段合併:就算追蹤修訂把兩段併成一段,兩種檢視都還是顯示成兩段。
  • 一整塊連續變動的段落裡,刪除和新增的段落要有一半以上的字詞相同,才會配成一段「修改」;其他的維持「刪除」或「新增」。如果這塊的可能配對(刪除段數 × 新增段數)超過 2,500 組,就改成依順序兩兩配對,這時插入的段落可能會顯示成「修改」。
  • 一段修改如果要動超過 5,000 個字詞,就不逐字標出,直接顯示成整段替換。在上面的相似度配對裡,這種段落會被當成不相似,所以會拆成一段「刪除」加一段「新增」;在依順序配對的區塊裡,則是一段整段換掉的「修改」。
  • 比對順序:本文(表格在原位置,每格一段)→ 頁首頁尾 → 註腳 → 章節附註 → 文字方塊。
  • 不比對註解。隱藏文字照樣當成一般文字比對。
  • 輸出的是報告,不會產生帶追蹤修訂的 .docx,目前也還沒有 HTML 報告。

關於這個工具

來回改了四版的合約、編輯改完退回來的稿子、出了新版卻沒附修改說明的辦法——而且沒有人開追蹤修訂。把兩個 .docx 拖進來,就在頁面裡打開並比對:紅線檢視裡刪除畫刪除線、新增畫底線,各自還帶一個圖示,不靠顏色也看得出來;摘要列出新增、刪除、變更的段落數和字數差;結果可以匯出 Markdown 或 JSON。段落照文件順序比:先是本文(表格留在原位,每一格算一段,標上第幾個表格第幾列第幾格),接著頁首頁尾、註腳尾註,最後是文字方塊。

兩份文件都不會離開你的瀏覽器。在自己電腦上比合約的意義,就是合約留在自己電腦上:兩個檔案從你的磁碟讀進來,在你電腦上的 Web Worker 裡解開、比對,頁面沒有上傳端點,回報的只有「跑了一次比對、成功與否、用的是哪個修訂檢視」——沒有檔名,也沒有任何一行內文。

先比段落,再比字詞

diff 分兩層跑。第一層把兩份文件的段落序列用 Myers diff 對齊,找出新增、刪除、變更的段落,這樣插入一段之後,後面的段落不會全部被報成不同。第二層只在變更過的段落裡再比一次,細到字詞。拉丁文字依空白和標點切;中文、日文沒有空白,所以逐字比;中英夾雜的段落會分成一段一段,各用各的方式處理。空白、全形/半形、大小寫預設都嚴格比對,各有一個獨立的「忽略」選項。

追蹤修訂:比接受後,還是拒絕後

只要其中一份文件還有沒處理的追蹤修訂,比對就得先決定要拿它的哪個版本。預設兩個檔案都用「全部接受後」的內容比——插入算進去、刪除拿掉;一個開關可以把兩邊同時切成「全部拒絕後」,也就是修訂之前的原文。任一邊帶有修訂時,結果最上方會提醒,並分別列出兩邊有幾段受影響。接受後和拒絕後的文字是從文件的 XML 推算出來的:修訂裡面又包著修訂時以最內層為準,可能跟 Word 的結果不同;只改格式的修訂不算文字變更。

不比什麼

只比文字。粗體、字型、段落樣式、圖片、圖表、註解都不在範圍內;自動編號清單的號碼也不比,因為那些數字是 Word 顯示時算出來的,沒有存成文字。追蹤修訂裡刪掉段落標記的情況,這裡不會把兩段合併,所以段落邊界可能跟 Word 不一樣。輸出的是報告——螢幕上的紅線、可以帶走的 Markdown 或 JSON——不會產生一份寫入追蹤修訂的 .docx。

常見問題

我的文件會被上傳嗎?

不會。兩個 .docx 都從你的磁碟讀進來,在頁面裡的 Web Worker 解開、抽出文字、比對。沒有伺服器看得到內容,關掉分頁就什麼都不留。匿名的使用事件只記「跑了一次比對、成功與否、用的是接受後還是拒絕後的檢視」。

沒裝 Word 或 Office,也能比對兩個 Word 文件嗎?

可以,這一頁就是為此而做。它直接讀 .docx 封裝,什麼都不用安裝,Mac、Linux 桌機、Chromebook 上都一樣能用。檔案必須是 .docx;舊版二進位的 .doc 和加密的文件不支援。

對方傳來的檔案裡還留著追蹤修訂,比的是哪個版本?

預設是兩個檔案都「全部接受」之後的版本——插入保留、刪除拿掉。一個開關可以改成兩邊都用「全部拒絕」後的版本,也就是修訂前的原文。只要任一邊還帶著修訂,結果最上方就會提醒並寫出影響了幾段,讓你知道比對結果取決於這個選擇。

可以產生一份把差異寫成追蹤修訂的 Word 檔嗎?

不行。結果是報告:螢幕上的紅線,加上 Markdown 和 JSON 匯出。刻意不寫出帶修訂標記的新 .docx,所以你比對的檔案不會被改動,下載下來的東西也不會被誤認成其中一份文件。

中文或日文的內容是怎麼比的?

逐字比。拉丁文字的字詞層 diff 用空白和標點切詞,但中文、日文沒有空白,所以一個字就是一個單位——句子裡只改了一個字,標出來的就只有那一個字,不是整句。中英夾雜的段落會切成拉丁和中日文的區段,各自處理。

清單重新編號了,為什麼沒被標成變更?

因為號碼不在文件的文字裡。Word 是在排版時依清單定義算出號碼,.docx 只存段落和它指向的清單。比對看的是每個項目的文字,所以新增一個項目會顯示成新增一段,後面項目的重新編號則完全不會出現。

表格、頁首、註腳會出現在結果的哪裡?

順序是固定的:先本文(表格留在原位,每一格算一段,標上它來自第幾個表格第幾列第幾格),再來頁首頁尾,然後註腳尾註,最後文字方塊。註解不包含在內。兩個檔案用同一套順序,所以左右兩邊不會對不上。

只是一個空白或全形字元變了也算差異,可以忽略嗎?

可以。空白、全形/半形、大小寫各有一個忽略選項,預設全部關閉,第一次跑就是檔案裡原原本本的內容。把對你的文件來說是雜訊的那幾項打開,再比一次就好。