Trích xuất văn bản CV DOCX bằng Python với python-docx
Hướng dẫn trích xuất văn bản từ CV DOCX bằng Python và python-docx để chuyển hồ sơ Word thành dữ liệu sẵn sàng cho AI, kèm lưu ý về bảng.
Long Nguyen
Lập trình viên Fullstack · Kỹ sư AI · Nhà nghiên cứu
Vì sao DOCX là một bài toán khác?
Ở phần 3, chúng ta đã trích xuất văn bản từ PDF. Tuy nhiên, không ít ứng viên tải lên file Word, vì vậy để điền cùng trường cv_text, chúng ta cũng cần trích xuất văn bản từ CV DOCX bằng Python. Tin tốt là DOCX thân thiện hơn PDF rất nhiều.
DOCX không phải định dạng bố cục như PDF — bên dưới, nó là XML có cấu trúc. Điều đó có nghĩa văn bản đã được lưu dưới dạng nội dung thực, có thứ tự, thay vì các ký tự rời rạc nằm rải rác trên trang. Vì vậy, chúng ta không phải xử lý những vấn đề về khoảng cách hay thứ tự cột thường gặp ở PDF. Một thư viện chuyên dụng cho phép truy cập trực tiếp vào cấu trúc này.
Trích xuất văn bản bằng python-docx
Thư viện python-docx có thể đọc trực tiếp tài liệu Word. Trước tiên, hãy cài đặt thư viện:
pip install python-docx
Với một CV thông thường, việc trích xuất chỉ đơn giản là mở tài liệu rồi nối các đoạn văn lại:
from docx import Document
def extract_text_from_doc(file_path):
doc = Document(file_path)
return "\n".join(p.text for p in doc.paragraphs)
doc.paragraphs trả về mọi đoạn văn trong tài liệu theo đúng thứ tự, còn p.text là phần văn bản thuần túy. Nối chúng bằng ký tự xuống dòng sẽ tạo ra một chuỗi sạch, dễ đọc — chính là phần văn bản CV sẵn sàng cho AI mà chúng ta cần. Với phần lớn áp đảo các CV, trong đó nội dung được trình bày dưới dạng tiêu đề và đoạn văn thông thường, như vậy là đủ. Không cần xử lý XML phức tạp hay xây dựng quá mức cần thiết — đây là giải pháp trực tiếp cho bài toán thực tế.
Một lưu ý quan trọng cần biết
Có một đặc điểm của python-docx bạn cần lưu ý: doc.paragraphs chỉ trả về các đoạn văn — nó không bao gồm văn bản nằm bên trong bảng. Một số mẫu CV sắp xếp các phần như kỹ năng, thông tin liên hệ và kinh nghiệm trong các ô bảng. Với những file như vậy, đoạn mã trên sẽ âm thầm bỏ qua phần nội dung đó.
Với đa số CV, trường hợp này không xảy ra và phiên bản đơn giản là lựa chọn phù hợp để triển khai trước. Tuy vậy, đây cũng là một hướng bạn có thể tự mở rộng: python-docx cung cấp cả doc.tables, cho phép lấy văn bản từ các ô bảng rồi nối vào kết quả. Phiên bản phức tạp hơn nhưng đáng làm là duy trì đúng thứ tự đọc thực tế — duyệt qua XML nền tảng của tài liệu để các đoạn văn và bảng xuất hiện xen kẽ đúng như trên tài liệu, thay vì gom toàn bộ đoạn văn trước rồi mới đến toàn bộ bảng. Nếu muốn nâng cấp bộ phân tích, đây là một bài tập đáng để tự thực hiện.
Khi đã xử lý được cả PDF và DOCX, ứng dụng cuối cùng cũng có thể chuyển mọi CV được tải lên thành văn bản sạch. Nếu không muốn tự xây dựng toàn bộ và muốn bắt đầu ngay với mã nguồn hoàn chỉnh, sẵn sàng cho môi trường production, bạn có thể xem starter kit — còn nếu không, hãy đến phần 5, nơi AI bắt đầu tham gia: sử dụng OpenAI Agents SDK trong một ứng dụng Django thực tế.
CÂU HỎI THƯỜNG GẶP
Câu hỏi thường gặp
python-docx có tự động đọc các bảng không?
Không. Việc lặp qua doc.paragraphs chỉ trả về các đoạn văn và âm thầm bỏ qua mọi văn bản bên trong bảng. Với những CV chỉ sử dụng các đoạn văn thông thường thì điều này không vấn đề gì, nhưng các mẫu dùng bảng để định dạng sẽ bị mất phần nội dung đó nếu bạn không xử lý bảng riêng.
Phiên bản đơn giản chỉ đọc đoạn văn có đủ dùng không?
Với phần lớn áp đảo các CV thì có — đa số CV được trình bày dưới dạng tiêu đề và đoạn văn thông thường, đồng thời phiên bản ngắn gọn này sẽ chuyển chúng thành văn bản sạch, sẵn sàng cho AI. Chỉ cần xem trường hợp thiếu nội dung trong bảng là một giới hạn đã biết, thay vì để nó trở thành một bất ngờ.
python-docx có đọc được các file .doc cũ không?
Không. Thư viện này chỉ xử lý định dạng .docx hiện đại. Các file .doc cũ cần được chuyển đổi trước bằng thư viện hoặc công cụ bên ngoài, sau đó bạn mới có thể phân tích chúng.