Mã nguồn mở · MIT · Python 3.11+

Tài liệu tiếng Việt bị lỗi phông, đọc được bằng một dòng.

viparse chuyển file dùng bảng mã cũ — TCVN3, VNI, VISCII, VPS — sang Unicode dựng sẵn (NFC), giữ nguyên bảng biểu và cấu trúc. Đọc được .doc, .xls, .ppt đời cũ, RTF, PDF và cả PDF scan.

Vấn đề

File không hỏng. Máy bạn thiếu phông.

Trước khi Unicode phổ biến ở Việt Nam, chữ có dấu được lưu bằng các byte Latin thông thường và chỉ hiện đúng khi máy có đúng bộ phông đó. Không có .VnTime, bạn thấy đúng những byte đang nằm trong file — nên mọi thư viện đọc tài liệu thông thường đều đọc đúng mà vẫn sai.

Thứ bạn nhận đượcphông .VnTime, bảng mã TCVN3
B¸o c¸o tµi chÝnh quý II n¨m 2026 cña c«ng ty.
ThÞ tr­êng ViÖt Nam ph¸t triÓn m¹nh.
viparse.load()
Thứ đáng lẽ phải cóUnicode dựng sẵn (NFC)
Báo cáo tài chính quý II năm 2026 của công ty.
Thị trường Việt Nam phát triển mạnh.

Về bản chất đây là việc mà chức năng Công cụ → Chuyển mã của Unikey vẫn làm — nhưng chạy được trên cả file, giữ nguyên bảng biểu, và gọi được từ trong code.

Cách hoạt động

Ba bước.

01

Nhận dạng

Tên phông trong file và điểm tần suất âm tiết cho biết đó là TCVN3, VNI, VISCII hay VPS — xét theo từng đoạn chứ không theo cả file, nên tài liệu trộn nhiều bảng mã vẫn ra đúng.

02

Chuyển

Các chuỗi byte cũ được ánh xạ sang đúng chữ cái tiếng Việt rồi chuẩn hoá về NFC. Phần đã là Unicode không bao giờ bị đụng tới.

03

Nạp

Nhận về Markdown, text hoặc JSON kèm tiêu đề, bảng và nguồn gốc — đã chia chunk cho retrieval, có sẵn adapter LangChain và LlamaIndex.

Tính năng

Những gì có sẵn.

Bảng mã cũ

TCVN3 · VNI · VISCII · VPS → Unicode NFC, có kiểm tra chuyển đi chuyển lại.

Mọi định dạng

DOCX, XLSX, PDF, RTF, .doc/.xls/.ppt đời cũ — thêm bản scan và file ảnh qua OCR.

Chia chunk cho RAG

Chunk bám theo mục, không cắt đôi dòng bảng, và lặp lại tiêu đề bảng.

Lõi không phụ thuộc

Thuần stdlib; engine nặng nằm sau extras như viparse[ocr].

An toàn với file lạ

Giới hạn kích thước, chặn zip bomb, timeout theo từng engine.

Có sẵn CLI

viparse ./docs/**/*.pdf -o md, và viparse doctor.

Bắt đầu

Hai dòng là ra chữ sạch.

import viparse

viparse.fix("B¸o c¸o tµi chÝnh")   # 'Báo cáo tài chính'

docs = viparse.load("bao_cao_2003.doc")   # list[Document], đã NFC

fix() nhận chuỗi chứ không nhận đường dẫn, nên ghép được với bất cứ thứ gì đã đọc file trước đó. Chữ đã là Unicode, và chữ không phải tiếng Việt, được trả lại nguyên vẹn.

Thử ngay

Dán chữ lỗi vào, lấy Unicode ra.

Chạy ngay trong trình duyệt — không gửi gì lên server, và vẫn chạy được khi mất mạng sau lần tải đầu.

Thử
Dán gì đó vào, hoặc chọn một mẫu.

Bảng chuyển mã và các ngưỡng nhận dạng ở đây được sinh ra từ chính viparse 0.1.28, nên không thể lệch khỏi thư viện. Phần chạy trong trang chỉ là đường xử lý chuỗi — các engine đọc .doc, PDF và bảng tính cần có file, và đó mới là phần lớn thứ bạn nhận được khi pip install viparse.

Đo đạc

Đo trên file hỏng thật.

96 văn bản nhà nước Việt Nam từ 2002–2009 — Word, Excel, RTF, PDF và PowerPoint — được chép tay lại rồi chấm điểm trên độ chính xác dấu thanh. Corpus, cách đo, kết quả thô và câu lệnh tạo lại chúng đều công khai.

Cách đọcKý tựDấu thanhÂm tiết
No conversionđọc byte trung thực, không chuyển mã0.7870.0190.225
viparse 0.1.2796 tài liệu, từ file đến kết quả0.9820.9860.985

Hàng 0.019 mới là con số đáng nói: văn bản trông còn nguyên 79% nhưng chỉ mang 1,9% lượng tiếng Việt. Hàng của viparse yếu hơn vẻ ngoài của nó — bản chép tay và bảng chuyển mã cùng rút ra từ một corpus, nên nó đo tính nhất quán với chính mình cũng nhiều như đo tính đúng. Cả hai con số, cách đo, từng tài liệu và câu lệnh tạo lại đều được công bố để có thể tranh luận lại.

Và với tài liệu Unicode bình thường

Tài liệuThứ tựĐầy đủTiêu đề
DOCX · XLSX · PPTX1.0001.0001.000
PDF một cột1.0001.0000.000
PDF hai cột0.6001.0000.000

Không bao giờ mất chữ — cột đầy đủ bằng 1.000 ở mọi nơi. Cả hai chỗ hỏng đều là hỏng về sắp xếp, loại khó phát hiện hơn hẳn. PDF không có tiêu đề, nên mọi chunk từ PDF đều có section rỗng; và PDF nhiều cột bị đọc ngang trang chứ không đọc dọc theo cột. Lấy lại đúng cột nghĩa là phải phân tích bố cục, việc mà viparse cố ý không làm: với những file đó hãy dùng bộ đọc hiểu bố cục rồi đưa kết quả qua viparse.fix().

Hỏi đáp

Câu hỏi thường gặp.

0.986 độ chính xác dấu thanh trên 96 văn bản nhà nước Việt Nam từ 2002–2009 — Word, Excel, RTF, PDF, PowerPoint — so với bản chép tay. Chính bộ đọc đó khi tắt phần chuyển bảng mã chỉ được 0.019 trên đúng 96 file ấy. Corpus, cách đo, kết quả thô và câu lệnh tạo lại đều công khai, kèm cả những chỗ con số này yếu hơn vẻ ngoài.