從 PDF 複製出來的文字,為什麼總是亂的?
你在 PDF 裡找到一段有用的內容,想放進筆記、留給同事,或拿來作為接下來提問的材料。選取、複製、貼上,看起來只需要幾秒鐘。
但貼上之後,一句話被拆成好幾行,英文單字從中間斷開,正文裡還混進了頁碼。原本只想摘下一段話,現在卻得一直按退格鍵。
如果文字順序沒錯,只是每一行都被拆開,可以先合併段落內的單獨換行,保留段落之間的空行。 標題、清單和行末連字號需要分開檢查;如果左右兩欄的句子已經交錯,先處理複製順序,不要直接刪除換行。
頁面上的一行,不一定是文字裡的一個段落
在 PDF 頁面上,一句話寫到右邊界就會換行。但這個視覺上的斷行可能只是受到紙張或欄寬限制,並不代表作者準備另起一段。
複製時,閱讀器需要把頁面上的文字重新組織成文字流,卻不一定能分清這兩種換行。pdfminer.six 的文字擷取說明介紹了如何根據字元位置和距離,把內容組合成文字行與文字區塊。頁面上看起來連在一起的內容,複製後仍可能被拆開。
下面用幾個簡單例子,看看可以怎麼處理。
把句子接起來,也把段落留下
先看一種相對適合整理的情況:每段話被拆成兩行,但段落之間還留著空行。
待整理文字:
We copied a paragraph
from the report into our notes.
The original page remains available
for checking names and numbers.可以把上面的文字放進 iSomor 文字格式整理,依照以下三步處理:
- 貼上文字。 先選一小段放入「原始內容」,段落之間的空行也一起保留。
- 選擇選項並整理。 勾選「合併單獨換行」和「規範空格」,先不要勾選「接合行末斷開的單字」,再按「整理文字」。
- 檢查後帶走結果。 對照兩邊內容,確認段落和單字沒有接錯,再複製文字或下載 TXT。
工具輸出:
We copied a paragraph from the report into our notes.
The original page remains available for checking names and numbers.句子中間的斷行合併了,兩段話之間的分隔仍然保留。英文單字之間也留下空格,不會讓 paragraph 和 from 黏在一起。
這個例子裡,段內是單獨換行,段間是空行。如果複製後段落之間也只剩一個換行,可以先對照原文補上空行,再進行整理。
行末的連字號,不能一律刪掉
英文文件裡,單字可能因為排版在行末被拆開。例如:
The trans-
lation is ready for review.這裡的 trans- 和下一行的 lation 原本是同一個單字。開啟「接合行末斷開的單字」後,工具會輸出:
The translation is ready for review.但外觀看起來相似,不一定代表處理方式相同。再看一段原本使用 cross-validation 的文字:
We used cross-
validation to compare the models.同樣開啟斷字接合後,實際輸出會是:
We used crossvalidation to compare the models.換行消失了,但原本有意義的連字號也被刪掉。這裡應保留 cross-validation。
所以,可以先關閉斷字接合,確認確實是排版拆開的單字後再使用。如果材料裡還有複合詞或型號,先整理一般換行,再逐處檢查連字號會更穩妥。
標題和清單,需要留一點空間
並不是每個單獨佔一行的內容,都應該和下一行接起來。
例如下面這段文字,第一行是標題,接下來是說明和一份清單:
準備材料
先保留原始 PDF。
- 核對姓名
- 核對日期
- 核對金額開啟「合併單獨換行」和「規範空格」後,工具實際輸出為:
準備材料先保留原始 PDF。
- 核對姓名
- 核對日期
- 核對金額帶有 - 標記的清單保留下來了,但標題和正文合併了。「準備材料」變成純文字後,沒有字級或粗體資訊,只靠一個換行很難看出它是標題。
處理這種材料時,可以先在標題後補一個空行,再進行整理。用同樣的選項重新測試,得到:
準備材料
先保留原始 PDF。
- 核對姓名
- 核對日期
- 核對金額補上空行,標題和正文就分開了。遇到更複雜的巢狀清單、表格或公式,建議單獨保留,不要和一般段落一起批次合併。
順序已經錯了,先別急著整理換行
如果左欄的句子後面接上了右欄內容,或頁碼夾在一句話中間,刪掉換行也不能把順序改對。可以先回到複製這一步處理:
- 兩欄交錯: 嘗試按單欄或小段重新選取、複製,並檢查貼上的順序;如果閱讀器仍把兩欄混在一起,再換一種擷取方式。
- 混入頁首、頁尾或頁碼: 對照頁面確認後,只刪除這些混入的部分。不要批次刪除所有單獨成行的數字,它也可能是正文編號或資料。
- 表格變成一串文字: 先核對表頭、單位和行列對應關係,再決定是否適合放進純文字筆記。空格變少,不代表表格恢復了。
- 複製後變成亂碼: 需要另外檢查文字層或字型編碼,格式整理不能修正這些字元。
- 掃描圖片沒有可複製文字: 需要先用 OCR 辨識。已有的 OCR 文字層也可能有辨識錯誤,不能把「能複製」當成「文字準確」。pypdf 的文件區分了原生文字 PDF、純掃描 PDF 和經過 OCR 的 PDF,這幾種檔案的文字來源並不相同。
使用複製結果前,再看這幾處
整理完一小段後,重點看一眼容易變化的位置:
- 每段開頭和結尾有沒有接錯;
- 英文單字是否黏在一起,有意義的連字號是否還在;
- 標題和清單是否仍然分開;
- 數字、單位、負號和公式符號有沒有缺失或錯位。
如果段落含有中文標點,也可以掃一遍標點附近。我們測試時,逗號後的換行合併後留下了一個空格,需要手動清理。先確認這一小段的處理方式合適,再套用到類似內容。
如果要把這段話當作引用,記得保留文件名稱、頁碼或連結,並確認文字與出處一致。
整理好,是為了接著做原本的事
文字格式整理的用途,是替你少刪一些重複換行、少處理一些多餘空格,而不是把所有內容壓成一段。正文接起來,標題和清單仍然分開,整理後的文字才方便繼續使用。
iSomor 把原始內容和結果放在一起,方便你看清楚變化。檢查好之後,就可以接著做筆記、摘錄和討論,把注意力放回原本想使用的那段內容。