摘要:简要介绍在 ElasticSearch + Kibana 场景下,法律数据分析工作的内容和主要目标,系经验之谈。
一、背景概述
ElasticSearch,即经常被提及的 ES 库,是一款流行的大数据检索引擎,一些法律检索引擎亦使用 ES 库来存储文书和标签数据。
我们可以把 ES 库简单理解为一款数据库,即存放海量文书数据的仓库,利用 ES 查询语句,可以方便地查询和统计文书数据。
Kibana 是 ES 数据库的一款配套软件,具有数据可视化管理等众多功能,另外 Kibana 提供了比较智能的交互界面,方便我们编写查询语句、浏览查询结果。
二、前置条件
- 法律数据分析人员应具有 ES 库原理、Kibana 基本操作、ES 查询语法、json 文件格式规范等基础知识;
- 现场配备法律数据分析工具:RegexBuddy(猫头鹰)、Excel、notepad++或 vscode 等便捷文本编辑工具。
- 由技术研发或运维人员完成 ElasticSearch + Kibana 环境搭建,进行数据入库和基础验证。
三、EK 场景下法律数据分析流程
(一)查询数据库前的业务准备工作
- 了解业务背景:明确业务流程内容、官方历史数据、相似或容易混淆的概念等。
- 明确研发摘要:明确本次研发涉及要素含义、要素之间关系、最终实现结果。
- 梳理要素特征:包含内涵特征词、对应法律法规和其他规范性文件、国家标准、相关名录、其他相关知识等。
- 梳理检索逻辑:常见逻辑如:包含、排除、同时出现、不得同时出现等。
- 设计验证方案:常见如:与官方数据比较、比例分析、法律逻辑分析、经验等。
(二)查询数据库并记录过程数据
通过编写查询语句,形成: 查询 –> 验证结果 –> 修正查询条件 –>重新验证 的研发流,期间主要关注内容包含以下方面:
- 特征词:验证前期梳理的特征词效果;并通过观察新文书,选取体现要素特点、不易混淆的关键词,灵活使用包含、排除逻辑,兼顾正确率与覆盖率。
- 法律法规引用:验证与要素对应的法律法规及其简称,整理新出现的地方性法律文件、国家标准、通用名录等。
- 文书文号:可以借助文书文号,排除无关文书。
- 检索结果:记录不同特征词、法律法规在查询过程中命中文书数量,方便后续比较和分析。
- 查询逻辑:考虑不同精度检索方案的组合,一般而言,特征词的覆盖较全但易产生混淆,建议组合使用;法律法规的引用准确度较高、覆盖度不足,可以作为关键词组合的补充或者成为其他要素的排除项;
- 查询语句保存:可以将每个法律要素保存为单个 json 格式文件,方便成果复用。
(三)对查询结果进行二次分析
可以将 ES 查询结果另存为文本,可以使用猫头鹰进行二次分析。例如,提取文本之中的法律法规引用内容,再使用 Excel 透视表对结果进行聚合和排序,选取代表性较高的条目归化为法律法规或者关键词。
对 ES 聚合结果导出到 Excel,避免手动复制粘贴的方法,可以采用正则方式实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// 示例结果片段
{
"key": "IT",
"doc_count": 2371,
"按照性别": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 0,
"key_as_string": "false",
"doc_count": 2075
},
{
"key": 1,
"key_as_string": "true",
"doc_count": 296
}
]
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21//正则写法:
\{
"key" : "([^\n]+)",
"doc_count" : (\d+),
"按照性别" : \{
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : \[
\{
"key" : 0,
"key_as_string" : "([^\n]+)",
"doc_count" : (\d+)
\},
\{
"key" : 1,
"key_as_string" : "([^\n]+)",
"doc_count" : (\d+)
\}
\]
\}
\}1
2
3
4
5
6
7
8
9// 换行模式 CRLF pairs
// 使用 $1 - $6 进行匹配
// 结果输出为:
IT -- 2371 -- false -- 2075 -- true -- 296
US -- 1987 -- false -- 1738 -- true -- 249
CN -- 1096 -- false -- 959 -- true -- 137
CA -- 944 -- false -- 817 -- true -- 127
JP -- 774 -- false -- 682 -- true -- 92
(四)结果输出
- 报表制作:使用数据报表的形式,一般需要对查询结果进行聚合(aggregation),常见类别包含:文书类型、结案年度、地区等,尽可能在一次查询当中记录所有有用信息,减少重复劳动。
- 数据验证:一般包含与官方历史数据验证、比例验证、逻辑分析,主要目的是确认是否存在与常理或业务不符情况,以及数据的可解释性。
- 记录典型情形:总结不同要素典型情况,方便与客户汇报使用。
四、其他建议
数据库的分库标准梳理:利用拆分子库,可以限定查询范围,减小查询语句编写难度。
尽量避免因客户变更需求带来的重复性工作:
将每个要素保存为一个单独的
json
查询语句方便复用;针对大类概念,导出成不同的
index
库进行数据固定;常见统计维度的一次性导出,大约需要 3 张表,例如:时间 + 地域 + 业务要素(组合切片)
1
2
3
4
5
6
7
8
9
10
11## 时间维度
年度-1 -- 本年度总数 -- 文书类型 1 总数 -- 文书类型 2 总数 -- 各要素数量聚类 -- 各省份数量聚类
## 地域维度
省份-1 -- 本省份总数 -- 文书类型 1 总数 -- 文书类型 2 总数 -- 各要素数量聚类 -- 各年度数量聚类
## 要素维度
要素-1 -- 本要素总数 -- 文书类型 1 总数 -- 文书类型 2 总数 -- 各年度数量聚类 -- 各省份数量聚类
五、样例查询语句
一个典型的关键词查询语句:
1 | GET /kibana_sample_data/_search?size=10 |
一个典型的聚合查询语句:
1 |
|
一个典型组合查询语句逻辑结构:
1 | GET /kibana_sample_data/_search?size=10 |