Potato 能逐行校对手写文本识别(HTR)结果,标注来自 IIIF 清单的手稿图像,在 TEI 版本中标记人名和地名,再把修正后的成果写回为 PAGE XML、IIIF 标注、W3C Web Annotation 或 TEI。Potato 免费开源,运行在你自己的服务器上。
大多数人文标注都从一轮自动处理或一个现有版本开始:来自 Transkribus 或 eScriptorium 的 HTR 输出、图书馆的 IIIF 清单,或一份 TEI 文件。剩下的工作要靠人完成,常常由学生、志愿者或项目团队分担。Potato 负责这一步:每个导入器根据源文件生成可运行的项目,源文件自带的标注作为预标注载入,由人确认或修正,每个导出器再以相同格式写回修正后的成果。
Potato 中的数字人文任务
每一行是由一对导入器和导出器支持的工作流,详见数字人文格式页面。
| 任务 | Potato 的做法 | 格式 |
|---|---|---|
| 校对 HTR 或 OCR 输出 | 每个文本行一个条目,从页面图像中裁出,在 text_edit 方案中修正,界面显示与机器识别结果的逐词差异 | 来自 Transkribus、eScriptorium 或 OCR-D 的 PAGE XML |
| 校正页面版面 | 每页一个条目,每个区域和文本行都是按区域类型标注的多边形 | PAGE XML(--page-xml-mode regions) |
| 标注手稿图像 | 每个 IIIF canvas 一个条目,已有标注显示为可编辑的形状 | IIIF Presentation 3 和 2.x 清单 |
| 在版本中标记实体 | <persName>、<placeName>、<orgName>、<date> 和 <rs> 变成可编辑的片段 | TEI P5 |
| 在查看器之间迁移标注 | 文本引文和图像区域以 W3C Web Annotation 形式保存 | Annotorious、Mirador、Hypothesis |
| 私下运行众包工作流 | Zooniverse 工作流转换为 Potato 方案,其分类结果可以作为已保存的工作导入 | Zooniverse 项目导出 |
校对来自 Transkribus 或 eScriptorium 的 HTR 输出
导入时读取 Transkribus 或 eScriptorium 的 PAGE XML 导出,在 XML 旁边或 --image-dir 中找到每页的图像,然后生成一个项目。标注者每次看到从页面上裁出的一行,识别出的文本已就位,可直接修正。
potato import -f page_xml -i transkribus-export/ -o htr-project
python potato/flask_server.py start htr-project/config.yaml -p 8000
python -m potato.export -c htr-project/config.yaml -f page_xml -o corrected/page_xml 导出直接修改项目中每个 PAGE XML 文件的副本,文件的其余部分保持不变,因此修正后的文件可以送回 HTR 工具,作为训练用的真值数据。如果识别器为某一行存储了置信度,条目会把它保存为 htr_confidence。
与 Transkribus、eScriptorium、Zooniverse 和 Recogito 的分工
Potato 不识别手写文字,也不训练 HTR 模型。这两件事 Transkribus 和 eScriptorium 都能做,Potato 负责校对它们的输出。Zooniverse 面向公众志愿者项目,上线前要经过审核;Potato 适合私下运行同样的工作流,处理未公开的材料,由实验室团队或付费转录者完成。Recogito Studio 面向 TEI、IIIF 图像和 PDF 的协作标注。Potato 额外提供的是把条目分配给具体的人、在项目需要第二意见时为每个条目分配多名标注者,以及对标注者答案计算一致性指标。
由于 Potato 运行在你自己的服务器上,档案图像和未发表的转录文本都留在你能控制的基础设施中。所有脚本、样式表和字体都由安装目录提供,详见气隙与离线部署。
常见问题
Potato 能逐行校对 Transkribus 或 eScriptorium 的输出吗?
能。potato import -f page_xml 按阅读顺序为每个 TextLine 生成一个条目,标注者在显示逐词差异的 text_edit 方案中,对照行图像修正识别出的文本。page_xml 导出把修正写回源文件的副本。2013-07-15 和 2019-07-15 两个版本的 PAGE schema 都能读取。
能让几名志愿者转录同一批页面,并看到他们的分歧在哪里吗?
能。num_annotators_per_item 决定每一行或每一页由多少人查看,每个人的答案分别存储。Potato 2.13.1 不为校正后的转录计算一致性指标,JSONL 导出给出每个人对每一行的文本,可供比较。对于标注的人名和地名,裁定与分歧处理说明了如何审查标注者有分歧的条目,并记录最终版本。
能从 IIIF 清单加载图像,而不是上传文件吗?
能。potato import -f iiif 接受清单文件或 http(s) URL,每个 canvas 成为一个条目,图像取自该 canvas 的图像或其 Image 服务。iiif_annotations 导出写出标注页面,以及一份引用这些页面的清单副本,Mirador 和 Universal Viewer 都能打开。
Potato 和在 Zooniverse 上运行项目有什么不同?
Zooniverse 托管公开项目,并为这些项目招募志愿者。Potato 运行在你自己的服务器上,因此适合不能公开的材料或封闭的标注团队。potato import 能读取 Zooniverse 项目的工作流、subject 和分类导出,已有工作流可以迁移过来,不过问卷和转录任务不会被导入。