Skip to content

PDF 標註

在 Potato 中使用 pdf 顯示類型標註 PDF,涵蓋片段高亮、頁面上的邊界框、跨頁連線,以及用於掃描件的 OCR。

pdf 顯示類型用 PDF.js 在瀏覽器中渲染 PDF,並把標註層放在渲染後的頁面上,而不是放在事先抽取出來的文本上。標註者看到的是真實文件,分欄、表格、插圖和分頁都原樣保留,並直接在原處打標籤。該顯示類型只需要一個必填鍵,即儲存 PDF 路徑或 URL 的欄位,其餘都是顯示選項。

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        view_mode: scroll
        max_height: 760
        zoom: page-width

view_mode 接受 scroll、paginated 或 side-by-side。連續滾動把所有頁面堆疊在一個容器裡,當某條標註需要跨越分頁時這一點很關鍵。分頁檢視一次顯示一頁並帶有導航控制元件,適合標註者逐頁處理的長文件。

三種標註模式

annotation_mode 決定標註者能畫什麼,它改變的是任務本身而不是外觀。預設值是 span。

模式標註者的操作錨定在
span選中文本並施加標籤PDF.js 的文本層
bounding_box在頁面任意位置畫框頁面座標
link先標出錨點,再把它們連起來文本片段與頁面區域

片段模式依賴 PDF 自帶文本層。由文書處理軟體或排版系統生成的 PDF 都有文本層,掃描件則沒有。邊界框模式不依賴文本層,因此掃描頁仍可按區域打標籤,完全不需要抽取文本。

由於 pdf 顯示類型通過 PDF.js 的文本層來錨定片段,而不是通過其他顯示類型使用的 .text-content 包裝器,它不接受 span_target 標誌。片段標註照樣可用,走的是 PDF 自身的文本層。

跨頁連線

連線模式用於跨頁的關係,例如第 2 頁上的一個論斷依據第 9 頁上的一幅插圖。標註者先標出錨點,再在錨點之間畫出帶類型的連線,Potato 會把錨點和連線記錄在不同的 schema 名稱下。

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        enable_text_anchors: true
        enable_region_anchors: true
        anchor_schema: pdf_anchors
        link_schema: pdf_links
        anchor_labels:
          - name: claim
            color: "#dc2626"
          - name: figure
            color: "#2563eb"
        link_types:
          - name: refers_to
            directed: true
            color: "#dc2626"
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]

allowed_source_labels 和 allowed_target_labels 限制某種連線類型可以連線哪些錨點,標註規範因此變成介面強制執行的規則,而不是標註者必須記住的規則。按上面方式配置的 refers_to 連線只能從 claim 出發、只能落在 figure 上,所以從插圖反向連回論斷的連線會被拒絕。對於 same_as 這類對稱關係,設定 directed: false。

錨點分兩種,兩種都可以單獨關閉。enable_text_anchors 允許高亮一個文本片段,enable_region_anchors 允許畫出區域框,插圖或表格需要的正是後者。上游在 examples/advanced/pdf-link-scroll/ 提供了一個完整的示例。

掃描文件與 OCR

ocr 預設關閉,且 Potato 只在連線模式下讀取它。一旦設定,詞語會在服務端被抽取出來,用於構建客戶端文本層,於是沒有嵌入文本的掃描件也能承載文本錨點。該選項接受 false、true 或 auto,Potato 會拒絕其他任何取值。

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      display_options:
        annotation_mode: link
        ocr: auto
        ocr_dpi: 200
        ocr_lang: eng

三種設定的差別在於這一遍處理何時執行。false 只使用嵌入的文本層,true 始終執行 OCR,auto 只在嵌入文本層返回為空時才退回到 OCR。混合語料建議用 auto,因為 OCR 很慢,還需要安裝 Tesseract。ocr_dpi 控制 OCR 讀取前每一頁被柵格化的解析度,調高它會讓每一頁都多花時間。ocr_lang 接受 Tesseract 語言程式碼,預設為 eng。

顯示選項

選項預設值作用
view_modescrollscroll、paginated 或 side-by-side
max_height700容器高度,單位畫素
max_width無容器寬度
text_layertrue啟用文本選擇
show_page_controlstrue頁面導航控制元件
initial_page1首先顯示的頁面
zoomautoauto、page-fit、page-width 或百分比
annotation_modespanspan、bounding_box 或 link
bbox_min_size10可接受的最小框,單位畫素
bbox_colors無按標籤區分的框顏色
show_bbox_labelstrue在框上繪製標籤
thumbnail_sidebartrue分頁檢視中的頁面縮圖
enable_text_anchorstrue文本片段可用作連線錨點
enable_region_anchorstrue區域框可用作連線錨點
anchor_schemapdf_anchors記錄在錨點上的 schema
link_schemapdf_links記錄在連線上的 schema
ocrfalsefalse、true 或 auto
ocr_dpi200OCR 渲染解析度
ocr_langengTesseract 語言程式碼

Word 與 Markdown 檔案

DOCX 或 Markdown 檔案改用 document 顯示類型,它保留文件的標題與段落結構,並且確實接受 span_target。它讀取取值為 span 或 bounding_box 的 annotation_mode,而 show_outline 會依據正文中的標題生成目錄。Potato 會先把渲染出的標記過一遍允許列表,然後才交給標註者,因此語料欄位中帶有可執行標籤的內容會被剝離而不是被執行。

yaml
instance_display:
  fields:
    - key: report
      type: document
      label: "Report"
      display_options:
        show_outline: true
        max_height: 600

延伸閱讀