Có vài đặc điểm của các tài liệu khoa học mà chúng ta dễ nhận ra:
- Nó thường được trình bày dưới dạng tài liệu PDF: điều này giúp chúng dễ dàng được chia sẻ (ngoài ra cũng dễ được đọc bởi rất nhiều phần mềm, bao gồm cả hầu hết các trình duyệt) và có bố cục nhất quán, không bị xô lệch trên các phần mềm đọc dữ liệu khác nhau.
- Nó có nhiều bảng biểu, bố cục phức tạp & có nhiều công thức toán học.
Điều này khiến việc dịch tự động tài liệu PDF khó khăn hơn nhiều so với dịch tài liệu dạng web- cái thường chủ yếu chỉ là text, ảnh đơn thuần với cấu trúc đơn giản. PDFMathTranslate ra đời với mục đích giúp công việc dịch tự động diễn ra thuận lợi hơn với chi phí rẻ hơn đáng kể.

Vấn đề chi phí là vấn đề đáng lưu tâm, vì hiện nay có nhiều công cụ dịch PDF có chất lượng tương đối tốt, ví dụ như https://otranslator.com/vi nhưng khá tốn kém.
Với việc dịch PDF có ba cái cần phải đảm bảo:
- Bố cục của bản dịch cần phải có sự tương đồng cao với bản gốc.
- Các biểu thức khoa học phải được bảo toàn.
- Chất lượng dịch phải tốt.
PDFMathTranslate làm được những yêu cầu đó với chất lượng tương đối tốt & đặc biệt nó hoàn toàn miễn phí. Về phần chất lượng dịch, nó có các tùy chọn từ free như Google Translate, cho đến sử dụng các AI tiên tiến nhất hiện nay như Gemini, OpenAI, Claude, vân vân.
Lưu ý: sử dụng AI để dịch thường có tốn phí nhưng là phí bạn thanh toán trực tiếp với AI, còn bản thân PDFMathTranslate không thu bất cứ khoản phí nào.
Hôm nay chúng ta sẽ đi vào phần hướng dẫn cài đặt và sử dụng cơ bản phần mềm này. Mã nguồn của nó được chia sẻ công khai trên GitHub ở địa chỉ: https://github.com/PDFMathTranslate/PDFMathTranslate
Đây là chương trình rất phổ biến và được đóng góp bởi nhiều cộng tác viên.
PDFMathTranslate có các phiên bản dùng dòng lệnh (CLI) & phiên bản đồ họa, tuy nhiên dịch sang tiếng Việt chúng ta cần dùng bản CLI (nghe dòng lệnh thì có vẻ khó, nhưng nó dễ dùng hơn tưởng tượng rất nhiều).
1. Cài Python
PDFMathTranslate dùng ngôn ngữ lập trình Python, nên trước hết chúng ta cần cài Python, phiên bản được khuyến nghị là 3.12
Người dùng Windows dùng hệ điều hành 64bit tải Python ở đây để cài: https://www.python.org/ftp/python/3.12.9/python-3.12.9-amd64.exe
PS: Đa số máy tính Windows hiện nay dùng bản 64bit, nếu bạn dùng bản 32bit thì chỉ cần tìm và tải bản tương ứng tại địa chỉ: https://www.python.org/downloads/windows/
Khi cài, chương trình sẽ có ô tick chọn: Add python.exe to PATH, bạn nhớ tick chọn trước khi cài. Nếu nó có thêm ô Use admin privileges when installing py.exe thì cũng tick chọn để chương trình sử dụng được thuận tiện hơn.
Nhấn Install Now ở ngay phía trên để bắt đầu cài đặt.
–
2. Cài PDFMathTranslate
Nhấn phím Windows (hình cái cửa sổ) trên bàn phím, rồi gõ chữ cmd vào đó và Enter:

Cửa sổ dòng lệnh sẽ hiển thị ra. Nó sẽ trông giống thế này:

Copy và paste lệnh này vào để xem Python đã cài đặt thành công chưa:
python --version
Nếu thành công, bạn sẽ thấy thông tin phiên bản như thế này (hoặc phiên bản khác nếu lúc cài bạn cài phiên bản khác 3.12.9):
Python 3.12.9
Tiếp theo hãy nhập lệnh sau vào để cài đặt PDFMathTranslate:
pip install pdf2zh
Quá trình cài đặt có thể mất khoảng 10 phút để máy tính tải các chương trình cài đặt về.
Sẽ có rất nhiều chương trình được tải về và cài đặt. Bạn sẽ biết toàn bộ đã được tải về và cài đặt thành công nếu dấu nhắc nhập lệnh xuất hiện trở lại. Trong ví dụ của tôi nó chính là cái C:\Users\Admin> , nó là cái xuất hiện đầu tiên mỗi khi bạn vào chương trình cmd.
–
3. Thử dịch một tài liệu bất kỳ
Trước tiên bạn vào ổ D tạo một thư mục có tên TaiLieuDich để chuyên làm nhiệm vụ chứa tài liệu cần dịch và bản dịch của nó sau này. PS: bạn có thể đặt tên tùy ý nhưng nên là tên dễ nhớ, dễ hiểu cho mục đích.
Kiếm một tài liệu tiếng Anh bất kỳ có độ dài vừa phải (ví dụ 20 – 30 trang), sau đó đưa nó vào thư mục TaiLieuDich trong ổ D.
Ở chương trình cmd bạn gõ (để bạn vào ổ D):
D:
Chương trình dòng lệnh sẽ được chuyển sang ổ D như thế này:
C:\Users\Admin>D:
D:\>
Bạn tiếp tục gõ:
cd TaiLieuDich
Để chương trình chuyển vào thư mục TaiLieuDich, bạn sẽ thấy dấu nhắc nhập lệnh giờ sẽ thế này:
D:\TaiLieuDich>
Giả sử trong thư mục đó có tài liệu tiếng Anh có ten kiemtra.pdf cần dịch sang tiếng Việt, thì tôi sẽ gõ lệnh như sau trong cmd để nó dịch tự động:
pdf2zh kiemtra.pdf -li en -lo vi
Nó sẽ trông như thế này khi bạn nhập lệnh:

Giải thích ngắn gọn câu lệnh:
- pdf2zh: câu lệnh để gọi chương trình dịch PDFMathTranslate.
- kiemtra.pdf: chỉ định file cần dịch (file này phải nằm trong thư mục TaiLieuDich).
- -li en: chỉ định ngôn ngữ nguồn là tiếng Anh
- -lo vi: chỉ định ngôn ngữ đích là tiếng Việt
Mặc định hệ thống sử dụng Google Translate miễn phí để dịch nên tốc độ rất nhanh, khoảng 1 – 2 phút là sẽ xong. Khi nào bạn thấy kết quả xuất ra hiển thị tiến trình đã đạt 100% như thế này là đã thành công:
D:\TaiLieuDich>pdf2zh kiemtra.pdf -li en -lo vi
not in git repo
Namespace(files=['kiemtra.pdf'], debug=False, pages=None, vfont='', vchar='', lang_in='en', lang_out='vi', service='google', output='', thread=4, interactive=False, share=False, flask=False, celery=False, authorized=None, prompt=None, compatible=False, onnx=None, serverport=None, dir=False, config=None, babeldoc=False, skip_subset_fonts=False, ignore_cache=False, mcp=False, sse=False)
100%|██████████████████████████████████████████████████████████████████████████████████| 45/45 [00:38<00:00, 1.17it/s]
Bạn vào thư mục TaiLieuDich sẽ thấy kết quả bản dịch, sẽ có 2 file PDF với hậu tố là mono và dual, trong đó:
- mono là bản dịch từ Anh sang Việt (tiện cho việc đọc luôn).
- dual là bản dịch song ngữ bao gồm cả ngôn ngữ nguồn và đích đặt cạnh nhau (tiện kiểm tra chất lượng dịch).

Bạn có thể tải demo-file.pdf bên dưới, chỉ gồm 5 trang trích trong cuốn Book of Proof của Richard Hammack làm tài liệu thử nghiệm để xem chất lượng dịch thế nào, nó không quá ngắn, và có các công thức toán học trong nội dung.
Khắc phục vấn đề font chữ tiếng Việt
Mặc định PDFMathTranslate hiển thị font chữ quốc tế rất tốt, nhưng một số ký tự có dấu tiếng Việt hiển thị không tốt lắm (dù vẫn đọc được), để khắc phục cái này chúng ta sẽ điều chỉnh để với tiếng Việt nó sử dụng font chữ thích hợp hơn.
Bạn truy cập ổ C, nhìn lên thanh ngang chứa địa chỉ (ảnh bên dưới), và nhập dòng sau vào để truy cập thư mục chứa file cần điều chỉnh:
C:\Users\Admin\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\
Lưu ý nếu user của người dùng không phải có tên Admin, mà có tên khác, vi duy HuyTuan thì cần thay thành:
C:\Users\HuyTuan\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\
Chỗ cần nhập là chỗ này, rồi nhấn Enter, nó sẽ vào thẳng thư mục chứa file mà ta sẽ điều chỉnh mã để thay font tiếng Việt tốt hơn:

Bạn chuột phải vào file có tên high_level và mở nó bằng chương trình soạn thảo nào đó (ví dụ Notepad++). PS: Nếu bạn hay chỉnh code lặt vặt hãy cài phần mềm Notepad++, nó rất tiện dùng.
Bạn Ctrl + F để tìm khối code bên dưới (khi bạn nhấn Ctrl + F, bạn chỉ cần nhập vào đoạn mã nhỏ như def download_remote_fonts(lang: str): để tìm ra khối code bên dưới):
def download_remote_fonts(lang: str):
lang = lang.lower()
LANG_NAME_MAP = {
**{la: "GoNotoKurrent-Regular.ttf" for la in noto_list},
**{
la: f"SourceHanSerif{region}-Regular.ttf"
for region, langs in {
"CN":["zh-cn", "zh-hans", "zh"],
"TW": ["zh-tw", "zh-hant"],
"JP":["ja"],
"KR": ["ko"],
}.items()
for la in langs
},
}
font_name = LANG_NAME_MAP.get(lang, "GoNotoKurrent-Regular.ttf")
Và xóa nó đi để thay thế bằng khối code này:
def download_remote_fonts(lang: str):
lang = lang.lower()
# --- CHÈN ĐOẠN NÀY ĐỂ TRẢ VỀ TRỰC TIẾP FONT TRÊN MÁY ---
if lang == 'vi':
# Bạn có thể dùng arial.ttf hoặc times.ttf (Times New Roman - Rất hợp học thuật)
return "C:/Windows/Fonts/times.ttf"
# -------------------------------------------------------
LANG_NAME_MAP = {
**{la: "GoNotoKurrent-Regular.ttf" for la in noto_list},
**{
la: f"SourceHanSerif{region}-Regular.ttf"
for region, langs in {
"CN":["zh-cn", "zh-hans", "zh"],
"TW": ["zh-tw", "zh-hant"],
"JP":["ja"],
"KR": ["ko"],
}.items()
for la in langs
},
}
font_name = LANG_NAME_MAP.get(lang, "GoNotoKurrent-Regular.ttf")
# Bắt buộc phải giữ lại 2 dòng này cho các ngôn ngữ khác
font_path, _ = get_font_and_metadata(font_name)
return font_path
Nhấn Ctrl + S để lưu file này lại. Giờ đây khi dịch sang tiếng Việt nó sẽ sử dụng font chữ Times New Roman.
Bản dịch với font chữ tiếng Việt tốt hơn đã được áp dụng:

Sau này khi PDFMathTranslate ra phiên bản mới và bạn cập nhật chương trình bằng câu lệnh: pip install --upgrade pdf2zh thì bạn cần vào lại phần trên để chỉnh lại font chữ.
Lựa chọn AI dịch thuật để cho chất lượng bản dịch tốt hơn
Mặc định chương trình này dùng Google Translate miễn phí và có tốc độ cao để dịch, ưu điểm thì đã rõ, nhưng chất lượng dịch của nó, nhất là với tài liệu khoa học không được tốt lắm. Bạn nên dùng các AI dịch thuật có chất lượng tốt hơn, vì dù bố cục trình bày hay tốc độ dịch có ổn thế nào đi chăng nữa mà chất lượng dịch thấp thì ở mức độ nào đó có thể nói là: thà không dịch còn hơn!
Để sử dụng AI dịch thuật, dĩ nhiên bạn cần API tương ứng và cần chủ động đăng ký để có thông tin. Tôi giả sử bạn đã làm điều đó, và phần này tôi sẽ minh họa cách dùng API của Gemini để dịch.
Lưu ý cho những ai chưa biết: Với việc sử dụng API AI để dịch thường sẽ tốn chi phí, bạn nên cân nhắc chọn dịch vụ phù hợp với khả năng chi trả. Trong cùng một AI cũng có nhiều model khác nhau, chênh lệch giá có thể lên đến 3 – 4 lần, lời khuyên chung là nên thử nghiệm với phiên bản rẻ trước, nếu chất lượng dịch chưa ổn thì mới nâng lên phiên bản cao hơn.
–
Để thiết lập Gemini làm công cụ dịch, tại màn hình cmd bạn nhập như sau:
set GEMINI_MODEL=gemini-3-flash-preview
set GEMINI_API_KEY=thay_api_key_cua_ban_vao_day
Trong đó:
set GEMINI_MODEL=gemini-3-flash-previewlà câu lệnh dùng để thiết lập model AI cụ thể, ở đây là Gemini phiên bản 3, flash (rẻ hơn phiên bản pro, và đắt hơn bản lite). Nếu bạn dùng model khác, chỉ việc nhập thông tin tương ứng vào, ví dụ dùng model pro thì nhập:set GEMINI_MODEL=gemini-3.1-pro-previewset GEMINI_API_KEY=thay_api_key_cua_ban_vao_daylà lệnh để thiết lập API key cho phép bạn giao tiếp với Gemini. Nhớ thay API Key thật của bạn vào.
Tiếp theo đó, để sử dụng Gemini với các cài đặt trên cho việc dịch, câu lệnh của bạn ngoài thông tin như bình thường sẽ cần bổ sung thêm -s gemini để chỉ định Gemini cho việc dịch tài liệu, ví dụ:
pdf2zh kiemtra.pdf -li en -lo vi -s gemini
Lưu ý: Việc sử dụng API AI để dịch sẽ có tốc độ chậm hơn so với Google Translate tương đối nhiều. Nếu tài liệu của bạn dài (ví dụ vài trăm trang) nên chia nhỏ nó thành các chương để dịch từng phần (phần mềm tiện lợi để tách file PDF là https://smallpdf.com/vi/split-pdf, nó dễ dùng, giao diện tiếng Việt & miễn phí).
Đối với ai nhạy cảm về tài chính, nên kiểm tra chi phí cho một vài thử nghiệm dịch để tránh chi tiêu quá tay (nhất là với tài liệu dài & dùng model cao cấp để dịch). Nói vui thì vừa dốt tiếng Anh vừa nghèo nó khổ vậy đấy!
Ví dụ minh họa kết quả dịch từ tiếng Anh sang tiếng Việt cho một tài liệu cụ thể
Ở trên tôi có cung cấp tài liệu 5 trang demo-file.pdf để bạn đọc test thử. Dưới đây là kết quả dịch của nó.
Cái thứ nhất dùng Google Translate, bạn sẽ thấy nó dịch nhiều thuật ngữ không được chính xác lắm:
–
Cái thứ hai dùng Gemini model gemini-3-flash-preview, chưa phải bản tốt nhất nhưng cũng đã cho chất lượng dịch tốt hơn đáng kể:
–
Cuối cùng là phiên bản sử dụng gemini-3.1-pro-preview:
Nhận xét về chất lượng dịch
Để tiện so sánh, chúng ta sẽ xem bản dịch tương ứng của file demo khi chỉ sử dụng Google Translate:
Chúng ta có thể nhanh chóng nhận ra là nhiều biểu thức toán học trong bản gốc khi dịch thuần túy bằng Google Translate đã không được bảo toàn, điều mà PDFMathTranslate khắc phục được. Tuy nhiên câu hỏi bây giờ là PDFMathTranslate dịch tốt đến đâu?
Kết luận nhanh: PDFMathTranslate giúp bảo toàn khá tốt các công thức toán học nhưng vẫn chỉ cho chất lượng dịch ở chất lượng trung bình khá ngay cả với model AI tốt nhất của Gemini (3.1 pro). Chúng ta có thể chỉ ra ngay một số thiếu sót của nó (đối chiếu bản monoz.pdf):
- Nó không dịch được toàn bộ văn bản tiếng Anh cần dịch: có nhiều phần nó vẫn để nguyên tiếng Anh, ví dụ như: ‘the set of all things of form’, ‘E equals the set of all things of form 2n, such that n is an element of Z’, ‘absolute value’,… Điều đó cho thấy cơ chế phân tích tài liệu vẫn còn hạn chế.
- Việc xử lý định dạng mặc dù khá ổn, nhưng vẫn có những phần nó không xử lý tốt, thậm chí có thể nói là lỗi, ví dụ:

Trong khi bản gốc là thế này:

Một vấn đề nữa về chất lượng dịch tổng thể, PDFMathTranslate dường như chẻ văn bản gốc thành các khối văn bản sau đó gửi lên AI để lấy kết quả về tổng hợp lại nên cái nhìn tổng thể về toàn bộ văn bản sẽ bị thiếu.
–
Hiện nay phiên bản mới của công cụ này được phát triển thêm, và được lưu ở dự án mới ở đây: https://github.com/PDFMathTranslate/PDFMathTranslate-next
Tôi sẽ kiểm tra thêm chất lượng của nó. Còn ở mức của phiên bản vừa kiểm tra nó thực sự vẫn chưa đủ tin cậy để dịch các tài liệu khoa học.
–
PDFMathTranslate hiện dễ bị đánh bại về chất lượng dịch khi chúng ta sử dụng SI & Prompt được tinh chỉnh cao cho AI, phương pháp này tốn Token hơn do để AI xử lý toàn bộ dữ liệu thô của PDF và xuất nó ra dưới dạng HTML. Bạn có thể tham khảo bộ SI & Prompt chuyên để dịch tài liệu PDF khoa học ở đây: https://github.com/kiencang/SI-Prompt-EV-Translate (do tôi phát triển).
Ví dụ bản dịch được thực hiện bởi bộ SI + Prompt trên: