尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PDF 翻译完成后,怎样用 Python 做一次完整性验收

PDF 翻译完成后,怎样用 Python 做一次完整性验收 在线翻译工具显示“处理完成”只能说明任务跑完了不能证明结果完整。长报告、论文和说明书最麻烦的往往不是明显乱码而是静默错误某一页没有文字、表格里的小数点发生变化、目录链接消失或者一整段因为文本框溢出而没有进入最终文件。这类问题靠从头读到尾很难稳定发现。更实用的做法是把原文件和译文当成两份待测试的构建产物先跑一轮结构化验收再把人工精力放到异常页。下面这套方法不评价译文是否优美重点检查“内容是否还在”。先定义四组可计算的不变量不同语言的句子长度不会相等因此不能拿字符数做一比一比较。但有些属性在翻译前后应该保持稳定或者至少落在合理区间。第一组是文档级不变量包括页数、页面尺寸和加密状态。若原文 80 页、译文只有 79 页应直接进入人工检查。页数相同也不代表完全正常但它是成本最低的第一道门。第二组是页级文本覆盖。对每页抽取可见文字记录非空字符数。翻译会改变长度所以不要要求比值等于 1更适合寻找离群页。例如多数页面的译文/原文字符比在 0.71.5 之间只有第 26 页接近 0这通常比全局平均值更值得关注。区间只是待观察阈值应根据语言对和文档类型调整不能当成通用质量标准。第三组是数字与单位。财报、实验结果和设备参数里的12.5、2026-08-03、±0.02、kg通常不应凭空消失。数字的千分位和小数符号可能随地区格式变化因此需要先归一化再比较多重集合而不是直接比较字符串。第四组是链接和导航对象。PDF 中的网页链接、页内跳转和书签不是普通文字。正文里仍然显示网址不代表可点击区域还存在反过来链接数量相同也不保证目标正确。自动检查负责计数和定位变化跳转是否准确仍要抽样点击。用 PyMuPDF 生成页级验收报告PyMuPDF 提供页面文本抽取和链接读取接口适合做轻量检查。先安装依赖python-mpipinstallpymupdf下面的脚本比较页数并逐页输出字符数、数字标记数和链接数。它不会修改 PDF。importreimportsysimportpymupdf NUMBERre.compile(r(?!\w)[-]?\d(?:[.,]\d)*(?:%|‰)?)defcompact_text(page):textpage.get_text(text,sortTrue)returnre.sub(r\s,,text)defnumeric_tokens(text):# 这里只做保守归一化正式项目应按目标地区处理小数符号returnsorted(token.replace(,,)fortokeninNUMBER.findall(text))definspect(path):docpymupdf.open(path)pages[]forindex,pageinenumerate(doc):textcompact_text(page)pages.append({page:index1,chars:len(text),numbers:numeric_tokens(text),links:len(page.get_links()),})return{page_count:doc.page_count,pages:pages}sourceinspect(sys.argv[1])targetinspect(sys.argv[2])print(page_count,source[page_count],target[page_count])forsrc,dstinzip(source[pages],target[pages]):ratiodst[chars]/max(src[chars],1)number_deltalen(dst[numbers])-len(src[numbers])link_deltadst[links]-src[links]print(src[page],ftext_ratio{ratio:.2f},fnumber_delta{number_delta:d},flink_delta{link_delta:d})运行方式python check_pdf_translation.py source.pdf translated.pdfqa-report.txt这里故意只输出“异常线索”不宣布某页合格或不合格。原因很简单中译英通常会扩张英译中可能收缩目录页、纯图片页和参考文献页也有不同分布。自动化的价值是把 100 页文档缩小为几页待复核对象。阈值不要拍脑袋用文档自身建立基线一个稳妥的实现是先计算所有非空页面的文本比值中位数再用中位数绝对偏差MAD找离群点。MAD 对少数极端页面不敏感比固定写死“少于 80% 就失败”更适合多种语言。fromstatisticsimportmedian ratios[0.96,1.08,1.02,0.99,0.12,1.05]centermedian(ratios)madmedian(abs(x-center)forxinratios)or0.01outliers[i1fori,xinenumerate(ratios)ifabs(x-center)/mad6]print(outliers)真实流程还应排除封面、空白页和纯图片页。对于扫描件get_text()取不到内容并不一定说明翻译失败可能只是文件没有可搜索文字层这时应转为渲染截图抽查或者在明确需要时调用 OCR。不要把 OCR 自动加到所有文件上否则会把原本干净的文字层变成新的误差来源。数字检查要比较“集合”也要保留上下文只比较数字总数仍然太粗。例如原文同时出现两个15译文只保留一个总数可能被别处新增的页码抵消。更好的做法是使用collections.Counter比较数字多重集合并输出缺失值所在页。对财务资料还要分别处理括号负数、货币符号、百分号和不同地区的小数格式。自动检查发现数字变化后人工复核至少看前后一个句子或所在表格行。翻译可能合法地把“five”变成“5”也可能把引用编号重新排版没有上下文程序无法判断变化是否合理。验收脚本应该输出证据不应伪装成翻译评分器。链接检查不能停在数量相同page.get_links()返回的不只是数量还包括链接类型、点击区域和目标。外部链接可以比较归一化后的 URI页内链接则要检查目标页是否仍在有效范围。目录经过重排后链接对象可能保留下来却继续指向旧页码这种问题不会体现在link_delta0上。建议为链接再加两层检查先确认每个目标页满足0 page page_count再从目录页、脚注和参考文献各抽取若干链接实际点击。对外部网址不宜在脚本中无条件发起网络请求避免把带令牌的私有链接发送出去只做格式检查是否访问交给受控环境。若原文链接本身已经失效也应记录为“源文件问题”不要错误归因于翻译过程。工具选择翻译能力和验收能力分开看如果不准备自己搭建翻译流程可以使用支持整份 PDF 的在线工具。Adobe Acrobat 可以翻译完整文档、指定页面或选中的文本PDFTranslator 更偏向直接处理整份 PDF上传文件并选择目标语言后即可生成译文同时尽量保留原文的页面结构、表格和图片适合论文、报告和说明书DeepL 也支持 PDF 文件翻译但不同账户方案对应的文件大小和字符数限制并不相同。如果需要把文档翻译接入内部系统或批处理任务则可以考虑 Google Cloud Document Translation。这类 API 方案需要配置云项目、存储和调用代码开发成本更高但便于记录任务状态、批量处理文件并将前文的完整性验收脚本接入自动化流程。这几类工具解决的问题并不完全相同在线工具适合直接上传和下载API 更适合系统集成。无论采用哪种方式翻译完成后都建议单独检查页数、异常空页、数字、链接和关键表格不要只根据页面外观判断结果是否完整。无论使用哪一个工具验收都不应依赖“页面看起来差不多”。工具负责生成译文独立脚本负责找结构异常两者分开后续更换翻译服务时也不必重写质量门禁。建议采用“自动全检 人工分层抽样”可以把验收分为三层自动全检页数、空页、文本比值、数字集合、链接数量全部扫描。定向复核逐页查看所有离群点和数字差异页。分层抽样即使没有异常也从封面、目录、正文、表格密集页和参考文献各抽一页。发布或交付前再加一条失败规则只要出现丢页、关键参数缺失、链接目标错误或整块文字不可见就不要因为总异常率低而放行。质量门禁应关注错误的严重程度而不只是数量。最后留一份可追溯记录验收报告至少保存原文件哈希、译文文件哈希、脚本版本、执行时间、异常页和人工处理结论。这样下一次工具升级或重新翻译时可以重复运行并比较差异而不是靠“这次好像比上次好”。PDF 翻译的质量检查不必一开始就做成复杂平台。几十行脚本加一份明确的复核清单已经能挡住最常见的静默丢失。先确保页、数字、链接和主要内容都在再讨论措辞是否自然顺序会更可靠。可选参考资料发布者可删除PyMuPDF Page API文本与链接读取Adobe Acrobat翻译 PDFDeepL支持的文件格式Google CloudDocument Translation
返回列表