Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tongyx361/legal-search
Code for lab of **legal search engine** in *Introduction to Search Engine* (24S) course by Prof. Qingyao Ai @ THU-CST
https://github.com/tongyx361/legal-search
Last synced: about 2 months ago
JSON representation
Code for lab of **legal search engine** in *Introduction to Search Engine* (24S) course by Prof. Qingyao Ai @ THU-CST
- Host: GitHub
- URL: https://github.com/tongyx361/legal-search
- Owner: tongyx361
- License: mit
- Created: 2024-05-27T11:44:27.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-06-10T23:24:23.000Z (7 months ago)
- Last Synced: 2024-06-18T04:43:00.143Z (6 months ago)
- Language: Jupyter Notebook
- Size: 875 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Legal Search Engine
> Code for lab of **legal search engine** in _Introduction to Search Engine_ (24S) course by Prof. Qingyao Ai @ THU-CST
## 文件结构
将 `Legal_data` 目录放置在 `data/` 下
```
.
└── data
├── doc_list.txt
├── kw2ids.json
├── query2id_list.jsonl
├── 法条倒排.json
├── 审判长倒排.json
├── keyword_ridx.json
├── docs
├── idxs
└── Legal_data
```## 前端
### 环境配置
```shell
cd src/frontend
npm install
```在 `src/frontend/.env` 内设置环境变量
### 运行
生产环境:
```shell
npm run build && npm run start
```开发环境:
```shell
npm run dev
```## 构建索引
### 环境配置
```shell
conda create -n ise python=3.10 -y
conda install -c conda-forge openjdk=21 maven -y
conda install pytorch==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install -r requirements.txt
```为 **1000 篇测试文档**构建索引,先准备文档:
完整文档:
```shell
python src/build_fulltext_docs.py \
--ids_fpath data/test_ids.txt \
--output_doc_home data/docs/fulltext_test_docs
```分段文档:
```shell
python src/build_fulltext_docs.py \
--ids_fpath data/test_ids.txt \
--output_doc_home data/docs/fulltext_test_seg_docs \
--seg_len 512
```准备倒排索引:
```shell
python build_reverse_idx.py
```### BM25 (中文)
```shell
bash src/build_bm25_idx_zh.sh
```### FAISS
```shell
bash src/encode.sh
bash src/build_faiss_idx.sh
```https://cloud.tsinghua.edu.cn/d/c0f715a9078e4d38b36a/?p=%2F%E5%8F%B8%E6%B3%95%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E
## 后端样例
包含了后端所有功能的调用示例
```shell
python example_backend.py
```# APIs
均为 GET 请求
全部使用 json 来传参,中文使用 unicode-escape 编码
### `/query`
综合检索的一个接口。可以支持高级检索表达式和过滤检索。支持分页。
- 输入:字典
- `query`:字符串,检索字符串,可以是关键词或长文本,也可以是高级检索表达式
- `mode`:字符串,只能为`accurate`或`blurred`,表示精准搜索或者模糊搜索
- `judge`:字符串,法官名字,支持高级检索表达式,过滤功能。不过滤时传`""`
- `law`:字符串,法条名字,支持高级检索表达式,过滤功能。不过滤时传`""`
- `index`:整数,当前最后一条文书的过滤前标号
- `ndoc`:整数,至多返回可用文书的条数- 返回值:
- `doc`:字典,输入 `index` 后第一条可用的文书的详情
- `full`:字符串,全文
- `title`:字符串,标题
- `laws`:列表,其中每个元素都是字符串。法条
- `judges`:列表,其中每个元素都是字符串。法官
- `keywords`:列表,其中每个元素都是字符串。关键词
- `highlights`:列表,其中每个元素都是字符串。需要高亮的词
- `index`:整数,表示返回的文书在该搜索输入下精确过滤前的标号
- `total_num`:整数,这个搜索在精确过滤前总共有多少个文书- 例子
- 语义:模糊搜索`婚姻法`,按照法官为`韦威助`来过滤,不过滤法条,返回过滤前标号从`20`开始(包括)`20` 的文书的下 10 条可用文书。
```json
{
"query": "婚姻法",
"mode": "blurred",
"judge": "韦威助",
"law": "",
"index": 20,
"ndoc": 10
}
```### `/query-judge`
按照法官的名字检索,支持模糊检索,不支持高级检索,支持分页。
- 字段
- `query`:字符串,法官名
- `begin`:整数,用来分页。起始的编号
- `end`:整数,用来分页。终止的编号- 返回值
- `results`:列表,每个法律文书的详情。每个元素是一个字典
- `full`:字符串,全文
- `title`:字符串,标题
- `laws`:列表,其中每个元素都是字符串。法条
- `judges`:列表,其中每个元素都是字符串。法官
- `keywords`:列表,其中每个元素都是字符串。关键词
- `highlights`:列表,其中每个元素都是字符串。需要高亮的词
- `index`:列表,其中每个元素都是整数。表示返回的文书在该搜索输入下的标号,用来分页
- `total_num`:整数,这个搜索总共有多少个文书- 例子
- 语义:模糊搜索法官为`韦威助`的法律文书。返回过滤前标号从`20`开始(包括)`20` 的文书的下 10 条可用文书。
```json
{
"query": "韦威助",
"index": 20,
"ndoc": 10
}
```### `/query-laws`
按照法条检索,支持模糊检索,不支持高级检索,支持分页。
- 字段
- `query`:字符串,法条名
- `begin`:整数,用来分页。起始的编号
- `end`:整数,用来分页。终止的编号- 返回值
- `results`:列表,每个法律文书的详情。每个元素是一个字典
- `full`:字符串,全文
- `title`:字符串,标题
- `laws`:列表,其中每个元素都是字符串。法条
- `judges`:列表,其中每个元素都是字符串。法官
- `keywords`:列表,其中每个元素都是字符串。关键词
- `highlights`:列表,其中每个元素都是字符串。需要高亮的词
- `index`:列表,其中每个元素都是整数。表示返回的文书在该搜索输入下的标号,用来分页
- `total_num`:整数,这个搜索总共有多少个文书- 例子
- 语义:模糊搜索法条为`婚姻法`的法律文书。返回过滤前标号从`20`开始(包括)`20` 的文书的下 10 条可用文书。
```json
{
"query": "婚姻法",
"index": 20,
"ndoc": 10
}
```### `/expand`
搜索扩展和推荐
- 字段
- `query`:字符串,需要扩展的检索
- 返回值
- `results`:列表,每个元素是字符串,扩展出的搜索选项。
- 例子
- 语义:扩展和推荐`婚姻`的检索词
```json
{
"query": "婚姻"
}
```