ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

我把 40 页保险条款做成了一份「不赔清单」|TextIn xParse 实战

我把 40 页保险条款做成了一份「不赔清单」|TextIn xParse 实战 本文是 TextIn xParse「文档觉醒」AI 应用创新赛 · 赛道一实用价值赛道的参赛作品说明。 作品源码与在线链接见文末。全文含4 组对照实验 1 组反向实测数据全部可复现。一、起因一个几万块钱的教训先说一个很常见的场景。朋友给孩子买的百万医疗险孩子肺炎住院花了 1 万 8。出院理赔被拒了。理由不是这个病不赔而是——住院的医院是三级公立医院的特需部。条款原文写着在二级以上含二级公立医院的普通部不含特需、国际医疗部、外宾病房、干部病房、VIP病房……住院治疗的……他当时完全不知道普通部这三个字的存在。床位紧张的时候被安排到特需病房出院结算才发现整笔费用不在保障范围内。这件事让我意识到一个残酷的事实保险条款是国内少见的「人人都有、人人不懂、出事才后悔」的标准化文档。而且它的设计本身就在制造信息差——一份百万医疗险条款40 到 60 页责任免除20 到 30 条真正的坑不只藏在责任免除章节还散落在保险责任、给付比例、释义等各处一条关键限制可能就是赔 100%和赔 60%的差别。于是我想做一件事让机器替我把条款读一遍逐条列出什么情况下不赔并且告诉我这一条在第几页。二、先说实话我实测了AI 直读 PDF它其实能读对网上讲文档解析的文章套路都差不多先让大模型读一遍然后指出它读错了接着祭出解析器证明专业工具更强。我本来也准备这么写。所以我去做了实测——用 AI 直接读这 4 份条款 PDF不给任何结构化预处理让它数一数责任免除章节有多少条。结果是这样的文档原文真实条数AI 直读无预处理国寿如E康悦百万医疗C款2121 ✅太保团体百万医疗2022版2222 ✅它读对了。条数准确页码也对得上。所以我不打算编一个AI 少列了 3 条的故事来制造对比。在文本层完好的 PDF 上现代 AI 直读的阅读理解能力是够用的。这一点必须先说清楚。那问题出在哪问题在于能做一次对比和能做成一个产品是两件事。我的目标是做一个能批量跑、每次输出结构一致、可以直接被程序消费的工作台。在这个目标下AI 直读暴露出四个它本来就解决不了的问题——下面每一组我都做了实测。三、那问题出在哪四组实测测试素材4 份从保险公司官网公开渠道下载的真实条款共 115 页任何人都能复现。文档页数来源国寿如E康悦百万医疗保险C款利益条款10中国人寿官网太保个人百万医疗保险A款2023通用版56太保财险官网太保易享百万医疗H2021产品说明7太保寿险官网太保团体百万医疗保险2022版条款42太保健康官网调用方式很简单一个同步解析接口curl -X POST https://api.textin.com/api/v1/xparse/parse/sync \ -H x-ti-app-id: YOUR_APP_ID \ -H x-ti-secret-code: YOUR_SECRET_CODE \ -F filepolicy.pdf \ -F config{capabilities:{include_table_structure:true,title_tree:true}}实验 A章节定位——目录页会骗过纯文本方案这一组的做法是同一套章节定位逻辑分别喂入两路输入——一路是pypdf抽出来的扁平文本行一路是 xParse 的元素行。统计责任免除章节内的编号条目数。文档真值纯文本提取xParse国寿如E康悦C款2121 ✅21 ✅太保个人百万医疗A款3131 ✅31 ✅太保易享H20212323 ✅23 ✅太保团体百万医疗2022版220 ❌22 ✅合计977577%97100%第 4 份文档整章 0 条机制我查清楚了这份条款第一页是阅读指引目录目录里有这么一行等待期内本公司承担的责任有所不同请注意 …………… 2.3、2.4而目录里同时存在2.7 责任免除这样的条目。纯文本方案在扁平文本里找章节起点时目录页那一行后面紧跟着大量编号行密度比正文章节还高于是目录条目被误判成了章节起点真正的正文段落再也没被读到。图 1同一份文档里「责任免除」一共出现了 4 次。左边第 1 页目录里的条目红框会被纯文本方案误当作章节起点而真正的章节在第 8 页绿框。xParse 这边因为有完整的标题树title_tree在解析层就区分了这是目录页的一个条目和这是正文的章节标题完整取回 22 条。合计召回 77% → 100%。再次诚实说明这仍然不是文本层读不出字。只要肯加足够多启发式规则纯文本方案也能把这一章捞出来。这个实验真正说明的是——xParse 把标题 vs 目录条目的判断内建在了解析层不需要你为每份文档单独调规则。而现实中你要处理的是几十家保险公司、几十种排版。实验 B合并单元格表格——纯文本直接拍平条款里大量使用跨行合并的表格。取 04 号文档第 2 页的条款索引表做测试方案输出结果纯文本提取43 行扁平文本行列关系全丢1.1 对应哪段内容看不出来xParse带结构标记的 HTMLrowspan2等合并关系完整保留xParse 产出的原始片段tr td rowspan21.1/td td合同构成/td td本合同是投保人与本公司约定保险权利义务关系的协议包括本保险条款、/td /tr tr td/td td保险单及其他保险凭证、投保单及其他投保文件、合法有效的声明、批注、批单……/td /tr图 2左边是 xParse 的输出rowspan2等合并关系完整保留右边是纯文本提取的同一页变成 43 行扁平文本行列对应关系全丢。这个差别是决定性的保险金额表、给付比例表全是这种结构拍平之后数据就废了。而 AI 直读即便看懂了输出也只是一段自然语言描述不是能进程序的数据。实验 C图片输入——文本层方案直接归零真实世界里大量保单是扫描件很多人甚至是手机拍条款页面。我把 01 号条款的第 3 页包含第六条 责任免除标题及其后的免责条款渲染成图片模拟扫描件场景再跑一遍方案结果纯文本提取0 条对图片输入完全无输出xParse完整识别 6 条免责条款 全部关键数字识别出来的关键数字和文本层版本逐字一致保额 300 万 / 住院定额 200 元/日 / 年限额 5 万 给付比例 100% / 60% 年免赔额 1 万元图 3左边是作为图片输入的条款页面彩色框为 xParse 识别出的元素位置右边是 xParse 还原出的结构化文本含排版层级与页码标记。文本层工具对这张图没有任何输出。这一组是结构性差异、不是能力差异pypdf这类文本层工具对图片没有任何输出——不是读得不准是根本读不到。而 xParse 对图片和 PDF 走同一套接口返回同一套结构。实验 D输出稳定性——AI 直读能给你答案但给不了数据这一组不是跑分是我实际做产品时踩到的维度AI 直读TextIn xParse输出格式每次措辞、结构都可能不同固定 schema 的 JSON本次schema_version 1.4.0可否程序消费需再写一层解析直接喂给下游批量处理一份一份问成本高一个 API 调用可并发结果一致性换一次提问可能变同一文件结果稳定页码锚点靠模型自己写可能错元素级page_number字段我要做的是一个能自动生成报告的工作台不是一次性的问答。所以我需要的不是某一次读对而是每次都能读对、格式固定、能进流水线。这就是 TextIn xParse 在这个作品里的位置它不是在替代 AI 的阅读理解而是在给 AI 提供可靠的燃料。四、技术实现四步流水线核心思路是——把理解和提取分开。官方公开条款 PDF / 扫描件 / 拍照件 │ ▼ ① TextIn xParse 解析 标题树 表格结构 页码锚点 图片 OCR │ 产出 Markdown 元素级 JSON ▼ ② 通用化章节定位引擎 自适应四类条款编号体系 → 提取免责条款 / 理赔材料 / 关键数字 │ 产出 extract_summary.json ▼ ③ 三级风险分级 人工标注层 红线责任免除/ 黄线给付缩水/ 灰线易忽略条件 │ ▼ ④ 单文件网页工作台 index.html实际跑起来只有两条命令。下面是真实的执行记录API 密钥走环境变量不落盘图 9第 1 步批量调用 TextIn xParse。四份条款共 115 页全部解析成功。图 10第 2 步结构化提取 → 生成对照证据 → 组装工作台。可以看到责任免除条款被逐条提取为 21 / 31 / 23 / 22 条与原文逐条吻合。图 4把 01 号条款第 3 页的真实解析结果叠加回原页面。每个元素都由 xParse 给出了类型标题 / 正文 / 表格与坐标——这正是能做到章节自适应定位和逐条回溯页码的前提。关键设计一三级风险分级行业里同类工具都卡在一个死结上不下结论没价值下结论踩合规红线。我的解法是换维度不问能不能赔而问这条条款会在什么情况下咬我一口。等级定义来源命中 红线触发即完全不赔责任免除条款21 条 黄线能赔但大幅缩水给付比例降档、免赔额抵扣、医院范围限定3 条⚪ 灰线不易察觉但影响结果等待期、续保限制、必需且合理审核7 条黄线才是大多数人真正会踩的坑举个例子有医保身份、但没走医保结算 → 给付比例从100% 直接降到 60%异地就医没备案、图省事直接自费结算、挂号时用了自费身份都会触发这一条。而它不在责任免除章节里藏在给付比例的条款里通读一遍很难注意到。关键设计二给不出原文出处就不许输出这是我在 System Prompt 里定的硬规则- 风险等级红线 / 黄线 / 灰线 - 一句话人话解释≤ 40 字 - 条款原文逐字引用不得改写 - 出处章节号 页码 - 常见踩坑场景并且明确规定给不出出处的条目一律标注未识别不得凭常识补全。这一条针对的是文档场景最危险的失败模式——沉默放行把没看到的条款当作不存在用 通用保险常识编出一条看起来正确的答案。对用户来说一条被改写过的条款原文比一句我不确定危险得多。关键设计三通用化章节定位最难的一段四家公司的条款编号规则完全不同文档编号体系01 国寿第六条 一、二、三、02 太保财险第十二条 1203 太保寿险四、 1204 太保健康小数编号 2.7如果为每份文档写一套规则作品就没有复用价值了。最后用了四条启发式做自适应def locate_section(lines): ① 标题剥掉编号后精确等于关键字避免命中保险责任和责任免除这类父章节 ② 多候选时取其后紧跟编号条目最多的位置避免命中首页目录 ③ 章节结束位置由同级标题自适应判定不依赖硬编码条款号 ④ 先用章节内首个编号行判定条目形态再据此区分标题与条款这些规则每一条都是被真实文档打出来的坑 102 号文档里有个章节叫「第二部分保险责任和责任免除」简单包含匹配会优先命中它。→ 改为剥掉编号后精确等于关键字。坑 204 号文档首页目录里有2.7 责任免除这一行被当成章节起点。→ 改为多候选取其后编号条目最多的位置。最终 4 份格式迥异的真实条款全部精确命中21 / 31 / 23 / 22共97 条与人工核对逐条吻合。顺带一提这两条规则恰好和实验 A 里纯文本方案栽的坑是同一个。区别是——纯文本方案必须在扁平的、丢失了标题层级的文本上做这套判断而 xParse 已经把标题层级给我了同样的判断在结构化的元素上做稳定得多。五、成果一个可以直接打开的网页工作台最终交付的是一个单文件、零外链、52KB 的 HTML 工作台双击就能打开也可以直接当静态站点发布。六个模块模块内容保单总览产品 / 公司 / 险种 / 保障期间 / 续保属性 / 等待期 三级风险构成不赔清单21 红线 / 3 黄线 / 7 灰线可筛选。每条展开可见条款原文 页码 人话解释 踩坑场景关键数字红线免赔额、给付比例、3 项保额上限、医院范围三重限定理赔材料清单3 组共 17 项可勾选状态存本地时间红线等待期 30 日 → 住院前 7 日 → 出院后 7 日 → 报案 → 递交材料解析证据逐条出处索引 表格结构对照 扫描件对照图 5保单总览 —— 保单要素卡片 三级风险构成 解析漏斗原始文档 → 结构化元素 → 免责条款 → 理赔材料。图 6不赔清单 —— 可按红线 / 黄线 / 灰线筛选点击任意一条展开可见条款原文 人话解释 常见踩坑场景 出处页码。图 7关键数字红线 —— 免赔额、给付比例、三项保额上限、医院范围每项标注出处条款与页码。图 8解析证据 —— 红线条款逐条出处索引条目号 / 页码 / 原文下方为表格结构对照与扫描件识别记录。图 11对照实验页 —— 四份文档的纯文本提取 vs xParse 结果对照以及四个差异点说明。注意页面首行即声明本批 PDF 都带完整文本层读出文字两者都能做到不做夸大。一条数据感受一下规模一份 40 页的条款人工通读定位免责红线大约要 40 分钟而且记不住工作台是秒级呈现并且每一条都能点开看到原文和页码。六、踩坑记录都是真踩的坑现象解决章节误匹配保险责任和责任免除抢先命中关键字精确匹配目录页干扰目录里的2.7 责任免除被当章节起点多候选取条目最密集处xParse 侧靠 title_tree 直接规避表格行数对不上纯文本提取把跨行合并表拍平用 xParse 的include_table_structure图片无输出文本层方案对扫描件直接归零图片走同一接口请求 xParse汉序号歧义五、保险费的交纳标题和一、保险单中……条款正则形态完全一样先用章节内首个编号行判定条目形态再区分标题与条款七、可以抄走的资产我不希望这个作品只解决我这一份保单。所以1. 核心引擎可以复制即用完整的 System Prompt 已经整理好包含五份产出定义、三级分类规则、每条字段规范、禁止事项清单。拿去改改就能做别的文档场景。2. 换一份文件就能再跑一次把素材目录替换成你自己的保单PDF / 扫描件 / 拍照件都行重跑四个脚本即可。3. 方法论可以迁移到其他反 AI 文档章节定位 三级风险 出处回溯这一套可以直接搬到租房 / 劳动合同的坑条款体检招投标文件废标项自查企业证照到期台账它们的共同特征是长文档 关键限制散落 漏一条后果重 常常是扫描件。4. 一个边界说明工作台只做条款提取 风险提示 材料清单绝不下能不能赔的结论页面固定展示免责声明。这既是合规底线也是我认为这类工具该有的分寸——它帮你读懂合同但不替保险公司做核定。八、结语回到最开始那个朋友的故事。如果当时有一个工具能在他投保时就把必须是公立医院普通部这句话用红字标出来那 1 万 8 就不会白花。写这篇文章时我删掉了一版AI 读错了 3 条的草稿因为我实测发现它其实读对了。但这反而让我更清楚 xParse 的价值在哪不是它比 AI 更会读书而是它把文档变成了机器可以直接用的数据—— 结构是结构页码是页码扫描件也是同一套接口。 有了这层地基上面的产品才做得起来。参赛信息作品名称保单不赔清单扫描器参赛赛道TextIn xParse「文档觉醒」AI 应用创新赛 · 赛道一实用价值赛道技术栈TextIn xParse REST API · Python · 原生 HTML/JS单文件零依赖测试素材4 份保险公司官方公开条款共 115 页可复现作品链接保单透视镜 · 不赔清单扫描器
返回列表