kainatarshad123/legal-contract-analyzer
GitHub: kainatarshad123/legal-contract-analyzer
基于机器学习与规则混合分类的法律合同 PDF 分析系统,提供条款识别、风险预测及 Gemini 驱动的法律问答功能。
Stars: 0 | Forks: 0
# 法律合同分析器
## 项目概述
**法律合同分析器** 是一个基于 ML 的法律文档分析系统,旨在帮助用户更高效地审查合同。
该应用程序接受 PDF 格式的法律合同,提取其文本,识别各个条款,对条款类型进行分类,预测条款风险等级,突出显示潜在的问题表述,并允许用户就上传的合同提出问题。
该系统结合了机器学习、基于规则的验证、OCR、文档处理和生成式 AI,以提供结构化的合同审查体验。
## 主要功能
* 上传并分析 PDF 格式的法律合同
* 从可搜索的 PDF 中提取文本
* 对扫描或基于图像的 PDF 执行 OCR
* 清理和预处理提取的合同文本
* 将合同划分为单独的条款
* 预测条款风险等级
* 对法律条款类型进行分类
* 应用基于规则的验证以改进预测
* 生成合同摘要
* 识别重要且具有潜在风险的条款
* 提出与合同相关的问题
* 将分析过的合同和结果存储在 SQLite 中
* 查看以前分析过的合同
* 使用包含 330 个条款的固定的外部测试集评估 ML 模型
* 生成 22 类的混淆矩阵以及每类的 precision、recall、F1-score 和 support
* 运行 Phase-5 标签消融研究
* 使用 `mypy` 对活跃的后端进行静态类型检查
* 通过 React 前端展示模型预测
## 系统架构
该系统采用客户端-服务器架构。
```
React + Vite Frontend
|
v
FastAPI Backend API
|
v
PDF Text Extraction / OCR
|
v
Text Cleaning and Clause Segmentation
|
v
Risk Classification Model
|
v
Hybrid Clause-Type Classifier
|
v
Rule-Based Validation
|
+----------------------+
| |
v v
SQLite Database Gemini API
| |
+----------+-----------+
|
v
Results Returned to Frontend
```
## 技术栈
### 前端
* React
* Vite
* JavaScript
* HTML
* CSS
* Fetch API
### 后端
* Python 3.13
* FastAPI
* Uvicorn
* Pydantic
* SQLite
* Python 类型提示
* `mypy` 静态分析
### 机器学习
* Scikit-learn
* TF-IDF 向量化
* 有监督文本分类
* 混合 ML 和基于规则的分类
* 使用 Joblib 进行模型持久化
### 文档处理
* PyMuPDF
* 正则表达式
* 文本预处理
* 条款分割
* 针对扫描文档的 OCR 处理
### AI 集成
* Google Gemini API
### 数据库
* SQLite
### 数据分析与评估
* Pandas
* NumPy
* Scikit-learn 评估指标
* 混淆矩阵
* 分类报告
* 准确率得分
* Precision
* Recall
* Macro F1 分数
* Weighted F1 分数
## 应用程序工作流
## 机器学习组件
### 风险分类模型
风险模型预测某项法律条款是否代表特定等级的合同风险。
系统使用的风险类别可能包括:
* 低风险
* 中风险
* 高风险
该模型使用 TF-IDF 特征和有监督机器学习分类器处理条款文本。
### 条款类型分类模型
条款类型分类器将条款归类为法律组别,例如:
* 转让和转租
* 保密性
* 争议解决
* 适用法律
* 保险
* 维护和修理
* 付款义务
* 续期
* 租金
* 押金
* 终止
* 公用事业
* 一般义务
* 其他支持的条款类别
### 混合分类
最终的条款分类器结合了:
* 机器学习预测
* 预测置信度
* 关键词模式
* 基于规则的法律验证
* 后备分类逻辑
当 ML 模型的置信度较低时,这种混合方法有助于提高系统的可靠性。
## 数据集
该项目使用由多个来源创建的合并后的法律条款数据集。
### LEDGAR 数据集
LEDGAR 数据集提供了来自商业合同的带标签法律条款,用于训练条款类型分类模型。
### 租赁和租赁协议数据集
精选的租赁数据集用于改进对租赁和财产相关条款的分类。
租赁数据集包含以下示例:
* 住宅租赁协议
* 商业租赁协议
* 租赁协议
* 手动整理的条款示例
### 合并数据集
最终的训练数据集结合了 LEDGAR 条款和特定的租赁条款。
数据集准备包括:
* 类别映射
* 文本清理
* 重复项处理
* 训练集、验证集和测试集划分
* 来源文档跟踪
* 外部测试集分离
* 标签归一化
## 模型评估
条款类型模型在 **包含 330 个经过人工审查的条款的固定的外部评估集** 上进行了评估。此数据集被排除在训练之外,并且在实验过程中保持不变。
### 最终汇总结果
| 方法 | Accuracy | Macro F1 | Weighted F1 |
|---|---:|---:|---:|
| 原始外部基线 | 41.21% | 36.49% | 44.89% |
| 字符 TF-IDF 模型 | 50.00% | 44.67% | 49.74% |
| 最终混合 ML + 规则 | **53.33%** | **46.86%** | **53.13%** |
最终的混合系统使用了:
* **288 条 ML 预测**
* **42 条基于规则的修正**
### 详细的 22 类评估
总体准确率并不被视为分类器质量的充分证据。因此,最终评估还生成了:
* 22 × 22 混淆矩阵
* 每类的 precision
* 每类的 recall
* 每类的 F1-score
* 每类的 support
* Macro 和 weighted 平均值
* 详细的预测文件
生成的文件包括:
```
backend/evaluation/
├── character_model_classification_report.csv
├── character_model_confusion_matrix.csv
├── character_model_confusion_matrix.png
├── final_hybrid_classification_report.csv
├── final_hybrid_confusion_matrix.csv
├── final_hybrid_confusion_matrix.png
├── detailed_evaluation_predictions.csv
├── detailed_evaluation_summary.csv
└── detailed_evaluation_summary.txt
```
### Phase-5 标签消融研究
为了衡量 Phase-5 的 188 个临时自动标记的租赁条款的影响,训练了两个在其他方面完全相同的字符 TF-IDF 分类器:
1. 不带 Phase-5 临时标签
2. 带 Phase-5 临时标签
这两个模型使用了相同的特征配置、分类器设置、随机种子、预处理、类顺序和固定的评估集。
| 训练配置 | Accuracy | Macro F1 | Weighted F1 |
|---|---:|---:|---:|
| 不带 Phase-5 标签 | 46.97% | 42.37% | 47.54% |
| 带 Phase-5 标签 | **50.00%** | **44.67%** | **49.74%** |
| 差异 | **+3.03 个百分点** | **+2.30 个百分点** | **+2.20 个百分点** |
消融实验表明,Phase-5 租赁条款提供了有用的领域适应。然而,由于这些标签是自动生成的且未经过全面的人工审核,它们仍然是临时的,在生产环境部署之前应进行法律审查。
生成的消融文件包括:
```
backend/evaluation/
├── ablation_without_phase5_classification_report.csv
├── ablation_with_phase5_classification_report.csv
├── phase5_ablation_summary.csv
├── phase5_ablation_per_class.csv
└── phase5_ablation_summary.txt
```
### 后端类型安全
在活跃的后端中一致地添加了类型提示,包括:
* 数据库函数
* 合同存储
* PDF 和 OCR 处理
* 文本清理和条款分割
* 风险分析
* 条款类型分类
* 结构化回答构建器
* API endpoint
* 评估脚本
静态分析的运行使用了:
```
python -m mypy main.py evaluate_external_test.py validate_hybrid_clause_model.py evaluation_strengthening
```
最终结果:
```
Success: no issues found in 5 source files
```
活跃的文件也使用以下命令进行了语法检查:
```
python -m py_compile main.py validate_hybrid_clause_model.py
```
### 可搜索的 PDF
使用 PyMuPDF 直接提取文本。
### 扫描的 PDF
当检测到文本不足时,应用程序使用 OCR 从渲染的 PDF 页面中提取文本。
提取方法可能记录为:
* 文本
* OCR
* 混合
这使得系统能够处理更广泛的法律文档。
## Gemini API 集成
Google Gemini 用于自然语言合同辅助。
Gemini 可以帮助系统:
* 生成易读的合同摘要
* 解释晦涩的法律语言
* 回答关于上传合同的问题
* 提供有关已识别条款的一般性指导
* 描述潜在的隐患
* 根据提取的合同内容生成用户友好的回复
Gemini 并不用来替代训练好的 ML 模型。ML 模型执行结构化分类,而 Gemini 提供自然语言解释和问答。
## 数据库
SQLite 用于在本地存储应用程序数据。
存储的信息可能包括:
* 合同 ID
* 原始文件名
* 提取的文本
* 上传日期
* 合同元数据
* 条款分析结果
* 风险预测
* 条款类型预测
* 合同历史记录
## 项目结构
具体结构可能因项目的最终版本而异。
```
Legal-contract/
│
├── backend/
│ ├── main.py
│ ├── database files
│ ├── document extraction modules
│ ├── OCR modules
│ ├── clause processing modules
│ ├── Gemini integration
│ │
│ ├── ml_model/
│ │ ├── training scripts
│ │ ├── trained models
│ │ ├── vectorizers
│ │ ├── datasets
│ │ └── evaluation files
│ │
│ ├── evaluation/
│ │ ├── classification reports
│ │ ├── confusion matrix CSV files
│ │ ├── confusion matrix PNG files
│ │ ├── ablation reports
│ │ └── detailed prediction files
│ │
│ ├── evaluation_strengthening/
│ │ ├── generate_detailed_evaluation.py
│ │ └── run_phase5_ablation.py
│ │
│ ├── mypy.ini
│ └── requirements.txt
│
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── assets/
│ │ ├── App.jsx
│ │ ├── App.css
│ │ └── main.jsx
│ │
│ ├── public/
│ ├── package.json
│ └── vite.config.js
│
├── development_archive/
│ ├── phase summaries
│ ├── evaluation records
│ ├── development notes
│ └── previous implementation files
│
├── README.md
└── .gitignore
```
调整此结构,使其与项目中实际的文件夹和文件名相匹配。
## 安装说明
## 1. 克隆或打开项目
```
git clone YOUR_REPOSITORY_URL
cd Legal-contract
```
在不使用 Git 在本地运行项目时,请在 Visual Studio Code 中打开主项目文件夹。
## 2. 后端设置
打开命令提示符并导航至 backend 文件夹:
```
cd "C:\Users\YourName\Documents\Legal-contract\backend"
```
创建虚拟环境:
```
python -m venv venv
```
激活虚拟环境:
```
venv\Scripts\activate
```
安装后端依赖项:
```
pip install -r requirements.txt
```
## 3. 环境变量
在 backend 文件夹内创建一个 `.env` 文件。
示例:
```
GEMINI_API_KEY=your_gemini_api_key_here
```
请勿上传 `.env` 文件或在源代码中暴露 API 密钥。
## 4. 启动后端
在 backend 目录下运行:
```
python -m uvicorn main:app
```
后端应该可以通过以下地址访问:
```
http://127.0.0.1:8000
```
FastAPI 文档应该可以通过以下地址访问:
```
http://127.0.0.1:8000/docs
```
## 5. 前端设置
打开第二个命令提示符窗口并导航至 frontend 文件夹:
```
cd "C:\Users\YourName\Documents\Legal-contract\frontend"
```
安装前端依赖项:
```
npm install
```
启动前端:
```
npm run dev
```
Vite 将显示本地前端 URL,通常为:
```
http://localhost:5173
```
在 Web 浏览器中打开此地址。
## API Endpoint
最终的后端暴露了以下主要 endpoint:
| 方法 | Endpoint | 用途 |
| -------- | -------------------------- | -------------------------------- |
| `GET` | `/` | 检查后端状态 |
| `POST` | `/upload-contract` | 上传并处理合同 |
| `POST` | `/ask-contract` | 提出关于合同的问题 |
| `GET` | `/contracts` | 返回已存储的合同历史记录 |
| `GET` | `/contracts/{contract_id}` | 返回一份已存储的合同 |
| `DELETE` | `/contracts/{contract_id}` | 删除一份已存储的合同 |
## 推荐截图
将以下屏幕截图添加到最终文档或 README 中:
1. 应用程序落地页
2. 合同上传界面
3. 已上传合同信息
4. 合同摘要
5. 风险概览
6. 条款分析结果
7. 高风险条款显示
8. 条款类型分类
9. 合同问答功能
10. 合同历史记录页面
11. 搜索功能
12. 扫描 PDF 或 OCR 结果
13. FastAPI Swagger 文档
14. 运行时的后端终端
15. 运行时的前端终端
16. 模型评估输出
17. 混淆矩阵
18. 外部预测结果
创建一个 `images` 或 `screenshots` 文件夹,并使用 Markdown 添加图像:
```

```
## 测试
在最终提交之前,运行以下技术检查:
```
python -m mypy main.py evaluate_external_test.py validate_hybrid_clause_model.py evaluation_strengthening
python -m py_compile main.py validate_hybrid_clause_model.py
python evaluation_strengthening\generate_detailed_evaluation.py
python evaluation_strengthening\run_phase5_ablation.py
python -m uvicorn main:app
```
然后使用以下内容测试系统:
* 可搜索的 PDF
* 扫描的 PDF
* 短合同
* 长合同
* 包含高风险条款的合同
* 包含缺失信息的文档
* 不受支持或无效的文件
* 与合同相关的问题
* 与合同无关的问题
* 合同历史记录加载
* 重启后端后的数据库持久性
## 安全性考虑
* API 密钥必须存储在环境变量中。
* `.env` 文件绝对不能提交到 Git。
* 应验证上传的文件。
* 应执行文件大小限制。
* 应拒绝不受支持的文件格式。
* 在处理之前应验证用户输入。
* 生成的法律回复应明确显示免责声明。
## 局限性
* 该系统不能替代合格的律师。
* 预测结果取决于训练数据集的质量和覆盖范围。
* 对于模糊或低分辨率的文档,OCR 的准确率可能会降低。
* 一些不常见的条款可能会被错误分类。
* Gemini 的回复可能偶尔包含不完整或不准确的信息。
* 该系统可能不支持每个法律司法管辖区。
* 外部评估数据集可能包含示例数量有限的类别。
* 低频条款类别的分类性能可能较低。
## 未来改进
可能的未来改进包括:
* 添加用户身份验证
* 添加基于角色的访问控制
* 添加云数据库支持
* 部署前端和后端
* 支持 DOCX 和 TXT 合同
* 添加多语言合同分析
* 改进 OCR 预处理
* 训练基于 Transformer 的法律语言模型
* 扩充法律条款数据集
* 添加特定司法管辖区的法律规则
* 添加合同比较
* 添加条款功能
* 将分析结果导出为 PDF
* 添加管理员分析
* 添加订阅和支付功能
* 添加安全的云文档存储
## 法律免责声明
法律合同分析器是一个教育和辅助性的软件项目。
它不提供专业的法律建议,不应被视为可替代持有执照的律师的咨询。模型预测和 AI 生成的解释可能包含错误,或者可能并不适用于每个法律司法管辖区。
用户在根据合同或本系统产生的结果做出决定之前,应咨询合格的法律专业人士。
## 作者
**项目:** 法律合同分析器
**开发者:** Kainat Arshad
**机构:** 添加你所在的大学或机构
**专业:** 添加你的学位或课程
**提交日期:** 2026 年 7 月
## 许可证
本项目出于教育和学术目的而开发。
仅在您的机构要求或公开发布项目时,才添加正式的开源许可证。
标签:AV绕过, FastAPI, OCR, React, Syscalls, 合同审查, 文档分析, 法律科技, 逆向工具