point / README.md
eithney
code ref
e74eb63
|
Raw
History Blame Contribute Delete
7.64 kB
---
title: 交互式学习平台
emoji: 📚
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---
# 交互式英语学习平台
基于 data 数据结构的交互式英语学习应用,支持点读、音频播放、翻译显示等功能。
## 📋 功能特性
### 书籍目录页面
- 📚 显示所有可用教材
- 🔍 搜索教材名称和分类
- 📊 显示统计信息(教材数、页面数、内容片段数等)
- 🎨 精美的卡片式布局
### 阅读页面
- 📖 交互式点读功能
- 🔊 音频播放控制
- 🌐 中英文翻译切换
- 📑 章节目录导航
- 🔖 书签功能
- 🔍 全文搜索
- ⚙️ 个性化设置(播放速度、自动翻译等)
- ⌨️ 键盘快捷键支持
## 🚀 快速开始
### 1. 环境要求
- Python 3.12
- SQLite 3
- 现代浏览器(Chrome、Firefox、Safari、Edge)
### 2. 安装依赖
```bash
pip install flask flask-cors
```
### 3. 准备数据
`data` 目录放置在项目根目录下:
```
/data/zhangl/code/hf/point/
├── data/ # 教材数据目录
│ ├── 168_一年级上册/
│ │ ├── book_info.json
│ │ ├── pages.json
│ │ ├── catalog.json
│ │ ├── images/
│ │ └── audios/
│ ├── 169_二年级上册/
│ └── ...
├── app.py
├── import_book_data.py
└── ...
```
### 4. 导入数据到数据库
```bash
# 首次导入(会自动创建数据库)
python3 import_book_data.py data
# 重新导入所有数据(删除现有数据库)
python3 import_book_data.py data --recreate
# 仅验证数据
python3 import_book_data.py --verify-only
```
导入选项:
- `data_dir`: 数据目录路径(默认:data)
- `--db`: 数据库文件路径(默认:books.db)
- `--schema`: Schema 文件路径(默认:db_schema.sql)
- `--recreate`: 删除现有数据库并重新创建
- `--verify-only`: 仅验证数据,不导入
### 5. 启动应用
```bash
python3 app.py
```
应用将在 `http://0.0.0.0:7860` 启动。
访问地址:
- 书籍目录:`http://localhost:7860/`
- 阅读页面:`http://localhost:7860/reader?book_id=168`
## 📁 项目结构
```
/data/zhangl/code/hf/point/
├── data/ # 教材数据目录
├── static/
│ ├── css/
│ │ ├── style.css # 主样式文件
│ │ ├── inter.css # Inter 字体
│ │ └── all.min.css # Font Awesome 图标
│ └── js/
│ ├── catalog.js # 书籍目录页面逻辑
│ └── reader.js # 阅读页面逻辑
├── app.py # Flask 应用主文件
├── db_manager.py # 数据库管理器
├── import_book_data.py # 数据导入脚本
├── db_schema.sql # 数据库结构定义
├── index.html # 书籍目录页面
├── reader.html # 阅读页面
├── books.db # SQLite 数据库(自动生成)
└── README.md
```
## 🗄️ 数据库结构
### books 表
存储书籍的基本信息:
- `market_book_id`: 书籍ID(主键)
- `market_book_name`: 书籍名称
- `market_book_cover`: 封面图片路径
- `max_page`: 最大页码
- `grade_id`: 年级ID
- `reel_id`: 学期ID(1=上册,2=下册)
- 等等...
### pages 表
存储页面信息:
- `page_id`: 页面ID(主键)
- `book_id`: 所属书籍ID
- `page_number`: 页码
- `origin_img_url`: 原始图片路径
- `encrypt_img_url`: 加密图片路径
### pieces 表
存储页面内容片段:
- `piece_id`: 片段ID(主键)
- `page_id`: 所属页面ID
- `original`: 原文(英文)
- `translation`: 译文(中文)
- `origin_sound_url`: 音频路径
- `duration`: 音频时长
- `coordinate_x/y/width/height`: 坐标信息
- 等等...
### catalogs 表
存储书籍目录结构:
- `catalog_id`: 目录项ID(主键)
- `book_id`: 所属书籍ID
- `catalog_name`: 目录名称(英文)
- `catalog_name_cn`: 目录名称(中文)
- `start_page/end_page`: 起止页码
- `parent_id`: 父级目录ID(支持树形结构)
### pieces_fts 表
全文搜索索引(FTS5):
- 支持在 `original` 和 `translation` 字段中快速搜索
## 🔌 API 接口
### 书籍相关
#### 获取所有书籍列表
```
GET /api/v2/books?grade_id=40
```
#### 获取书籍详情
```
GET /api/v2/books/{book_id}
```
#### 获取书籍页面列表
```
GET /api/v2/books/{book_id}/pages
```
#### 获取书籍目录结构
```
GET /api/v2/books/{book_id}/catalog
```
#### 获取页面内容
```
GET /api/v2/books/{book_id}/pages/{page_number}
```
### 搜索相关
#### 在书籍中搜索
```
GET /api/v2/books/{book_id}/search?keyword=hello&limit=20
```
#### 全局搜索
```
GET /api/v2/search?keyword=hello&limit=50
```
### 统计相关
#### 获取书籍统计信息
```
GET /api/v2/books/{book_id}/statistics
```
#### 获取整体统计信息
```
GET /api/v2/statistics
```
## ⌨️ 键盘快捷键
在阅读页面中:
- `←` / `→`: 上一页 / 下一页
- `Space`: 播放/暂停音频
- `T`: 切换翻译显示
- `I`: 切换交互区域显示
- `Esc`: 关闭弹出面板
## 🎨 功能亮点
1. **按需加载**: 页面内容按需加载,提高性能
2. **全文搜索**: 使用 SQLite FTS5 实现高效全文搜索
3. **响应式设计**: 自适应不同屏幕尺寸
4. **交互式点读**: 点击文本片段播放对应音频
5. **坐标系统**: 使用相对坐标,适配不同分辨率
6. **目录导航**: 支持章节目录快速跳转
7. **本地资源**: 支持从本地 data 目录加载资源
## 🔧 开发调试
### 启用调试模式
```bash
export FLASK_DEBUG=True
python3 app.py
```
### 查看日志
应用日志存储在 `logs/app.log`
### 数据库操作
使用 `db_manager.py` 提供的数据库管理器:
```python
from db_manager import get_db_instance
db = get_db_instance('books.db')
# 获取所有书籍
books = db.get_all_books()
# 搜索内容
results = db.search_content(book_id=168, keyword='hello', limit=20)
# 获取统计信息
stats = db.get_overall_statistics()
```
## 📝 数据格式说明
### 坐标系统
文本片段的坐标使用相对坐标(0-1范围):
```json
{
"coordinate": {
"x": 0.0482, // 左上角X坐标(相对于图片宽度)
"y": 0.0357, // 左上角Y坐标(相对于图片高度)
"width": 0.3195, // 宽度(相对于图片宽度)
"height": 0.0982 // 高度(相对于图片高度)
}
}
```
### 资源路径
资源路径采用相对路径格式:
```
168_一年级上册/images/page_001.jpg
168_一年级上册/audios/page_002_piece_00.mp3
```
实际访问时会自动拼接为:
```
data/168_一年级上册/images/page_001.jpg
data/168_一年级上册/audios/page_002_piece_00.mp3
```
## 🐛 故障排除
### 数据库导入失败
- 检查 data 目录是否存在
- 确保每个书籍目录包含 book_info.json、pages.json
- 检查 db_schema.sql 文件是否存在
### 页面加载失败
- 检查数据库是否正确导入
- 查看浏览器控制台是否有错误
- 检查 data 目录下的资源文件是否完整
### 音频播放失败
- 检查音频文件路径是否正确
- 确保浏览器支持 MP3 格式
- 查看浏览器控制台错误信息
## 📄 许可证
本项目仅供学习和研究使用。
## 👥 贡献
欢迎提交 Issue 和 Pull Request。
## 📞 联系方式
如有问题或建议,请联系开发团队。
---
**版本**: v2.0.0
**更新日期**: 2025-10-17
**Python版本**: 3.12
**数据库**: SQLite 3