Oredelight/grammar-checker
GitHub: Oredelight/grammar-checker
一款结合 LanguageTool 规则引擎与 Google Gemini AI 的混合式英语语法检测与纠错系统,提供 REST API 与交互式 Web 界面。
Stars: 1 | Forks: 0
# Dreamy Checker - 高级语法纠正系统
一个复杂的混合语法检查和纠正系统,它将基于规则的检测与 Google 的 Gemini AI 结合起来以进行智能纠正。Dreamy Checker 通过智能错误检测和上下文感知纠正,提供全面的文本润色。
## 概述
Dreamy Checker 是一款智能语法纠正工具,旨在帮助用户写出更好的英语。该系统利用基于规则和 AI 驱动的方法来进行全面的语法检查:
1. **基于规则的引擎**:LanguageTool 根据全面的英语规则检测语法违规
2. **AI 增强**:Google Gemini API 提供智能的、上下文感知的纠正
3. **智能分块**:通过智能拆分来处理长文档(每个块最多 180 个词)
### 为什么采用混合方法?
- **精准性**:基于规则的引擎能以可靠的模式捕获技术性语法错误
- **智能性**:Gemini AI 能理解上下文并自然地改善流畅度
- **可扩展性**:智能地对文本进行分块,以处理任意长度的文档
- **可靠性**:过滤掉误报和嘈杂的规则
## 功能
### 核心能力
- **混合语法纠正**:将 LanguageTool 基于规则的检查与 Google Gemini AI 相结合
- **双层检测**:第一轮使用 LanguageTool 规则,第二轮使用 AI 分析
- **REST API**:基于 FastAPI 的 endpoint,提供带请求验证的编程式访问
- **交互式 Web UI**:简洁、响应式的界面,支持实时语法检查
- **全面的问题检测**:识别语法错误、拼写、大小写、标点符号等
- **上下文分析**:返回每个检测到的问题的上下文,以帮助用户理解错误
- **智能文本分块**:通过智能拆分来处理长文档(每个块最多 180 个词)
- **智能过滤**:通过过滤嘈杂的 LanguageTool 规则来消除误报
## 技术栈
### 后端架构
| 组件 | 技术 | 用途 |
|-----------|-----------|---------|
| **Web 框架** | FastAPI 0.136.3 | 现代 async API 服务器 |
| **ASGI 服务器** | Uvicorn | 生产就绪服务器 |
| **语法引擎** | language-tool-python 3.4 | 基于规则的错误检测 |
| **AI 提供商** | Google Gemini API | 上下文感知的 AI 纠正 |
| **数据验证** | Pydantic 2.13.4 | 请求/响应验证 |
| **模板引擎** | Jinja2 3.1.6 | HTML 模板渲染 |
| **配置** | python-dotenv | 环境变量管理 |
### 前端技术栈
- **HTML5**:语义化标记
- **CSS3**:响应式设计与自定义样式
- **原生 JavaScript**:DOM 操作与 API 通信
- **设计**:粉色/梦幻主题,兼顾无障碍访问考量
### 关键依赖项说明
```
Core Processing:
- language-tool-python: Comprehensive grammar rules (English)
- google-genai: Google Gemini API client for AI corrections
Web Services:
- fastapi: Async request handling
- uvicorn: Production ASGI server
- jinja2: Template rendering
Data Handling:
- pydantic: Type-safe validation
- python-multipart: Form data parsing
Utilities:
- python-dotenv: Environment configuration
- requests: HTTP client library
```
## 项目架构
### 目录结构
```
grammer-checker/
├── main.py # FastAPI application entry point
├── requirements.txt # Python dependencies with versions
├── README.md # Comprehensive documentation (this file)
│
├── api/ # API layer
│ ├── __init__.py
│ └── routes.py # Grammar checker endpoint definitions
│
├── services/ # Business logic layer
│ ├── __init__.py
│ ├── grammarchecker.py # Core grammar checking orchestration
│ ├── aicorrector.py # Google Gemini AI integration
│ └── schemas.py # Pydantic data models and validators
│
├── evaluation/ # Quality assurance
│ ├── __init__.py
│ ├── evaluate.py # Test execution and reporting
│ └── test_cases.json # Test cases with expected outputs
│
└── templates/ # Frontend
└── index.html # Interactive web UI
```
### 组件交互图
```
┌─────────────────────────────────────────────────────────┐
│ User Interface │
│ (templates/index.html) │
└────────────────────┬────────────────────────────────────┘
│ HTTP POST /check-grammar
▼
┌─────────────────────────────────────────────────────────┐
│ FastAPI Application │
│ (main.py) │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ API Routes Layer │
│ (api/routes.py) │
│ • Input validation (GrammarInput schema) │
│ • Response formatting (GrammarOutput schema) │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Grammar Checker │
│ (services/grammarchecker.py) │
│ Primary orchestration logic: │
│ 1. Initial LanguageTool pass │
│ 2. Extract issues and context │
│ 3. Call Google Gemini AI for corrections │
│ 4. Diff original vs corrected text │
│ 5. Merge and deduplicate issues │
└────┬────────────────────────────┬───────────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────────────┐
│ LanguageTool │ │ Google Gemini AI Service │
│ (Rule-based) │ │ (services/aicorrector.py)│
│ │ │ │
│ • 50+ grammar │ │ • Natural language AI │
│ rules │ │ • Context-aware prompts │
│ • English US │ │ • Intelligent chunking │
│ • Pattern match │ │ • API-based (cloud) │
│ • Fast detection │ │ • Graceful fallback │
└──────────────────┘ └──────────────────────────┘
```
## 安装与设置
### 前置条件
在安装之前,请确保您具备:
- **Python 3.8+**(已在 3.10 和 3.11 版本上测试)
- **pip** 包管理器
- **虚拟环境**支持(venv 或 conda)
- **Google Gemini API 密钥**(可在 https://aistudio.google.com/ 获取免费额度)
- **约 2GB 磁盘空间**:用于存放依赖项
### 逐步安装指南
#### 1. 克隆代码库
```
git clone https://github.com/yourusername/grammer-checker.git
cd grammer-checker
```
#### 2. 创建虚拟环境
```
# 使用 venv(推荐)
python -m venv venv
# 激活 virtual environment
# 在 Windows 上:
venv\Scripts\activate
# 在 macOS/Linux 上:
source venv/bin/activate
```
#### 3. 安装依赖项
```
# 升级 pip
pip install --upgrade pip
# 安装所有依赖
pip install -r requirements.txt
```
#### 4. 设置环境变量
```
# 在项目根目录创建 .env 文件
echo GEMINI_API_KEY=your_api_key_here > .env
# 从以下网址获取你的 API key:https://aistudio.google.com/
```
#### 5. 验证安装
```
# 检查 Python 版本
python --version
# 测试 FastAPI
python -c "import fastapi; print(f'FastAPI {fastapi.__version__}')"
# 测试 language tools
python -c "import language_tool_python; print('Language Tool ready')"
# 测试 Gemini client
python -c "import google.genai; print('Gemini API ready')"
```
## 运行应用程序
### 开发服务器
```
# 以热重载模式运行以进行开发
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# 输出:
# INFO: Uvicorn running on http://0.0.0.0:8000
# INFO: Application startup complete
```
然后打开:`http://localhost:8000/dreamy-checker`
### 生产服务器
```
# 多 worker 生产环境设置
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
```
### 测试安装
```
# 通过 curl 测试
curl -X POST "http://localhost:8000/check-grammar" \
-H "Content-Type: application/json" \
-d '{"text": "He go to the store yesterday."}'
# 预期响应:
# {
# "original": "He go to the store yesterday.",
# "corrected": "He goes to the store yesterday.",
# "issues": [
# {
# "message": "Third person singular...",
# "context": "go"
# }
# ]
# }
```
## API 文档
### Base URL
```
http://localhost:8000
```
### Endpoint 概览
| 方法 | Endpoint | 用途 |
|--------|----------|---------|
| POST | `/check-grammar` | 检查并纠正语法 |
| GET | `/dreamy-checker` | 交互式 Web 界面 |
| GET | `/docs` | Swagger UI 文档 |
| GET | `/redoc` | ReDoc API 文档 |
### 详细 Endpoint 参考
#### 1. 语法检查器 Endpoint
```
POST /check-grammar
```
**用途**:分析文本中的语法错误并返回纠正建议
**Content-Type**:`application/json`
**请求体**:
```
{
"text": "Your text to check for grammar errors."
}
```
**字段说明**:
- `text`(字符串,必填):要检查的文本
- 最小长度:1 个字符
- 最大长度:无硬性限制(自动分块)
- 不得为空或仅包含空白字符
**请求示例**:
```
# 简单查询
curl -X POST "http://localhost:8000/check-grammar" \
-H "Content-Type: application/json" \
-d '{"text": "The cat are sleeping."}'
# 复杂文本
curl -X POST "http://localhost:8000/check-grammar" \
-H "Content-Type: application/json" \
-d '{
"text": "I have went to the store and buyed some milk. The weather were nice."
}'
# 长文档(自动分块)
curl -X POST "http://localhost:8000/check-grammar" \
-H "Content-Type: application/json" \
-d '{
"text": "Here is a very long text that spans multiple paragraphs and sentences..."
}'
```
**响应**(200 OK):
```
{
"original": "The cat are sleeping.",
"corrected": "The cat is sleeping.",
"issues": [
{
"message": "Subject-verb agreement: 'cat' is singular but 'are' is plural",
"context": "are"
}
]
}
```
**响应字段**:
- `original`(字符串):未更改的输入文本
- `corrected`(字符串):文本的纠正版本
- `issues`(数组):检测到的语法问题
- `message`(字符串):错误描述
- `context`(字符串):导致问题的特定单词/短语
**错误响应**:
422 Unprocessable Entity(文本为空):
```
{
"detail": [
{
"type": "value_error",
"loc": ["body", "text"],
"msg": "Text cannot be empty",
"input": ""
}
]
}
```
500 Internal Server Error(模型问题):
```
{
"detail": "Error loading AI model. Check logs for details."
}
```
**响应时间**:
- 冷启动(首次请求,加载模型):3-5 秒
- 后续请求:0.5-2 秒(平均 1.41 秒)
- 视文本长度和系统资源而定
#### 2. Web 界面 Endpoint
```
GET /dreamy-checker
```
**用途**:提供交互式 Web UI 服务
**响应**:包含嵌入 CSS/JavaScript 的 HTML 页面
**功能**:
- 实时语法检查
- 原文与纠正后文本的并排显示
- 带有上下文的问题列表
- 复制到剪贴板功能
- 漂亮的粉色/梦幻主题
- 响应式移动端设计
#### 3. API 文档
```
GET /docs # Swagger UI
GET /redoc # ReDoc
GET /openapi.json # OpenAPI spec
```
### 用户工作流
```
1. Navigate to /dreamy-checker
2. Paste or type text in input box
3. Click "Fix Grammar" button
4. See errors highlighted, corrected, and issues
5. Copy corrected text or try again
```
## 工作原理
### 双层语法检查流程
**第一层:基于规则的检测 (LanguageTool)**
- 使用 50 多种预定义语法规则检测问题
- 对原始文本进行快速模式匹配
- 提供基于规则的建议
- 过滤掉嘈杂的规则 (SKIP_RULES)
**第二层:AI 驱动的润色 (Google Gemini)**
- 将文本拆分为智能块(最多 180 个词)
- 将每个块连同语法纠正 prompt 一起发送到 Gemini API
- 利用 LLM 的理解能力进行上下文感知的纠正
- 如果 API 不可用,则平滑回退到原始文本
**整合与去重**
- 使用 SequenceMatcher 比较原始文本与 AI 纠正后的文本
- 提取单词级别的差异
- 合并来自两个层的问题
- 移除重复/重叠的问题
- 返回带有上下文的全面问题列表
### API 功能
- **优雅降级**:即使在 Gemini API 不可用时也能工作(返回 LanguageTool 结果)
- **自动分块**:处理任意长度的文档
- **上下文保留**:在纠正语法的同时保持语义
### 运行测试
```
# 执行评估套件
python -m evaluation.evaluate
# 输出包括:
# - 每个类别的测试结果
# - 整体成功指标
# - 平均响应时间
# - 失败用例详情
```
### 测试用例
测试用例存储在 `evaluation/test_cases.json` 中,涵盖:
- 冠词(a/an/the 的用法)
- 大小写(专有名词,句子开头)
- 混合错误(多种问题的组合)
- 所有格(撇号的位置)
- 介词(in/on/at/by 等)
- 代词(he/she/they 的一致性)
- 标点符号(逗号、句号、分号)
- 拼写(拼写错误和错别字)
- 主谓一致(复数/单数匹配)
- 时态(过去时、现在时、将来时的一致性)
### 测试用例结构
测试用例存储在 `evaluation/test_cases.json` 中:
```
[
{
"category": "subject_verb_agreement",
"input": "The dogs runs quickly.",
"expected": "The dogs run quickly."
},
{
"category": "spelling",
"input": "I recieved your message.",
"expected": "I received your message."
}
]
```
### 添加新测试用例
1. 编辑 `evaluation/test_cases.json`
2. 添加包含类别、输入和预期输出的条目
3. 运行评估:
python -m evaluation.evaluate
### 性能故障排除
| 症状 | 可能原因 | 解决方案 |
|---------|---------|----------|
| 未提供纠正建议 | Gemini API 密钥缺失/无效 | 将 GEMINI_API_KEY 添加到 .env |
| API 响应缓慢 | 触发限流 | 检查 Gemini API 配额 |
| 仅返回 LanguageTool 结果 | Gemini API 不可用 | 检查 API 连接,查看日志 |
| 空文本错误 | 无效输入 | 提供非空文本 |
| 文本分块不正确 | 文档过大 | 检查文本格式 |
## 部署
### Docker 部署
**Dockerfile**:
```
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```
**构建并运行**:
```
# 构建 image
docker build -t dreamy-checker .
# 使用环境变量运行
docker run -p 8000:8000 -e GEMINI_API_KEY=your_key_here dreamy-checker
# 或者使用 .env 文件
docker run -p 8000:8000 --env-file .env dreamy-checker
```
### 如何贡献
1. **Fork** 该代码库
2. **创建**一个功能分支(`git checkout -b feature/amazing-feature`)
3. **提交**您的更改(`git commit -m 'Add amazing feature'`)
4. **推送**到该分支(`git push origin feature/amazing-feature`)
5. **发起**一个 Pull Request
**最后更新**:2026 年 6 月\
**AI 引擎**:Google Gemini API\
**架构**:混合(基于规则 + AI 驱动)
标签:AV绕过, FastAPI, Gemini AI, LanguageTool, 后端开发, 数据可视化, 文本处理, 网络测绘, 语法检查, 逆向工具