Skip to content

chaosen315/AIwork4translator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

113 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AIwork4translator

Python Version License

Precise AI translation method with noun comparison list.

中文 | English

最近更新(2025/12/24)

🔍 英文论文跨页断句检测

新增智能跨页断句检测功能,特别针对英文论文格式优化:

  • 跨页断句判定:使用强否决+计分机制,识别句末标点、缩写结尾等,有效提升英文论文段落连续性
  • 图片段落跳过:合并逻辑可智能跳过图片段落,避免对非文本内容的误操作
  • 位置保持:图片段落跳过后可保持原文档中的相对位置,确保文档结构完整性

⚡ 并发模式重大性能突破

我们实现了全新的并发翻译架构,带来显著的性能提升:

  • Queue + Worker Pool模式:采用asyncio.Queue + 工作池架构,支持6并发工作线程
  • 性能提升:81页内容从原本3小时缩短至30分钟以内,性能提升约6倍
  • 顺序保证:通过段落编号排序和写锁机制,确保翻译结果按原文顺序输出
  • 智能调度:支持通过Currency_Limit环境变量灵活调整并发数(默认5,最大不超过RPM,即每分钟请求数的限制。)

🛡️ 异常保护与中断恢复

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

🏗️ 核心架构重构

  • 统一翻译核心:新增TranslationCore模块,统一CLI和WebUI的翻译逻辑,消除代码重复
  • 异步诊断机制:引入非阻塞API诊断和全局错误状态管理,提升系统稳定性
  • 类型安全:统一术语聚合形态,解决并发环境下的类型不一致问题

🚀 交互体验与术语管理

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

📊 性能监控与可视化

  • 实时进度:翻译过程中实时显示当前段落/总段落数,预估剩余时间
  • 资源监控:队列状态监控日志,直观显示并发健康状态

您需要注意的:

  • 并发配置:大文件翻译建议设置Currency_Limit=8-10获得最佳性能,但需确保API配额充足
  • 程序稳定性:当前版本的程序仍在不断完善中,可能存在一些 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                # 环境变量配置(API密钥、模型参数等)
├── modules/                # 统一的业务模块(核心翻译逻辑)
│   ├── __init__.py
│   ├── api_tool.py         # LLMService 与各供应商适配(返回content,tokens)
│   ├── config.py           # GlobalConfig(env优先),不含会话缓存
│   ├── count_tool.py       # 统计工具(tokens计数、性能监控)
│   ├── csv_process_tool.py # Aho-Corasick 匹配与 CSV 校验
│   ├── markitdown_tool.py  # 非Markdown格式转换(PDF/Word/Excel等)
│   ├── read_tool.py        # 文件读取与结构化分段
│   ├── terminology_tool.py # 术语表管理(保存、合并、格式化)
│   ├── translation_core.py # 翻译核心引擎(封装统一翻译流程)
│   └── write_out_tool.py   # 结构化/平铺写出,默认不写 "# end"
├── services/               # 服务层(异步诊断、全局状态管理)
│   ├── __init__.py
│   └── diagnostics.py      # 异步诊断管理(单例模式)
├── templates/              # WebUI模板
│   ├── index.html          # 文件上传页面
│   └── editor.html         # 双栏编辑器页面
├── static/                 # WebUI静态资源
│   ├── style.css           # 全局样式
│   ├── script.js           # 主页交互逻辑
│   └── editor.js           # 编辑器与轮询逻辑
├── uploads/                # WebUI 上传与输出目录(由后端挂载)
├── app.py                  # WebUI 根入口(提供 main())
├── main.py                 # CLI 根入口(交互式,支持偏好持久化)
└── 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"

开发计划

  • MinerU集成:通过MinerU增强对Markdown文件的解析性能
  • CAP交互模式:实现传统CAP软件的交互模式,例如表格形式的翻译界面,原文与译文逐句对应

已完成(2025/12/24)

  • ✅ 英文论文跨页断句检测与图片段落跳过
  • ✅ 并发架构优化与队列工作池模式
  • ✅ API内容自动修复与双层降级策略
  • ✅ CLI偏好记忆与术语动态管理

联系方式

对于该程序有更多想法或遇到部署问题可以发信至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

 
 
 

Contributors