阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
检查一份长译稿,只看前几页通常不够。封面和目录可能很整齐,后面的表格、扫描附件和公式页却是另一种问题。抽检的目的不是给人一种“看过了”的安心感,而是让不同风险类型都有机会被看到。
先分类,再抽样
先按页面内容划分样本池,例如正文、表格、扫描页。分类可以人工建立,也可以来自预检结果,但必须承认它可能有误。某一类数量很少,并不表示它不重要;只有一页签字或关键参数表时,反而可能值得直接全检。
下面给每类最多抽两页,固定随机种子以便复现。这只是合成例子采用的抽样数量,不是行业标准,更不意味着未抽中的页面没有问题。
可重现的分层抽样例子
import random
def choose_pages(groups, per_group=2, seed=17):
if per_group < 0:
raise ValueError("negative sample size")
rng = random.Random(seed)
picked = {}
for name in sorted(groups):
pages = sorted(set(groups[name]))
picked[name] = sorted(rng.sample(pages, min(per_group, len(pages))))
return picked
groups = {"body": [1, 2, 3, 4, 5], "table": [6, 7], "scan": [8]}
sample = choose_pages(groups)
assert sample == choose_pages(groups)
assert sample["scan"] == [8]
assert sample["table"] == [6, 7]
assert len(sample["body"]) == 2
assert choose_pages({"empty": []}) == {"empty": []}
try:
choose_pages(groups, -1)
except ValueError:
pass
else:
raise AssertionError("negative size must fail")
输入页码采用面向读者的从一开始编号。把它接到从零开始的 PDF 索引时,需要显式转换。还应记录输入列表:只有种子而没有同一批页面和同一排序规则,未必能复现原样本。跨运行环境要求严格重复时,直接保存最终页码清单更稳妥。
抽到页面之后检查什么
页面类型
重点检查
发现问题后的动作
正文
段落连续、否定与指代
扩展到相邻段落和同类页面
表格
行列对应、单位、数字
检查同一表格的全部相关页
扫描页
漏字、方向、识别噪声
回到原图判断输入质量
关键内容
名称、金额、参数或重要说明
按业务风险决定全检
不要只记录“通过/不通过”,还要记录缺陷类型。漏译和排版溢出可能需要完全不同的修复路线。如果发现某类系统性错误,继续随机抽几个样本通常不够,应回到该类型的处理规则。
抽样不自动产生准确率承诺
想用样本估计整体错误率,需要明确抽样设计、统计单位与误差假设。本文只是检查任务的编排方法,没有计算置信区间,也没有给出任何服务的真实质量数字。不能把“抽到的几页看起来没问题”改写成“整份文档完全没有错误”。
还应留一部分用于回归的固定难例。它们未必具有统计代表性,却能在规则更新后提醒你:以前修过的跨页表格或公式错误是否又出现了。
把验收清单带到产品评估里
使用
OmniDoc(产品入口)
的文档翻译入口时,可以准备一份包含不同页面类型的脱敏文件,并保留同一套抽检清单。这样比较的是你的真实交付要求,而不是只挑几张漂亮页面。抽检发现的疑点应回到原文核对,不能只凭译文流畅程度放行。
参考:
Python random
。
- 1 -
更新于 2026-10-08