PDF 標註
在 Potato 中使用 pdf 顯示類型標註 PDF,涵蓋片段高亮、頁面上的邊界框、跨頁連線,以及用於掃描件的 OCR。
pdf 顯示類型用 PDF.js 在瀏覽器中渲染 PDF,並把標註層放在渲染後的頁面上,而不是放在事先抽取出來的文本上。標註者看到的是真實文件,分欄、表格、插圖和分頁都原樣保留,並直接在原處打標籤。該顯示類型只需要一個必填鍵,即儲存 PDF 路徑或 URL 的欄位,其餘都是顯示選項。
instance_display:
fields:
- key: pdf
type: pdf
label: "Document"
display_options:
view_mode: scroll
max_height: 760
zoom: page-widthview_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 名稱下。
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 會拒絕其他任何取值。
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_mode | scroll | scroll、paginated 或 side-by-side |
max_height | 700 | 容器高度,單位畫素 |
max_width | 無 | 容器寬度 |
text_layer | true | 啟用文本選擇 |
show_page_controls | true | 頁面導航控制元件 |
initial_page | 1 | 首先顯示的頁面 |
zoom | auto | auto、page-fit、page-width 或百分比 |
annotation_mode | span | span、bounding_box 或 link |
bbox_min_size | 10 | 可接受的最小框,單位畫素 |
bbox_colors | 無 | 按標籤區分的框顏色 |
show_bbox_labels | true | 在框上繪製標籤 |
thumbnail_sidebar | true | 分頁檢視中的頁面縮圖 |
enable_text_anchors | true | 文本片段可用作連線錨點 |
enable_region_anchors | true | 區域框可用作連線錨點 |
anchor_schema | pdf_anchors | 記錄在錨點上的 schema |
link_schema | pdf_links | 記錄在連線上的 schema |
ocr | false | false、true 或 auto |
ocr_dpi | 200 | OCR 渲染解析度 |
ocr_lang | eng | Tesseract 語言程式碼 |
Word 與 Markdown 檔案
DOCX 或 Markdown 檔案改用 document 顯示類型,它保留文件的標題與段落結構,並且確實接受 span_target。它讀取取值為 span 或 bounding_box 的 annotation_mode,而 show_outline 會依據正文中的標題生成目錄。Potato 會先把渲染出的標記過一遍允許列表,然後才交給標註者,因此語料欄位中帶有可執行標籤的內容會被剝離而不是被執行。
instance_display:
fields:
- key: report
type: document
label: "Report"
display_options:
show_outline: true
max_height: 600