科學 PDF 文件翻譯及雙語對照工具
歡迎在 GitHub Issues、Telegram 使用者群 或 QQ 使用者群 中提出回饋
如需瞭解如何貢獻的詳細資訊,請查閱 貢獻指南
- [Dec. 24 2024] 翻譯功能支援接入由 Xinference 執行的本機 LLM (by @imClumsyPanda)
- [Nov. 26 2024] CLI 現在已支援(多個)線上 PDF 檔 (by @reycn)
- [Nov. 24 2024] 為了降低依賴大小,提供 ONNX 支援 (by @Wybxc)
- [Nov. 23 2024] 🌟 免費公共服務 上線! (by @Byaidu)
- [Nov. 23 2024] 新增防止網頁爬蟲的防火牆 (by @Byaidu)
- [Nov. 22 2024] 圖形使用者介面現已支援義大利語並進行了一些更新 (by @Byaidu, @reycn)
- [Nov. 22 2024] 現在你可以將自己部署的服務分享給朋友 (by @Zxis233)
- [Nov. 22 2024] 支援騰訊翻譯 (by @hellofinch)
- [Nov. 21 2024] 圖形使用者介面現在支援下載雙語文件 (by @reycn)
- [Nov. 20 2024] 🌟 提供了 線上示範! (by @reycn)
免費服務 (https://pdf2zh.com/)
你可以立即嘗試 免費公共服務 而無需安裝
你可以直接在 HuggingFace 上的線上示範和魔搭的線上示範進行嘗試,無需安裝。 請注意,示範使用的運算資源有限,請勿濫用。
我們提供了四種使用此專案的方法:命令列工具、便攜式安裝、圖形使用者介面 與 容器化部署。
pdf2zh 在執行時需要額外下載模型(wybxc/DocLayout-YOLO-DocStructBench-onnx
),該模型也可在魔搭(ModelScope)上取得。如果在啟動時下載該模型時遇到問題,請使用如下環境變數:
set HF_ENDPOINT=https://hf-mirror.com
-
確保已安裝 Python 版本大於 3.8 且小於 3.12
-
安裝此程式:
pip install pdf2zh
-
執行翻譯,生成檔案位於 目前工作目錄:
pdf2zh document.pdf
無需預先安裝 Python 環境
下載 setup.bat 並直接雙擊執行
-
確保已安裝 Python 版本大於 3.8 且小於 3.12
-
安裝此程式:
pip install pdf2zh
-
在瀏覽器中啟動使用:
pdf2zh -i
-
如果您的瀏覽器沒有自動開啟並跳轉,請手動在瀏覽器開啟:
http://localhost:7860/
查看 documentation for GUI 以獲取詳細說明
-
拉取 Docker 映像檔並執行:
docker pull byaidu/pdf2zh docker run -d -p 7860:7860 byaidu/pdf2zh
-
透過瀏覽器開啟:
http://localhost:7860/
用於在雲服務上部署容器映像檔:
在命令列中執行翻譯指令,並在目前工作目錄下生成譯文檔案 example-mono.pdf
和雙語對照檔案 example-dual.pdf
。預設使用 Google 翻譯服務。
以下表格列出了所有高級選項,供參考:
Option | 功能 | 範例 |
---|---|---|
files | 本機檔案 | pdf2zh ~/local.pdf |
links | 線上檔案 | pdf2zh http://arxiv.org/paper.pdf |
-i |
進入圖形介面 | pdf2zh -i |
-p |
僅翻譯部分文件 | pdf2zh example.pdf -p 1 |
-li |
原文語言 | pdf2zh example.pdf -li en |
-lo |
目標語言 | pdf2zh example.pdf -lo zh |
-s |
指定翻譯服務 | pdf2zh example.pdf -s deepl |
-t |
多執行緒 | pdf2zh example.pdf -t 1 |
-o |
輸出目錄 | pdf2zh example.pdf -o output |
-f , -c |
例外規則 | pdf2zh example.pdf -f "(MS.*)" |
--share |
[獲取 gradio 公開連結] | pdf2zh -i --share |
--authorized |
[添加網頁認證及自訂認證頁面] | pdf2zh -i --authorized users.txt [auth.html] |
--prompt |
[使用自訂的大模型 Prompt] | pdf2zh --prompt [prompt.txt] |
--onnx |
[使用自訂的 DocLayout-YOLO ONNX 模型] | pdf2zh --onnx [onnx/model/path] |
--serverport |
[自訂 WebUI 埠號] | pdf2zh --serverport 7860 |
--dir |
[資料夾翻譯] | pdf2zh --dir /path/to/translate/ |
- 全文翻譯
pdf2zh example.pdf
- 部分翻譯
pdf2zh example.pdf -p 1-3,5
pdf2zh example.pdf -li en -lo ja
下表列出了每個翻譯服務所需的 環境變數。在使用前,請先確保已設定好對應的變數。
Translator | Service | Environment Variables | Default Values | Notes |
---|---|---|---|---|
Google (Default) | google |
無 | N/A | 無 |
Bing | bing |
無 | N/A | 無 |
DeepL | deepl |
DEEPL_AUTH_KEY |
[Your Key] |
參閱 DeepL |
DeepLX | deeplx |
DEEPLX_ENDPOINT |
https://api.deepl.com/translate |
參閱 DeepLX |
Ollama | ollama |
OLLAMA_HOST , OLLAMA_MODEL |
http://127.0.0.1:11434 , gemma2 |
參閱 Ollama |
OpenAI | openai |
OPENAI_BASE_URL , OPENAI_API_KEY , OPENAI_MODEL |
https://api.openai.com/v1 , [Your Key] , gpt-4o-mini |
參閱 OpenAI |
AzureOpenAI | azure-openai |
AZURE_OPENAI_BASE_URL , AZURE_OPENAI_API_KEY , AZURE_OPENAI_MODEL |
[Your Endpoint] , [Your Key] , gpt-4o-mini |
參閱 Azure OpenAI |
Zhipu | zhipu |
ZHIPU_API_KEY , ZHIPU_MODEL |
[Your Key] , glm-4-flash |
參閱 Zhipu |
ModelScope | ModelScope |
MODELSCOPE_API_KEY , MODELSCOPE_MODEL |
[Your Key] , Qwen/Qwen2.5-Coder-32B-Instruct |
參閱 ModelScope |
Silicon | silicon |
SILICON_API_KEY , SILICON_MODEL |
[Your Key] , Qwen/Qwen2.5-7B-Instruct |
參閱 SiliconCloud |
Gemini | gemini |
GEMINI_API_KEY , GEMINI_MODEL |
[Your Key] , gemini-1.5-flash |
參閱 Gemini |
Azure | azure |
AZURE_ENDPOINT , AZURE_API_KEY |
https://api.translator.azure.cn , [Your Key] |
參閱 Azure |
Tencent | tencent |
TENCENTCLOUD_SECRET_ID , TENCENTCLOUD_SECRET_KEY |
[Your ID] , [Your Key] |
參閱 Tencent |
Dify | dify |
DIFY_API_URL , DIFY_API_KEY |
[Your DIFY URL] , [Your Key] |
參閱 Dify,需要在 Dify 的工作流程輸入中定義三個變數:lang_out、lang_in、text。 |
AnythingLLM | anythingllm |
AnythingLLM_URL , AnythingLLM_APIKEY |
[Your AnythingLLM URL] , [Your Key] |
參閱 anything-llm |
Argos Translate | argos |
參閱 argos-translate | ||
Grok | grok |
GORK_API_KEY , GORK_MODEL |
[Your GORK_API_KEY] , grok-2-1212 |
參閱 Grok |
DeepSeek | deepseek |
DEEPSEEK_API_KEY , DEEPSEEK_MODEL |
[Your DEEPSEEK_API_KEY] , deepseek-chat |
參閱 DeepSeek |
OpenAI-Liked | openai-liked |
OPENAILIKE_BASE_URL , OPENAILIKE_API_KEY , OPENAILIKE_MODEL |
url , [Your Key] , model name |
無 |
對於不在上述表格中,但兼容 OpenAI API 的大語言模型,可以使用與 OpenAI 相同的方式設定環境變數。
使用 -s service
或 -s service:model
指定翻譯服務:
pdf2zh example.pdf -s openai:gpt-4o-mini
或使用環境變數指定模型:
set OPENAI_MODEL=gpt-4o-mini
pdf2zh example.pdf -s openai
使用正則表達式指定需要保留的公式字體與字元:
pdf2zh example.pdf -f "(CM[^RT].*|MS.*|.*Ital)" -c "(\(|\||\)|\+|=|\d|[\u0080-\ufaff])"
預設保留 Latex
, Mono
, Code
, Italic
, Symbol
以及 Math
字體:
pdf2zh example.pdf -f "(CM[^R]|MS.M|XY|MT|BL|RM|EU|LA|RS|LINE|LCIRCLE|TeX-|rsfs|txsy|wasy|stmary|.*Mono|.*Code|.*Ital|.*Sym|.*Math)"
使用 -t
參數指定翻譯使用的執行緒數量:
pdf2zh example.pdf -t 1
使用 --prompt
指定在使用大模型翻譯時所採用的 Prompt 檔案。
pdf2zh example.pdf -pr prompt.txt
範例 prompt.txt
檔案內容:
[
{
"role": "system",
"content": "You are a professional,authentic machine translation engine.",
},
{
"role": "user",
"content": "Translate the following markdown source text to ${lang_out}. Keep the formula notation {{v*}} unchanged. Output translation directly without any additional text.\nSource Text: ${text}\nTranslated Text:",
},
]
在自訂 Prompt 檔案中,可以使用以下三個內建變數來傳遞參數:
變數名稱 | 說明 |
---|---|
lang_in |
輸入語言 |
lang_out |
輸出語言 |
text |
需要翻譯的文本 |
from pdf2zh import translate, translate_stream
params = {"lang_in": "en", "lang_out": "zh", "service": "google", "thread": 4}
file_mono, file_dual = translate(files=["example.pdf"], **params)[0]
with open("example.pdf", "rb") as f:
stream_mono, stream_dual = translate_stream(stream=f.read(), **params)
pip install pdf2zh[backend]
pdf2zh --flask
pdf2zh --celery worker
curl http://localhost:11008/v1/translate -F "[email protected]" -F "data={\"lang_in\":\"en\",\"lang_out\":\"zh\",\"service\":\"google\",\"thread\":4}"
{"id":"d9894125-2f4e-45ea-9d93-1a9068d2045a"}
curl http://localhost:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a
{"info":{"n":13,"total":506},"state":"PROGRESS"}
curl http://localhost:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a
{"state":"SUCCESS"}
curl http://localhost:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a/mono --output example-mono.pdf
curl http://localhost:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a/dual --output example-dual.pdf
curl http://localhost:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a -X DELETE
- 文件合併:PyMuPDF
- 文件解析:Pdfminer.six
- 文件提取:MinerU
- 文件預覽:Gradio PDF
- 多執行緒翻譯:MathTranslate
- 版面解析:DocLayout-YOLO
- PDF 標準:PDF Explained、PDF Cheat Sheets
- 多語言字型:Go Noto Universal