Skip to content

PDF アノテーション

Potato の pdf ディスプレイタイプで PDF をアノテーションする方法。スパンのハイライト、ページ上のバウンディングボックス、ページをまたぐリンク、スキャン文書向けの OCR を扱います。

pdf ディスプレイは PDF.js を使ってブラウザ上に PDF を描画し、アノテーション面をあらかじめ抽出したテキストではなく描画されたページの上に置きます。アノテーターは段組み、表、図版、改ページがそのまま残った実際の文書を見て、その場でラベルを付けます。このディスプレイが必須とするキーは 1 つだけで、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 を取ります。連続スクロールはすべてのページを 1 つのコンテナに積み上げるため、アノテーションが改ページをまたぐ必要がある場合に効いてきます。ページ送り表示はナビゲーション操作とともに一度に 1 ページを表示し、アノテーターがページごとに作業する長い文書に向いています。

3 つのアノテーションモード

annotation_mode はアノテーターが何を描けるかを決めるもので、見た目ではなくタスクそのものを変えるオプションです。既定値は span です。

モードアノテーターの操作アンカー先
spanテキストを選択してラベルを付けるPDF.js のテキストレイヤー
bounding_boxページ上の任意の位置にボックスを描くページ座標
linkアンカーを付けてから、それらをつなぐテキストスパンとページ領域

スパンモードは PDF がテキストレイヤーを持っていることを前提とします。ワープロや組版システムから生成された PDF には必ずありますが、スキャンにはありません。バウンディングボックスモードは前提としないので、スキャンしたページでもテキスト抽出をいっさい行わずに領域単位でラベルを付けられます。

pdf ディスプレイは、他のディスプレイが使う .text-content ラッパーではなく PDF.js のテキストレイヤーを介してスパンをアンカーするため、span_target フラグを受け付けません。スパンのアノテーション自体は、PDF 自身のテキストレイヤーを通して動作します。

ページをまたぐリンク

リンクモードは、2 ページ目の主張が 9 ページ目の図版に依拠している場合のように、ページをまたぐ関係を扱うためのものです。アノテーターはまずアンカーを付け、次にそのあいだに型付きのリンクを引きます。Potato はアンカーとリンクを別々のスキーマ名の下に記録します。

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 を設定してください。

アンカーには 2 種類あり、どちらも個別に無効化できます。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

3 つの設定の違いは、処理がいつ走るかにあります。false は埋め込みテキストレイヤーだけを使い、true は常に OCR を実行し、auto は埋め込みテキストレイヤーが空で返ってきたときにかぎって OCR に切り替えます。OCR は遅く、Tesseract のインストールが必要なので、混在したコーパスでは auto を選んでください。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アンカーに記録されるスキーマ
link_schemapdf_linksリンクに記録されるスキーマ
ocrfalsefalse、true、auto
ocr_dpi200OCR の描画解像度
ocr_langengTesseract の言語コード

Word ファイルと Markdown ファイル

DOCX や Markdown のファイルには代わりに document ディスプレイを使います。こちらは文書の見出しと段落の構造を保ち、span_target も受け付けます。annotation_mode は span または bounding_box を読み取り、show_outline は本文中の見出しから目次を組み立てます。Potato は描画されたマークアップをアノテーターに届く前に許可リストに通すので、実行可能なタグを含むコーパスフィールドは実行されずに取り除かれます。

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

さらに読む