基于 Flask + NLTK 的 PDF 术语提取工具,支持上传 PDF 或导入 Excel,自动去重合并、翻译、导出,并维护本地熟词库。
- 提取专业词汇:从 PDF 文本中提取高频术语和短语(词性过滤 + n-gram)
- 多文件去重合并:多次上传后按词条合并,频次自动累加
- 中文翻译:优先批量在线翻译,失败时自动降级到内置词典
- Excel 导入:可导入之前导出的
.xlsx词表并继续合并 - 熟词库过滤:可将已掌握词加入熟词库,后续提取自动过滤
- 表格交互:搜索、排序、双击编辑、Delete 删除、撤销
- 多格式导出:支持
CSV、Excel (.xlsx)、Anki (.txt) - 语境查看:点击词条可查看原文句子示例
- 后端:Flask, Flask-CORS
- PDF 解析:pdfplumber
- NLP:NLTK
- Excel:openpyxl
- 翻译:translators(Bing + fallback)
- 前端:原生 JavaScript + HTML + CSS
- Python 3.9+
- Windows/macOS/Linux
# 1) 安装依赖(自动创建虚拟环境)
uv sync
# 2) 启动服务
uv run pdf
# 或者直接运行
# uv run python app.py启动后访问:http://127.0.0.1:5000
- 上传
PDF:提取词汇并自动翻译。 - 上传
Excel(.xlsx):导入历史词表并和当前结果去重合并。 - 在表格中可搜索、排序、双击编辑。
- 点击右侧按钮可将词条标记为“熟词”。
- 按需导出为
CSV/Excel/Anki。
上传 PDF 并返回提取结果。
- 请求:
multipart/form-data - 参数:
file(.pdf)
示例响应:
{
"filename": "paper.pdf",
"total_extracted": 42,
"vocabulary": [
{
"term": "neural network",
"pos": "phrase",
"frequency": 8,
"context": ["..."] ,
"translation": "神经网络"
}
]
}导入 Excel 词表并返回解析结果。
- 请求:
multipart/form-data - 参数:
file(.xlsx)
支持表头别名:
词汇/term词性/pos中文释义/translation出现频次/频次/frequency示例原句/context
导出当前词表。
- 请求:
application/json
{
"format": "csv",
"vocabulary": []
}format可选:csv/excel/anki
GET /known_words:获取熟词列表POST /known_words:批量新增熟词DELETE /known_words:批量移除熟词
请求示例:
{
"words": ["efficient", "oil"]
}pdf/
├── app.py # Flask 应用与 API
├── extractor.py # 术语提取与语境索引
├── translator.py # 批量翻译与词典回退
├── main.py # 入口点 (uv run pdf)
├── known_words.json # 熟词库(本地持久化)
├── pyproject.toml # 项目配置与依赖(UV 管理)
├── uv.lock # 锁定文件
├── templates/
│ └── index.html
└── static/
├── app.js
└── style.css
- 最大上传大小:
app.py中MAX_CONTENT_LENGTH(默认50MB) - 提取参数:
extractor.py中extract_vocabulary(min_freq=2, max_terms=200) - 自定义停用词:
extractor.py中EXTRA_STOP_WORDS
- 扫描版 PDF(纯图片)通常无法直接提取文本,需要先 OCR。
- 首次运行会下载 NLTK 数据。
- 在线翻译不可用时会自动使用内置词典回退。
MIT