Skip to content

AI-powered translation tool for professionals handling technical documents, long texts, novels, and rulebooks. Optimizes proper noun accuracy with 35% higher recognition rate and 99% token savings vs traditional RAG. Supports CLI/WebUI and multiple formats (PDF/PPT/Word).

License

Notifications You must be signed in to change notification settings

chaosen315/AIwork4translator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AIwork4translator

Python Version License

Precise AI translation method with noun comparison list.

中文 | English

最近更新(2025/12/09)

我们持续优化了程序的健壮性与交互体验,新增了针对异常场景的全面保护机制,并完善了术语动态管理功能:

🛡️ 异常保护与中断恢复

  • 交互式故障恢复:当 API 连续失败次数达到上限时,程序不再直接退出,而是暂停并提供选项:用户可选择“重置失败计数并继续重试”或“保存当前进度后退出”。
  • 手动中断保护:捕获 Ctrl+C 中断信号,确保在用户手动停止程序时,能够安全保存已累积的术语表和剩余未翻译的原文。
  • 断点续传支持:程序自动定位并保存未翻译部分为 _rest.md 文件,方便后续继续翻译。
  • API 内容自动修复:针对 API 返回的 JSON 格式错误,实现了自动检测与段落级重试机制,防止因单次解析失败导致程序崩溃。

🚀 交互体验与术语管理

  • CLI 偏好记忆:启动时自动加载上次使用的 API 平台、文件路径等配置,直接回车即可沿用。
  • 术语并集匹配:翻译过程中实时收集“新术语”,与 CSV 词表形成并集参与匹配,最大化术语命中率。
  • 可控合并开关:翻译结束或中断时,用户可交互选择是否将新收集的术语合并到原词表中;不合并也会自动导出为独立 CSV 文件(原文件名_时间戳.csv)。
  • 专有名匹配优化:对全大写/首字母大写的专有名(如 HOPKINS/Hopkins)进行更稳健的大小写规整。

您需要注意的:

  • 程序稳定性:当前版本的程序仍在不断完善中,可能存在一些 bug 或不足。如果您在使用过程中遇到任何问题,欢迎及时反馈,我们会尽快解决。
  • API请求耗时过长:由于调用大模型API需要一定的时间,因此在翻译长篇文档时,可能会出现API请求耗时过长的情况。我们会在后续版本中优化这一问题。
  • 提示词需要优化:当前版本的提示词可能不够完善,导致翻译效果不佳。我们需要更多人的使用与意见反馈,才能在后续版本中不断优化提示词,提升翻译质量。

计划变更:由于“空白术语表生成功能”当前效果不佳,已决定暂时下架,后续视情况重构或不再提供。

目录

简介

AIwork4translator 是一个专业的文档翻译工具,通过专有名词识别和正则过滤方法,确保大模型翻译时准确使用专业术语。它能够智能处理各种格式的技术文档,保留原文格式和专有名词,提供高质量的翻译结果。

功能特性

  • 专有名词识别与保护:使用 Aho-Corasick 自动机高效匹配术语,支持复数归一化与冠词智能处理,确保术语在翻译中保持一致。
  • 术语动态管理(重构核心):在长篇文档翻译过程中,实时采集“新术语”并与词表形成并集参与匹配;支持“是否合并新术语到词表”的交互开关;遇到短暂 API 波动自动进行段落级重试,显著提升稳定性与一致性。
  • 多格式支持:支持.txt.md格式文件的翻译,通过MarkItDown工具还可以支持PDF、PowerPoint、Word、Excel、HTML等更多格式
  • 多种翻译引擎:支持多种API翻译引擎,包括OpenAI、Kimi、DeepSeek、Ollama等
  • 命令行与WebUI双模式:提供命令行和Web界面两种使用方式,满足不同场景需求
  • CLI 偏好记忆:命令行版本自动记录上次使用的 API 平台与文件路径,提升交互效率。
  • 双栏Markdown编辑器:WebUI中提供左右分栏的原文/译文实时展示功能
  • 实时翻译进度展示:翻译过程中实时显示当前处理的段落数/总段落数
  • 中断保护与恢复:支持 Ctrl+C 安全中断,自动保存进度与未翻译内容
  • 交互式故障恢复:API 连续失败时提供暂停与重试选项,防止任务意外终止
  • 轮询机制:采用高效的轮询机制,实时获取并更新翻译进度和内容
  • 自动保存功能:翻译完成后自动检测并保存用户修改
  • 交互式确认:非Markdown文件转换后提供用户确认环节,确保转换质量
  • 空白名词表生成:可自动识别原文中的实体名词并生成空白名词表(命令行版本)(注意:该功能计划将在近期暂时下架,详见下文“开发计划”)
  • 结构化/非结构化翻译模式:支持基于Markdown标题结构的智能分段处理

程序结构

project_root/
├── data/
│   └── .env
├── models/
│   └── dbmdz/bert-large-cased-finetuned-conll03-english-for-ner/
│       ├── config.json
│       ├── gitattributes
│       ├── model.safetensors
│       ├── special_tokens_map.json
│       ├── tokenizer.json
│       ├── tokenizer_config.json
│       └── vocab.txt
├── modules/                # 统一的业务模块
│   ├── __init__.py
│   ├── api_tool.py         # LLMService 与各供应商适配(返回content,tokens)
│   ├── config.py           # GlobalConfig(env优先),不含会话缓存
│   ├── count_tool.py
│   ├── csv_process_tool.py # Aho-Corasick 匹配与 CSV 校验
│   ├── markitdown_tool.py
│   ├── ner_list_tool.py    # 稳健模型查找,优先根 models/
│   ├── read_tool.py
│   └── write_out_tool.py   # 默认不写 “# end”
├── templates/
│   ├── index.html
│   └── editor.html
├── static/
│   ├── style.css
│   ├── script.js
│   └── editor.js
├── uploads/                # WebUI 上传与输出目录(由后端挂载)
├── app.py                  # WebUI 根入口(提供 main())
├── main.py                 # CLI 根入口(交互式,支持偏好持久化)
├── baseline.py             # CLI 基线示例(不含RAG缓存)
├── ner_list_check.py       # NER 生成名词表工具
└── pyproject.toml          # 脚本入口:CLI/WebUI

原理

本项目的核心是在翻译前后对专有名词进行智能识别与约束。我们通过 Aho-Corasick 算法与正则在段落中捕捉术语,并在提示词中显式要求模型遵循这些译名,从而提升术语一致性与可审阅性。系统支持复数形式自动归一化(如 "outlaws" -> "outlaw")及灵活的冠词匹配(如 "the Outlaw" 可匹配 "an outlaw")。与传统 RAG 方案相比,初步测试显示:额外 token 开销可减少约 99%,术语命中数量提升约 35%,整体译文质量因术语准确度提升而更稳定。

同时,任何词表都不可能覆盖文本中的所有新术语。为此,系统会在翻译结果中自动汇总并标注未覆盖的新名词,便于编辑审核与补充词表。

推荐的使用方式:输入 Markdown 原文与 CSV 词表,输出为 Markdown 译文。对于非 Markdown 文件,该程序会自动识别并使用 MarkItDown 转换后再翻译。感谢 MarkItDown 的贡献;目前 PDF(非 OCR)表现良好,OCR PDF 仍待进一步验证。

也可以使用通过 MinerU 解析获得的 Markdown 文件作为输入,程序对此的适配良好。

效果演示

image1

支持环境

Python:3.10-3.13

使用教程

命令行版本

基本使用步骤

  1. 使用 uv 进行依赖管理:在项目根目录执行 uv sync(默认创建并使用 .venv
  2. 激活虚拟环境(Windows:\.venv\Scripts\activate
  3. 修改 data\.env 中的环境变量,配置 API KEY 等
  4. 运行根入口 uv run main.py,按提示选择供应商与文件路径
  5. 新增/卸载依赖:uv add <package> / uv remove <package>
  6. 运行 python -m pytest 执行测试(用例已绑定根入口与资源)。

使用注意事项(重要)

  • 配置与密钥:在 data/.env 配置 API KEY,切勿提交到仓库;连续 API 失败≥3次时,运行 CLI 的 API 测试并检查网络/代理。默认 Kimi:BASE_URL=https://api.moonshot.cn/v1MODEL=kimi-k2-turbo-preview
  • 词表质量与性能:CSV 必须两列、UTF-8、无空行、原文列唯一。大规模词表会增加匹配耗时,但得益于 Aho-Corasick 优化,数千条术语仍能毫秒级匹配。支持多词术语与复数形式。
  • 交互偏好:CLI 会自动记录上次使用的 API 平台与文件路径(存储于 data/.prefs.json),下次启动时通过 [...] 提示预填充,直接回车即可沿用。
  • 输入与结构:优先提供原生 Markdown;非 Markdown 会自动转换,转换后请人工校对再继续。结构化模式依赖标题层级,建议合理使用 #/## 标题。
  • 段落与大文件:超长段落会被智能拆分;极大文件处理时间较长,WebUI 建议≤10MB;CLI 进度以“当前/总段落”显示,请耐心等待。
  • 翻译一致性:为提高术语一致性,建议降低 temperature;提示词已显式注入术语对照以提升稳定性。
  • 本地模型:如使用 Ollama,请在 .env 设置 OLLAMA_BASE_URLOLLAMA_MODEL,首次使用需确认服务已启动。
  • 日志与输出:CLI 打印“共耗时:x时x分x秒”;统计表 counting_table.csv 记录原始秒数与 tokens;WebUI 终端输出带时间戳。

文件转换确认功能

当处理非Markdown格式文件时,程序会先将其转换为Markdown格式。转换完成后,程序会暂停并显示以下信息:

  • 生成的Markdown文件路径
  • 文件大小和段落数量
  • 提示用户输入y继续翻译,或输入n退出程序

示例提示信息:

文件转换完成,路径为【d:\BaiduSyncdisk\桌游\program_translator\data\test_file_output.md】,字数为【1500】,段落数量为【20】,是否继续翻译?如果选择n将结束程序。(y/n)

实时进度显示

翻译过程中,系统会实时显示当前翻译进度:

正在翻译段落【当前段落数】/【总段落数】

名词表处理

  1. 如果没有csv格式的名词表,输入n,程序会自动创建一个空白的名词表文件。

    • 文件名格式:[原文件名]_output_terminology.csv
    • 你可以在翻译结束后(或中断后)填写该文件,以便下次使用。
    • 注:基于NER的自动生成功能暂时下架。
  2. 如果已有csv格式的名词表,输入y进入名词表文件上传流程。

    • 输入csv格式的名词表文件路径(支持直接输入 .xlsx 文件路径,程序会自动转换)。
    • 新术语合并选项
      • 输入路径后,程序会询问“是否将新术语合并到术语表?(y/n)”。
      • 选择 y:新发现的术语将直接追加到你提供的原CSV文件中(去重合并),并另存为备份。
      • 选择 n:新术语将单独保存为一个新的CSV文件,不影响原文件。

注意事项

  • 确保在\data文件夹中修改环境变量,将API_KEY更换为你自己的
  • 开发过程中主要使用kimi进行测试,其他翻译引擎的API访问代码未充分测试
  • 对于本地Ollama模型,需要修改\data\.env中的OLLAMA_BASE_URLOLLAMA_MODEL配置

WebUI版本

基本使用步骤

  1. 修改根 data\.env 中的环境变量,配置 API KEY 等
  2. 运行根入口 uv run app.py 或脚本 program-translator-webui
  3. 打开终端返回的链接,或直接在浏览器中输入 http://localhost:8008/
  4. 首页上传 .md.csv 验证后,点击“使用双栏编辑器”,在编辑器页面点击“开始翻译”。
  5. 验证端点:/validate-file/start-translation/translation-progress/save-content/download/open-file
  6. 在界面中依次点击“选择文件”与“验证文件/词典”,等待成功提示
  7. 选择所使用的API供应平台与模型
  8. 点击“开始处理文本”按钮,系统会开始处理文本并跳转到双栏编辑器页面
  9. 在双栏编辑器页面,点击“开始翻译”按钮启动翻译过程
  10. 翻译过程中,可以在右侧编辑器实时查看翻译进度和结果
  11. 翻译完成后,可以直接在右侧编辑器编辑内容
  12. 系统会自动保存内容,也可以使用Ctrl+S快捷键手动保存

双栏编辑器功能

  • 左侧编辑器:显示原文内容,默认为只读模式
  • 右侧编辑器:实时显示翻译结果,支持编辑
  • 进度显示:在翻译过程中显示当前处理的段落数/总段落数
  • 自动保存:翻译结束后,每隔约20秒自动检查并保存内容变更
  • 宽度调节:可通过拖拽两个编辑器中间的分隔线调整宽度

轮询机制

  • 系统采用5秒间隔的轮询机制,实时从后端获取翻译进度和新内容
  • 轮询过程中,只更新新增的翻译内容,避免整个文档重新加载
  • 翻译完成后,轮询自动停止

技术实现细节

WebUI 使用 FastAPI 框架开发,主要文件位于根目录:

核心文件:

  • app.py: Web 应用主入口,包含路由定义与 API 实现
  • templates/index.html: 主页面模板
  • templates/editor.html: 双栏编辑器页面模板
  • static/style.css: 样式文件
  • static/script.js: 前端交互逻辑
  • static/editor.js: 编辑器与轮询逻辑

主要API端点:

  • /: 首页,展示上传表单
  • /validate-file: 文件验证与格式转换接口
  • /process: 处理参数并跳转到编辑器页面
  • /editor: 双栏编辑器页面
  • /start-translation: 启动翻译任务接口
  • /translation-progress: 查询翻译进度和内容接口
  • /save-content: 保存编辑器内容接口
  • /download: 下载结果文件接口
  • /open-file: 打开文件接口
  • /load-content: 加载文件内容接口
  • /test-api: LLM API连接测试接口

image2

界面截图

image3

下载页面:在右键菜单中选择“另存为”即可。

注意事项

  • 文件大小不应超过10MB
  • 过大的文件可能导致处理时间较长,请耐心等待
  • 对于格式复杂的文件,可能需要先手动转换为Markdown格式,以获得更好的翻译效果

名词表格式

原文 译文
…… ……
…… ……

在提供名词表后,程序设置了严格的审核步骤以确保名词表可以被正确使用。你可以提前确保以下几个标准以减少在这个步骤中需要花费的时间:

1. 确保文件无空行与空值2. 确保原文列无重复值3. 确保可以用UTF-8解码

推荐的md文档格式

  • 文档应采用Markdown格式编写
  • 文档中不包含目录,可能在切分中被误识别为段落。
  • 文档中应包含标题(H1-H6),用于组织文档结构——标题与标题之间最好写有正文,否则可能在切分中被误识别为段落,导致模型不能正常翻译。
  • 文档中每个标题上方有至少2个空行,用于分隔不同段落。
  • 文档中不建议包含链接(文本),可能在切分中被损坏。
  • 文档中不建议包含图片(描述),可能在切分中被损坏。

进阶使用

翻译模式说明

  • 非结构化翻译模式:适用于由Markitdown工具转换的非MD文件

    • 不会识别MD文档的标题结构
    • 适用于格式较为简单的文档
  • 结构化翻译模式:适用于原生MD文件

    • 默认识别文件中最多6级的标题结构
    • 智能根据文本结构进行文段切割
    • 默认分行符号为两个换行符号

本地模型支持

已支持Ollama本地部署模型的接入。通过修改\data\.env中的以下配置来调用本地模型:

  • OLLAMA_BASE_URL: Ollama服务的URL
  • OLLAMA_MODEL: 要使用的模型名称

快速开始(uv)

# 同步项目依赖(默认 .venv)
uv sync

# 安装或卸载依赖
uv add <package>
uv remove <package>

# 运行 CLI
uv run main.py

# 运行 WebUI
uv run app.py

# 运行测试
python -m pytest

环境与默认配置

  • .env 位于根 data/.env;默认 LLM 配置:
    • KIMI_BASE_URL=https://api.moonshot.cn/v1
    • KIMI_MODEL=kimi-k2-turbo-preview
    • 建议参数:max_tokens=2048temperature=0.7top_p=0.95
    • 请务必安全保存 API KEY,不要提交到仓库。

迁移说明(2025/11/29)

  • 已合并 src/webui_project/ 到根结构;删除旧目录以减少路径混淆。
  • 统一模块到根 modules/,移除 RAG 缓存;WebUI 与 CLI 对齐返回值与写出策略(平铺默认不写 # end)。
  • 脚本入口更新为根:program-translator-cli = "main:main"program-translator-webui = "app:main"

开发计划

  • 1.2.0 版本:基础功能完成,包括 CLI、WebUI、模型支持等。
  • 未来版本:
    • 计划通过MinerU增强对Markdown文件的解析性能。
    • 计划实现传统CAP软件的交互模式,例如表格形式的翻译界面,原文与译文逐句对应,用户可以方便地进行编辑和修改。
    • 段落切分策略改进:更优雅地处理短段落和长难句,避免模型翻译时出现不自然的断句。
    • 计划添加对术语表实时更新的功能,在文档中识别到陌生术语后会自动添加到术语表中,用户可以在翻译过程中实时查看和更新术语表。 已完成:术语动态管理(并集匹配、合并开关、收集新术语与导出)。
    • 计划增强空白术语表的生成效果,除了实体类型外,还提供术语的翻译建议,帮助用户更准确地翻译文档。 新计划:暂时下架“空白术语表生成”功能,因当前效果不佳;后续视情况重构或不再提供。

联系方式

对于该程序有更多想法或遇到部署问题可以发信至chasen0315@gmail.com。最迟24小时内(截止2025/12/29)会进行回复。

About

AI-powered translation tool for professionals handling technical documents, long texts, novels, and rulebooks. Optimizes proper noun accuracy with 35% higher recognition rate and 99% token savings vs traditional RAG. Supports CLI/WebUI and multiple formats (PDF/PPT/Word).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •