PAGE-XML是OCR后结构化XML的最优选,因其兼容性最好、工具链最全,支持多栏表格图文混排及印刷级定位;ALTO适用于欧洲数字图书馆,TEI适合语义标注但OCR直出弱。

OCR识别后XML结构怎么选:tei、alto还是page
扫描PDF本身不含文字层,必须先用OCR提取文本和版面信息,再映射为结构化XML。主流选择有三种:TEI(人文文献通用)、ALTO(图书馆元数据强,含精确坐标)、PAGE-XML(DARPA/ICDAR推荐,支持多栏、表格、图文混排)。如果你要保留行高、字间距、基线位置等印刷级定位信息,PAGE-XML 是目前兼容性最好、工具链最全的格式;ALTO 在欧洲数字图书馆项目中更常见;TEI 适合后期做语义标注,但OCR直出支持弱。
用Tesseract + pagexml输出PAGE-XML的实操要点
Tesseract 4.1+ 原生支持 --psm 模式识别和 --oem 引擎切换,但默认不生成 PAGE-XML。需配合 tesseract 的 hocr 中间格式再转换,或直接用封装工具:
- 推荐用
ocrmypdf(Python库),它底层调用 Tesseract 并自动输出符合规范的PAGE-XML:ocrmypdf --output-type pdfa --sidecar output.page.xml input.pdf output.pdf
- 若只要XML不重制PDF,加
--skip-text参数跳过文字层嵌入,避免PDF体积暴增 -
hocr转PAGE-XML容易丢表格线框和图文关系,别用hocr2pdf类工具直转 - 中文识别务必指定语言包:
tesseract input.png stdout -l chi_sim+eng --psm 6,--psm 6对单栏印刷体最稳,--psm 1(自动检测)在复杂版面下常错分段落
扫描质量差时XML坐标错位的常见原因
PAGE-XML 里每个 TextLine 和 Word 都带 coords 属性,但坐标偏移往往不是OCR引擎问题,而是输入图像预处理不到位:
- 扫描图未去黑边/摩尔纹 → OCR定位框整体偏移,建议用
unpaper预处理:unpaper --no-border --no-blank --no-grayfilter input.pdf output.pdf
- DPI低于300 → 字符粘连,Tesseract 把两个字识别成一个,
Word坐标覆盖过宽;必须重扫或用ImageMagick放大并锐化:magick input.png -resample 300 -sharpen 0x1 output.png
- 倾斜超过±0.5° → 行坐标变成斜向矩形,PAGE-XML 解析器可能报
Invalid coordinates: y0 > y1;用pdf2image提取图像后先跑skew_correction再送OCR
XML验证与后续处理避坑提示
生成的 .page.xml 文件未必符合官方XSD(如 http://www.primaresearch.org/schema/PAGE/gts/pagecontent/2019-07-15/pagecontent.xsd),尤其当使用非标准OCR后端时:
- 用
xmlschemaPython库校验:python -m xmlschema validate --schema http://www.primaresearch.org/schema/PAGE/gts/pagecontent/2019-07-15/pagecontent.xsd output.page.xml
- 某些工具(如
calamari)要求Page元素必须含imageFilename属性,而ocrmypdf默认不写——需手动补或用sed注入 - 如果目标是喂给NLP pipeline,别直接解析XML里的
TextEquiv;有些OCR会把“1”(全角数字)误标为“1”,但坐标仍按原字符宽度算,导致下游对齐失败
真正麻烦的不是生成XML,而是让坐标、文字、样式三者严格对齐。哪怕只差1像素,下游做区域抽取或重建PDF时就可能漏字或叠字。










