返回结果
## บทที่ ๔ การค้าทางเรือ
ในสมัยนั้นเรือสำเภาจากเมืองจีนเข้ามาจอดที่ปากน้ำ
เป็นประจำทุกฤดูลมมรสุม บรรทุกสินค้าจำพวกผ้าไหม
เครื่องถ้วยชาม และเครื่องเทศ
> เชิงอรรถ ๑ ดูรายละเอียดในบทที่ ๗标题、正文和脚注保持区分。章节结构会随文字一起进入后续的存储系统。
# ข่าวประจำสัปดาห์
## การประชุมสภา
ที่ประชุมมีมติรับหลักการในวาระที่หนึ่ง
## ราคาสินค้าเกษตร
| สินค้า | ราคา/ตัน |
| --- | ---: |
| ข้าวเปลือก | ๙,๘๐๐ |各栏按阅读顺序读取,读完一栏再读下一栏,价格表仍是表格。
heading ทะเบียนรับหนังสือ พ.ศ. ๒๕๐๘
table 28 rows x 5 columns
paragraph หมายเหตุ เล่มที่ ๓ ต่อจากเล่มที่ ๒画线的登记簿作为表格返回,各行完整无缺。正因如此,整批登记簿才值得建立索引。
上方的读取结果用于说明响应格式,并非从模型实际采集。OCR 页面提供模型对真实样本的实录读取结果,并注明采集日期。
一次任务如何进行
已数字化的馆藏,往往只完成了一半。书页拍了照,文件也妥善保存,却没有一个字能被搜索到。缺的是读取这一步,而对泰语来说,这一步一直最难买到。老旧泰文书页的扫描件上,文字纵向叠放,有些字母只靠一个小圈来区分,而这个小圈会在翻印中磨损。词与词之间也没有空格,帮不了阅读者复原文字。
分批发送页面
把每册书拆成多次请求,每次最多 50 页、10 MB。响应中各页分开,一个批次可以按顺序重新拼合。
保留图像
读取结果是扫描件旁边的一层文字,扫描件原地保留。保存仍靠图像,搜索、引用和再利用则转到文字上。
模型改进后重新读取
按页计费,最低只按一页计,所以对整批馆藏再读一遍,费用与第一遍相同。任务随时可以重做。
一次数字化任务的费用
| 工作量 | 页数 | 费用 |
|---|---|---|
| 一册书(320 页) | 320 | $2.08 |
| 一次请求,达到 50 页上限 | 50 | $0.33 |
| 50 册的批量任务 | 约 $104 | |
每页 6.5 积分,费用与页数成正比。一次任务在发送任何页面之前,就能按页数做好预算。
翻印带走了什么
ฅ ค ต ศ ด 35 位阅读者,观看模糊处理后的字形。 这几个字母彼此混淆。 区分它们的特征是小圈, 而现代泰文印刷以无圈字体为主。
这是一项关于人类辨识度的发现,出自一篇针对单个字符的同行评审研究。在此引用,是因为它指出了老旧书页扫描件最先丢失的特征。它与任何 OCR 系统的错误率无关。
面向开发者
每批页面一次请求。响应逐页返回,一册书无需您另做记录,就能按顺序重新拼合。
完整 API 参考# Encode without line wrapping: wrapped base64 breaks the JSON string. DOC=$(base64 < invoice.pdf | tr -d '\n') # --max-time covers a multi-page document; curl defaults to no limit. curl -X POST https://api.paxalabs.com/v1/ocr \ --max-time 300 \ -H "Authorization: Bearer $PAXA_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"document\": \"$DOC\", \"model\": \"paxa-ocr-lite-v1\"}"
import base64 import os import requests with open("invoice.pdf", "rb") as file: document = base64.b64encode(file.read()).decode() response = requests.post( "https://api.paxalabs.com/v1/ocr", headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"}, json={"document": document, "model": "paxa-ocr-lite-v1"}, # A multi-page document can run for minutes; give it room. timeout=300, ) response.raise_for_status() body = response.json() print(body["pages"][0]["markdown"], body["usage"]["credits"], "credits")
import { readFile } from "node:fs/promises"; const document = (await readFile("invoice.pdf")).toString("base64"); const response = await fetch("https://api.paxalabs.com/v1/ocr", { method: "POST", headers: { Authorization: `Bearer ${process.env.PAXA_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ document, model: "paxa-ocr-lite-v1" }), // A multi-page document can run for minutes; give it room. signal: AbortSignal.timeout(300_000), }); if (!response.ok) throw new Error(`OCR failed: ${response.status}`); const { pages, usage } = await response.json(); console.log(pages[0].markdown, `${usage.credits} credits`);
小圈是扫描件最先丢失的特征
有几个泰文字母主要靠起笔处的小圈来区分,而现代泰文印刷大多使用去掉了小圈的字体。在一项经同行评审的辨识度测试中,35 位阅读者看到模糊处理后的字形,恰恰把这几个字母彼此混淆。档案扫描件就是这个实验的意外重演:老化的纸张、不完美的墨迹,再加上对二者的拍摄。这就是泰语读取模型必须从一开始就围绕这种文字来构建的原因。
常见问题
读取老旧或退化的印刷品效果如何?
无论新旧印刷品,我们都不公布准确率数据,在实验室发布评测之前也不会公布。请用免费积分发送一批有代表性的、您手中最难读的页面,再对照您实际持有的原件来判断。
能处理多栏排版吗?
能。读取遵循阅读顺序,读完一栏再读下一栏。双栏期刊不会以交错的形式返回。
以后可以重新处理整批馆藏吗?
可以,费用不变。按页计费,每次请求最低只按一页计。对同一批书再读一遍,价格与第一遍完全相同。
老档案里的手写内容呢?
印刷页面是效果最好的情形。手写记录因书写者和年代不同而差异极大。在围绕它们做计划之前,请先用您自己的记录测试。
从免费积分开始
使用 Google、GitHub 或 Hugging Face 登录,即可用 100 一次性免费积分处理您自己的文本。