☰
为什么有7.9万条记录被剔除:turkish-court-decisions数据清洗与去重逻辑全拆解
2026/10/22 6:52:59 网站建设 项目流程

【免费下载链接】turkish-court-decisions

项目地址:https://ai.gitcode.com/hf_mirrors/hamzabagirsakci/turkish-court-decisions
点击查看免费下载

turkish-court-decisions(Türk İçtihat Korpusu)是目前已知最大的土耳其语判决书数据集,收录了11,045,085 份来自土耳其最高法院(Yargıtay)、行政法院(Danıştay)、宪法法院(AYM)等机构的判决全文。但它的原始采集量其实是11,124,305 条——中间那79,220 条"消失"的记录去了哪里?🤔 本文将逐条拆解这套判决书数据集的数据清洗与去重逻辑,帮你在做法律文本 NLP 前彻底看懂数据从哪来、为什么可信。

数据漏斗:从1112万到1104万的全过程

先把整条"数据清洗流水线"的账算清楚,所有数字均来自官方 README.md 的记录:

阶段数量说明
源系统声明的判决书11,125,621四个官方检索系统合计
成功下载11,124,305占 99.99%,两轮重试仍为空的 1,226 条放弃
剔除"垃圾响应"−6,779HTTP 200 返回的其实是机器人验证页/错误页
剔除重复记录−72,441同一判决被不同 document_id 索引了多次
最终发布11,045,085315 亿字符,5.52 GB Parquet,共 30 个文件

💡 关键点:被剔除的 79,220 条不等于 7.9 万份判决"错了",其中 90% 以上只是索引层面的重复,真正的判决全文一条没丢。

数据按来源分目录存放,每个来源对应若干 Parquet 分片:

  • data/yargitay/train-00000-of-00017.parquet:Yargıtay,9,820,145 条(17 个分片,1997–2026 年)
  • data/danistay/train-00000-of-00002.parquet:Danıştay,386,608 条(2 个分片,1965–2026 年)
  • data/emsal/train-00000-of-00009.parquet:UYAP Emsal,815,702 条(9 个分片,2017–2026 年)
  • data/aym_norm/train-00000-of-00001.parquet:AYM 规范审查,5,563 条
  • data/aym_bb/train-00000-of-00001.parquet:AYM 个人申诉,17,067 条

剔除一:6,779条"垃圾响应"是怎么识别的

爬虫在采集时,源系统偶尔会返回HTTP 200 状态码,但页面内容并不是判决书,而是机器人验证屏或错误页面。这类"假 200"是网络爬取的经典坑:按状态码判断永远成功,按内容判断才作数。

识别与处理规则(见 README.md 的Temizlik章节):

  • 特征明确:固定文案、长度约 120 字符的页面,且全部出现在 Danıştay 来源中;
  • 整体剔除:6,779 条记录全部移除,不进入发布数据;
  • 不误伤短判决:清洗规则只针对上述"固定垃圾文本",真正简短的判决书会被完整保留——这是很多数据集清洗容易做错的点(比如按"长度阈值一刀切")。

⚠️ 如果不做这一步,最终数据里会混入约 6,779 条"判决书其实是错误页"的脏数据,直接污染下游的文本分类与检索模型。

剔除二:72,441条重复判决的去重键设计

剩余的大头是重复索引:同一份判决在源系统中被分配了多个document_id,导致下载了不止一次。这套去重逻辑有三个值得借鉴的设计:

1. 去重键:(source, court, esas_no, karar_no)

即「来源 + 审判庭/部门 + 案号(esas_no)+ 判决号(karar_no)」四元组,而不是全文哈希。原因很实际:不同次抓取的同一页面可能有细微渲染差异,结构化编号才是判决的法律唯一身份。

2. 冲突消解:保留"最长文本"版本

同一判决的多个副本中,保留 text 最长的那一条。因为部分副本是"半截抓取"——页面只下载了前半部分。用文本长度作为完整性代理指标,简单又有效。

3. 可追溯:raw_sha256 字段

每条记录都带raw_sha256字段,即源 HTML 页面的哈希值(字段定义见 README.md 的 Schema 表)。它的作用正是"去重 + 校验"双用途:

  • 事后核查去重是否彻底(相同哈希即同一原文);
  • 验证发布数据与源系统页面是否一致,防止静默数据损坏。

另外,采集端采用AIMD 退避的限速爬虫,并按月份窗口分片采集,每个窗口完成对账(reconcile)后才进入下一窗口,从机制上避免漏采、静默丢数。

去重之外:数据集还做哪些数据清洗?

理解"7.9 万剔除"之外,还有几项清洗/规范化动作直接影响你能不能用好这些数据:

清洗动作说明
隐私脱敏个人身份信息以[TCKN]、[IBAN]、[KART]、[TELEFON]、[EPOSTA]标签掩码,masked_count字段记录每条记录被掩码的数量
HTML → 纯文本源感知式转换:Danıştay 判决是页面模板内嵌的 HTML-escape 文本,需单独解转义;AYM 判决是 Word 导出结构。保留段落结构,剥离页面骨架
日期归一karar_tarihi统一为 ISOYYYY-MM-DD(各来源格式原本不一致),并派生year/month作为分片键
法律条文引用结构化mevzuat_atif字段仅收录"零猜测"的条文引用:正文写明法律编号直接提取;缩写仅在实测精确率 ≥99% 时才映射(如HMK→6100,99.91%),TCK等歧义缩写宁缺毋滥

字段全集与类型(id、source、text、text_len等 14 个字段)完整列在 README.md 的 Schema 表中,id采用{来源}:{document_id}格式,全数据集全局唯一。

新手上手:如何加载清洗后的数据

发布数据以 Hugging Face Datasets 格式组织,all配置包含全部 30 个文件,也可按来源单取。加载方式与全部字段说明见 README.md。以 PyArrow 直接读取单个 Parquet 分片为例(代码摘自 README):

import pyarrow.parquet as pq tbl = pq.read_table("data/aym_norm/train-00000-of-00001.parquet")

如果按条文检索,清洗后的结构化字段能直接派上用场:

ds = load_dataset("hamzabagirsakci/turkish-court-decisions", "yargitay", split="train") tck62 = ds.filter(lambda r: "5237/62" in r["mevzuat_atif"])

数据集采用CC0-1.0 协议,且土耳其法院判决本身不在版权保护范围内(FSEK m.31 明确允许官方发布的司法判决自由复制传播),可放心用于研究与商业场景。

小结:这套清洗逻辑的三个可复用经验

  1. 按内容而非状态码识别垃圾——"假 200"验证页要固定文案特征匹配,且绝不能误伤短文档;
  2. 用结构化业务键去重,而非全文哈希——(来源, 审判庭, 案号, 判决号)才是法律文本的唯一身份,冲突时保留最长文本副本;
  3. 留下校验指纹——raw_sha256让每一条去重和每一次重新采集都能被回溯验证。

对于任何法律文本 NLP 项目(判决分类、条文检索、摘要生成),这套"漏斗式"清洗账本本身就是最好的质量说明书。

【免费下载链接】turkish-court-decisions

项目地址:https://ai.gitcode.com/hf_mirrors/hamzabagirsakci/turkish-court-decisions
点击查看免费下载
上一篇:RudderStack架构深度解析:理解10大核心组件的工作原理
下一篇:moonlight-android:将PC游戏轻松搬至Android设备

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询