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