Files
hermes-skills/skills/legal/contract-reviewer/references/wb-ins-font-verify-false-positive.md
T

3.1 KiB

wb-ins-font-verify.py 误报场景与处理

场景:混合内容段落的参考run匹配偏差

触发条件

当段落同时包含数字/英文前缀和中文正文时,脚本的"首个非trivial原文run"匹配策略可能选错参考run。

实例(2026-06-26 朱家角可降解环保袋服务合同)

P79 段落结构:

原文run: "7.2"        → hint=None   (数字前缀)
原文run: "因火灾..."   → hint=eastAsia
原文run: "10"         → hint=eastAsia
原文run: "内"         → hint=eastAsia
原文run: "提交政府..." → hint=eastAsia
WB INS:  "日"         → hint=eastAsia  ← 插入在中文文本中间

脚本匹配到第一个非trivial原文run "7.2"(hint=None),判定WB INS "日"(hint=eastAsia)为HINT MISMATCH。

实际:"日"插入在中文文本中间,相邻run均为hint=eastAsia,格式完全正确。

判断方法

wb-ins-font-verify.py报告HINT MISMATCH时,做以下三件事:

  1. 检查段落结构:该段落是否同时包含数字/英文前缀和中文正文?
  2. 检查相邻run:WB INS的相邻原文run(前后各一个)的hint值是什么?
  3. 判断:如果相邻原文run的hint与WB INS一致,则为脚本误报——WB INS的hint与周围中文文本一致是正确的。

不适用场景

以下情况NOT误报,需作为真实格式问题处理:

  • 所有原文run的hint一致(如全部为eastAsia),但WB INS的hint不同
  • 新增段落(无原文run可比),WB INS缺hint
  • 同一段落内所有原文run字体一致,WB INS字体不同

场景二:段落内原文run属性混合(ea=None vs ea=仿宋)

触发条件(2026-06-29 卫生信息平台运维合同)

当段落由多个来源的文本拼接(如合同模板+填充内容),原文run的eastAsia/ascii/sz属性可能不一致:

原文run[ea=None sz=None]:  "为了保障上海市青浦区..."  (模板标题部分)
原文run[ea=None sz=None]:  "维管理"
原文run[ea=仿宋 sz=21]:    "服务外包的形式组织各"    (正文部分)
原文run[ea=仿宋 sz=21]:    "运维服务方"
del[WB]: 针
ins[WB][ea=仿宋 sz=21]:   面                        ← 插入在仿宋文本中间
原文run[ea=仿宋 sz=21]:    ",对上海市..."

脚本匹配到第一个非trivial原文run(ea=None sz=None),判定WB INS(ea=仿宋 sz=21)为EASTASIA/SZ MISMATCH。

实际:WB INS与相邻的仿宋run完全一致,格式正确。段落前半部分ea=None是因为那些run继承默认样式,不代表段落整体字体是None。

判断方法

当脚本报告EASTASIA/ASCII/SZ MISMATCH时:

  1. 检查段落全部原文run的属性:是否部分run有显式属性、部分没有?
  2. 定位WB INS的相邻run:前后各一个原文run的属性是什么?
  3. 判断:如果WB INS与相邻run一致,则为误报——脚本选了错误的参考run。

结论

脚本的"首个非trivial原文run"匹配策略在属性混合段落中可能产生误报。reviewer复核时需结合段落结构和相邻run上下文判断,不可盲信脚本输出。