1. Phân tích PDF
Tại sao cần chuyển đổi PDF sang CSV hoặc Excel?
Trước khi chúng ta bắt đầu với nhiệm vụ này, hãy nói về lý do vì sao chúng ta cần thực hiện việc chuyển đổi như vậy. Tài liệu PDF được sử dụng rộng rãi để truyền tải thông tin nhờ tính cố định và tiện lợi khi in ấn.
Tuy nhiên, khi nói đến việc phân tích dữ liệu, PDF không phải là người bạn tốt nhất. Chính lúc này các tệp CSV và Excel xuất hiện. Chúng tiện lợi để phân tích, dễ dàng mở trong Excel hoặc nhập vào bất kỳ công cụ phân tích nào. Đọc, lọc, sắp xếp và hiển thị dữ liệu trong các định dạng này trở nên rất đơn giản. Và ai có thể cưỡng lại sự tiện lợi đó chứ?
Dụng cụ và thư viện
Để hoàn thành nhiệm vụ của mình, chúng ta sẽ sử dụng một số thư viện Python giúp chúng ta "gỡ bùa" từ PDF và biến nó thành CSV thú vị (hoặc Excel nếu bạn thích hơn). Đó là PyPDF2, PDFPlumber và pandas. PyPDF2 cho phép chúng ta trích xuất văn bản từ PDF, PDFPlumber - làm điều đó một cách chuyên nghiệp và pandas – làm việc với dữ liệu dưới dạng bảng.
Nếu bạn chưa cài đặt các thư viện này, tại sao không làm ngay bây giờ? Nhập lệnh này vào terminal:
pip install PyPDF2 PDFPlumber pandas
Xong rồi, bắt tay vào việc thôi!
2. Trích xuất văn bản từ tài liệu PDF
Trích xuất văn bản với PyPDF2
Nhiệm vụ đầu tiên là lấy được văn bản quý giá từ PDF. Để làm điều đó, chúng ta sẽ sử dụng thư viện PyPDF2. Hãy viết một đoạn script nhỏ để mở tệp PDF và trích xuất văn bản từ từng trang của tài liệu.
import PyPDF2
# Mở tệp
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
# Duyệt qua các trang và trích xuất văn bản
for page in reader.pages:
text += page.extract_text()
print(text) # Hiển thị văn bản trích xuất được
Dễ dàng quá đúng không? Chúng ta đọc tệp và trích xuất văn bản từ đó. Nhưng văn bản không phải lúc nào cũng dễ xử lý: đôi khi cần xử lý thêm, loại bỏ ký tự thừa hoặc chia nhỏ thành các dòng.
Trích xuất văn bản với PDFPlumber
PDFPlumber xử lý PDF phức tạp với bảng biểu và cấu trúc tốt hơn. Nó có thể trích xuất văn bản và làm việc với bảng biểu.
import pdfplumber
# Mở tệp PDF
with pdfplumber.open("sample_with_table.pdf") as pdf:
text = ""
for page in pdf.pages:
text += page.extract_text() + "\n"
print(text)
Đoạn code này cũng trích xuất văn bản từ tất cả các trang, nhưng PDFPlumber làm tốt hơn PyPDF2 trong việc xử lý định dạng và bảng biểu.
Trích xuất bảng biểu từ PDF với PDFPlumber
Nếu PDF chứa bảng biểu, PDFPlumber cho phép trích xuất chúng dưới dạng danh sách, giúp việc chuyển đổi chúng sang CSV hoặc Excel dễ dàng hơn.
import pdfplumber
import pandas as pd
# Mở PDF và trích xuất bảng biểu
with pdfplumber.open("sample_with_table.pdf") as pdf:
all_tables = []
for page in pdf.pages:
table = page.extract_table()
if table:
all_tables.extend(table)
# Chuyển đổi dữ liệu thành DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0]) # Dòng đầu tiên là tiêu đề
print(df)
Đoạn code này tạo bảng từ dữ liệu trong PDF và lưu nó vào DataFrame, giúp việc lưu bảng biểu sang CSV hoặc Excel trở nên dễ dàng hơn.
3. Lưu dữ liệu
Chuyển đổi văn bản thành DataFrame
Bây giờ, khi chúng ta đã có văn bản, hãy giả sử rằng mỗi dòng văn bản được đóng gói dưới dạng một dòng của bảng trong tương lai của chúng ta. Nhiệm vụ của chúng ta là chuyển đổi nó thành DataFrame bằng pandas và sau đó lưu nó dưới dạng tệp CSV.
import pandas as pd
# Giả sử mỗi dòng văn bản tương ứng với một dòng dữ liệu
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != ''] # Tách các dòng bằng dấu phẩy
# Tạo DataFrame
df = pd.DataFrame(data[1:], columns=data[0]) # Dòng đầu tiên dùng làm tiêu đề
# Lưu DataFrame thành CSV
df.to_csv('output.csv', index=False)
Ở đây, chúng ta đơn giản chia toàn bộ văn bản thành các dòng, sau đó — thành các phần tử riêng lẻ và tạo DataFrame, dùng dòng đầu tiên làm tiêu đề cột. Sau đó, lưu nó vào tệp CSV. Yesss! Chúng ta đã hoàn thành công việc mà trước đây cần rất nhiều thời gian để xử lý thủ công.
Chuyển đổi dữ liệu sang CSV
Sau khi trích xuất văn bản hoặc bảng từ PDF, bạn có thể lưu dữ liệu thành CSV bằng thư viện Pandas.
Lưu dữ liệu thành CSV
# Lưu dữ liệu thành CSV
df.to_csv("output.csv", index=False)
print("Dữ liệu đã được lưu thành công vào output.csv")
Đoạn code này lưu DataFrame với dữ liệu từ PDF vào tệp output.csv, có thể mở trong bất kỳ trình chỉnh sửa bảng tính nào hoặc upload vào nền tảng phân tích.
Chuyển đổi sang Excel
Nếu bạn muốn lưu thành Excel? Không vấn đề gì! pandas cung cấp mọi thứ cần thiết cho việc này. Chỉ cần thay thế dòng cuối trong ví dụ trước bằng:
df.to_excel('output.xlsx', index=False)
Bằng cách này, DataFrame của bạn sẽ được lưu thành tệp Excel, bạn có thể thao tác, áp dụng các bộ lọc và sử dụng Pivot Table của Excel — tất cả những điều giúp bạn trở thành "nhân viên phân tích năm" tại bữa tiệc công ty.
Những điểm đặc biệt và khó khăn
Như thường lệ, trên con đường chúng ta gặp phải những khó khăn. Trích xuất văn bản từ PDF đôi khi giống như cố gắng giải thích cho bà ngoại về lưu trữ đám mây là gì. Một số tài liệu PDF có thể có cấu trúc phức tạp như bảng, đồ thị và hình ảnh, khiến việc chuyển đổi chúng thành văn bản, đặc biệt là văn bản có cấu trúc, không hề dễ dàng. Trong những trường hợp này, bạn có thể cần xử lý văn bản thêm, sử dụng regular expressions, hoặc thậm chí là các thư viện OCR đặc biệt để trích xuất dữ liệu từ hình ảnh chứa trong PDF.
Ngoài ra, không phải tài liệu PDF nào cũng thân thiện với tự động hóa. Một số trong chúng được mã hóa hoặc bảo vệ bằng mật khẩu. PyPDF2 có thể xử lý mật khẩu, nhưng với mã hóa thì việc trở nên phức tạp hơn.
GO TO FULL VERSION