乐于分享
好东西不私藏

用大模型从PDF里"挖"骨骼测量数据:一次自动化的尝试

用大模型从PDF里"挖"骨骼测量数据:一次自动化的尝试

骨骼测量数据是动物考古学研究的基础,但散落在数百篇中文文献中,格式不一、难以复用。我们尝试用大语言模型驱动的自动化流程,从204篇PDF文献中批量提取骨骼测量数据。本文记录这次尝试的动机、方法、结果与反思。


一、为什么想这么做

做动物考古的人大概都有过这样的经历:写论文需要对比不同遗址的猪下颌骨尺寸,于是翻开十几篇文献,一篇一篇地从表格或正文里抄数据,再手动录入Excel。这个过程少则半天,多则几天。

骨骼测量数据的价值在于可比性。von den Driesch在1976年提出的标准测量体系(GL、Bp、Bd、SD等)至今仍是国际通用语言。理论上,只要大家都用同一套标准,不同遗址的数据就能放在一起比较,进而讨论家畜起源、种群交流、肉食消费策略等问题。

但现实是:数据散落在几百篇文献里,格式千差万别。

有的文献用规范的表格,VDD代码标注清晰;有的文献把测量值嵌在正文中,"标本最大长为38.52mm"这种写法;有的文献用全角数字,有的用半角;有的PDF能直接复制文字,有的是扫描图片,数字都粘不出来。

这些数据一旦进入文献,就几乎沉睡在那里了。没有人会重新去整理一遍——工作量太大,太枯燥。

这恰好是一个可以交给自动化来解决的问题。


二、怎么做的

整体思路

我们搭建了一条从PDF到结构化数据的流水线,核心思路是:

PDF提取文本 → 清洗OCR噪声 → 正则匹配测量数据 → 标准化 → 去重 → 输出

整个过程由大语言模型(Claude)辅助完成——不是让大模型"读懂"骨骼测量数据(它的幻觉风险太高),而是让它帮助编写和调试提取脚本。最终的数据提取完全由确定性的正则表达式执行,每一条数据都有据可查。

具体步骤

第一步:PDF转文本

使用PyMuPDF(fitz)库从PDF中提取文本。这一步的质量完全取决于PDF本身——如果是作者提交的Word排版文件直接转成的PDF,文本层完整,提取效果就很好;如果是扫描件,提取出来的就是一堆乱码和控制字符。

第二步:文本清洗

PDF提取的文本充满噪声,需要做几件事:

  • 全角数字转半角("182.21" → "182.21")
  • 去除PUA私用区字符(PDF字体映射错误产生的乱码)
  • 清理数字中的空格("45. 7" → "45.7")
  • 统一单位("毫米" → "mm")

这一步看似简单,实际上坑很多。比如PUA字符不能直接删除——如果它夹在两个数字之间("80"和".8"),删除后会变成"80.8",数值就错了。所以正确做法是替换为空格。

第三步:正则匹配

核心提取逻辑是用正则表达式匹配"变量名 + 数值 + mm"的模式。我们识别了几种常见格式:

骨体最大长(GL)149.99mm     → 中文名(VDD代码)数值mm肩胛颈部最小长为21.69mm       → 中文名为?数值mm最大长45.7,最大宽19.4mm      → 逗号分隔的连续测量

第四步:种属推断

大多数文献不会在测量表中标注种属(因为一个表就对应一个种属),但我们的提取是按段落进行的。通过在段落中搜索"家猪""黄牛""绵羊"等关键词,可以推断当前段落讨论的是哪个物种。优先匹配家养动物名称,避免"野猪"误匹配。

第五步:标准化与去重

将中文变量名映射到von den Driesch标准代码,按"文献+变量+数值+种属+元素"去重,最终输出结构化的CSV/Excel文件。


三、结果是什么

数量

指标
数值
处理文献
204篇
成功提取
92篇(45%)
总记录
3,217条
涉及遗址
92个
涉及种属
30种
测量变量
392种
时间跨度
旧石器时代 → 明代
地理范围
15个省/自治区

种属分布

家猪占了半壁江山(56%),其次是黄牛(13%)和羊(8%)。这与中国动物考古学的研究侧重高度一致——猪是核心议题。

地理与时代

数据覆盖了从内蒙古哈民忙哈(新石器时代,549条)到云南河泊所(战国,414条)的广阔时空。新石器至战国时期的数据占约70%。

哪些文献提取效果好

提取效果最好的文献有三个共同点:

  1. 文本型PDF——不是扫描图片,文字可以直接复制
  2. 使用VDD标准代码——"最大长GL""近端最大宽Bp"这样的规范写法,让正则匹配非常可靠
  3. 行内描述式写法——"标本最大长为38.52mm"这种嵌在正文中的格式,比复杂表格更好提取

典型的成功案例:哈民忙哈(533条)、河泊所(414条)、大司空(317条)、西岔(247条)。

哪些文献提取失败

112篇文献返回了0条记录。最主要的原因是扫描版PDF导致数值丢失——大约占失败案例的一半。

具体表现为:文本中能找到"标本最大长为"这样的变量名,但后面紧跟的是一个控制字符(U+0003),数字完全消失了。银梭岛遗址的文献有1212个"毫米"关键词命中,但提取出0条数据,就是因为所有数字都被替换成了乱码。

其他失败原因包括:同位素分析论文本身没有骨骼尺寸数据、数据以散点图/箱线图呈现、仅统计百分比频率等汇总信息。


四、未来能怎么做

短期:补齐高价值文献

在112篇失败文献中,约有30篇原本包含丰富的测量数据,只是因为PDF质量问题没能提取。这些文献值得通过以下方式补录:

  • 专业OCR:使用PaddleOCR等工具重新处理扫描版PDF,特别是针对表格结构的OCR
  • 人工录入:对OCR也无法挽救的文献,由研究生协作完成数据录入

预计可以再增加500-1000条记录。

中期:推动数据开放

这次尝试最深刻的体会是:当前PDF发布格式对数据再利用极不友好。 花费大量精力提取的数据,很可能因为格式问题存在错误或遗漏。

如果文献发表时能同时附带一份结构化的测量数据(CSV或Excel),哪怕只有几列(标本号、种属、部位、VDD代码、数值mm),后续所有研究者都能直接使用。这件事对作者来说举手之劳,对整个领域的数据积累意义重大。

具体建议:

  1. 发表时附数据表:随论文提交原始测量数据的CSV/Excel附件
  2. 使用文本型PDF:排版软件直接导出,保留文字可复制性
  3. 统一VDD代码:采用von den Driesch标准变量名
  4. 避免全角数字:使用半角数字和半角句点

长期:建设开放数据库

如果上述习惯能够推广,就有望建立一个中国动物骨骼测量数据的开放数据库。参考国际上的zooarch.org和GBIF框架,采用Darwin Core标准字段,提供API接口供研究者查询和下载。

这样的数据库一旦建成,关于中国家畜起源、动物资源利用、区域间文化交流等宏观问题的讨论,将有更坚实的数据基础。


写在最后

这次尝试证明了一件事:用自动化手段从现有文献中挖掘结构化数据是可行的。 我们用不到一周的时间,从204篇文献中提取了3217条骨骼测量数据,覆盖92个遗址。如果靠人工逐篇录入,同样的工作量可能需要几个月。

但同时也暴露了一个更根本的问题:大量珍贵的测量数据被锁在PDF里,格式混乱、难以再利用。 自动化提取只能是权宜之计,长远来看,需要从数据发布的源头解决问题。

希望这次尝试能成为一个起点。


上面都是AI自己写的报告。

数据文件与提取脚本后续开源公布至github,如需获取请后台联系。但是都是屎山代码我也懒得整理了想用的请自便。

本文涉及的文献数据仅用于学术研究目的,所以github上也不会有pdf源文件。

token大致烧了40块钱,主要以deepseek-v4-pro为主,后续用了xiaomi-mimo-v2.5,就提取效果来说大差不差,但是速度mimo更快一些,而且还是免费的MAX计划,真香~