Cách trích xuất dữ liệu cụ thể từ pdf trong python?

Là một ngôn ngữ cấp cao, được giải thích với cú pháp tương đối dễ dàng, Python hoàn hảo ngay cả đối với những người không có kinh nghiệm lập trình trước đó. Các thư viện Python phổ biến được tích hợp tốt và cung cấp giải pháp để xử lý các nguồn dữ liệu phi cấu trúc như Pdf và có thể được sử dụng để làm cho nó hợp lý và hữu ích hơn

PDF là một trong những phương tiện kỹ thuật số quan trọng nhất và được sử dụng rộng rãi. dùng để trình bày và trao đổi tài liệu. Các tệp PDF chứa thông tin hữu ích, liên kết và nút, trường biểu mẫu, âm thanh, video và logic nghiệp vụ

Tại sao Python để xử lý PDF

Quá trình xử lý PDF thuộc phân tích văn bản. Hầu hết các khung hoặc Thư viện phân tích văn bản chỉ được thiết kế bằng Python. Điều này mang lại đòn bẩy cho phân tích văn bản. Khi bạn trích xuất thông tin hữu ích từ PDF, bạn có thể dễ dàng sử dụng dữ liệu đó vào bất kỳ Mô hình xử lý ngôn ngữ tự nhiên hoặc máy học nào

Tôi là Nhà khoa học dữ liệu của 3K Technologies, một công ty dịch vụ và tích hợp hệ thống toàn cầu. Là một phần của dự án gần đây, chúng tôi phải phân tích sơ yếu lý lịch, trích xuất và lưu trữ thông tin từ sơ yếu lý lịch ở định dạng có cấu trúc vì sơ yếu lý lịch thường được tải lên hoặc gửi qua email ở nhiều định dạng khác nhau như PDF, docx, v.v.

Nói chung, đối với định dạng PDF, chúng tôi cần trích xuất văn bản từ PDF để phân tích thêm. Sơ yếu lý lịch PDF được tạo theo nhiều cách khác nhau. Ví dụ: một số người tìm việc tạo sơ yếu lý lịch ở định dạng từ và sau đó lưu chúng dưới dạng PDF, trong khi một số tạo sơ yếu lý lịch bằng LATEX hoặc sử dụng các mẫu CV trực tuyến. Nhìn chung, chúng tôi có thể phân tích tất cả các loại sơ yếu lý lịch này và trích xuất mọi văn bản mà không làm mất thông tin

Dưới đây là hai ví dụ sơ yếu lý lịch, một ở định dạng docx và cái còn lại được tạo bằng LATEX và được lưu ở định dạng PDF

Sơ yếu lý lịch ở định dạng docx và PDF

Ở đây, để thực hiện các nhiệm vụ nhất định, tôi đã thử nhiều gói python khác nhau. Trong blog này, tôi đã tóm tắt hiệu suất của các gói này, mỗi gói đều có ưu và nhược điểm.

Dưới đây là danh sách các gói tôi đã sử dụng để trích xuất văn bản từ tệp PDF

  1. PyPDF2
  2. tiki
  3. văn bản
  4. PyMuPDF
  5. PDFtotext
  6. Công cụ khai thác PDF
  7. bảng

Chúng tôi sẽ đi chi tiết từng gói cùng với mã python

PyPDF2

PyPDF2 là gói Python thuần túy có thể được sử dụng cho nhiều loại hoạt động PDF khác nhau. PyPDF2 có thể được sử dụng để thực hiện các tác vụ sau

· Trích xuất thông tin tài liệu từ PDF bằng Python

· Xoay trang

· Hợp nhất các tệp PDF

· Tách các tệp PDF

· Thêm hình mờ

· Mã hóa PDF

Hiển thị bên dưới là mã để trích xuất toàn văn và số trang bằng PyPDF2 cùng với Đầu vào PDF và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#Using PyPDF2#importing required modules
import PyPDF4
# creating a pdf file object
pdfFileObj = open[path, 'rb']
#creating a pdf reader object
pdfReader = PyPDF4.PdfFileReader[pdfFileObj]
#printing number of pages in pdf file
print[pdfReader.numPages]
#creating a page object
pageObj = pdfReader.getPage[0]
# extracting text from page
for i in range[pdfReader.numPages]:
pypdf2_text +=pdfReader.getPage[i].extractText[]
#closing the pdf file object
pdfFileObj.close[]

Nhược điểm của việc sử dụng gói PyPDF2

  1. Gói này trích xuất văn bản nhưng không bảo toàn cấu trúc của văn bản trong PDF gốc
  2. Không gian không cần thiết và dòng mới được bao gồm trong văn bản trích xuất
  3. Nó không bảo toàn cấu trúc bảng

Khi tôi sử dụng tệp PDF được tạo bằng LATEX, văn bản được trích xuất không có khoảng trắng, điều đó có nghĩa là một số thông tin có thể bị mất

tiki

Tika là một gói dựa trên Java. Tika-Python là Python ràng buộc với các dịch vụ Apache TikaTM REST, cho phép Tika được gọi nguyên bản bằng ngôn ngữ python. Để sử dụng gói Tika trong python, chúng tôi cần cài đặt java trong hệ thống của bạn. Khi bạn chạy mã lần đầu tiên, nó sẽ bắt đầu kết nối với máy chủ Java. Điều này dẫn đến việc trích xuất văn bản từ PDF bằng gói Tika bị chậm nếu mã đang chạy lần đầu tiên trong hệ thống

Dưới đây là một số tác vụ bổ sung được thực hiện trong khi trích xuất văn bản từ PDF

  1. Trích xuất nội dung của tệp PDF
  2. Trích xuất siêu dữ liệu của tệp PDF
  3. Trích xuất khóa [siêu dữ liệu và nội dung cho từ điển]
  4. Để biết trạng thái máy chủ Tika

Dưới đây là mã để trích xuất toàn văn từ PDF bằng gói Tika cùng với Nhập PDF và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#using Tika
#pip install tika
from tika import parser
raw = parser.from_file[path2]
tika_text = raw['content']

Một số nhược điểm chính của việc sử dụng gói Tika là

  1. Cần cài java
  2. Kết nối máy chủ Java tốn nhiều thời gian
  3. Không bảo toàn cấu trúc bảng

Vì vậy, nếu bạn cảm thấy thoải mái khi cài đặt Java trong hệ thống của mình, thì bạn có thể sử dụng gói này

văn bản

Mặc dù tồn tại một số gói để tự trích xuất nội dung từ nhiều định dạng tệp khác nhau, gói Textract cung cấp một giao diện duy nhất để trích xuất nội dung từ bất kỳ loại tệp nào mà không có bất kỳ đánh dấu không liên quan nào

Textract được sử dụng để trích xuất văn bản từ tệp PDF cũng như các định dạng tệp khác. Định dạng tệp khác bao gồm csv, doc, eml, epub, json, jpg, mp3, msg, xls, v.v.

Điểm đáng chú ý nhất của việc sử dụng gói Textract là nó trích xuất thông tin từ các tệp ở định dạng byte. Để chuyển đổi dữ liệu byte thành chuỗi, chúng ta cần sử dụng các gói python khác để giải mã như codec

Dưới đây là mã để trích xuất văn bản từ PDF bằng Textract cùng với Input PDF và xuất văn bản được trích xuất

path =   r"\....Downloads\RuchaSawarkar.pdf"#for decoding
import codecs
#using Textract
import textract
#extract text in byte format
textract_text = textract.process[path]
#convert bytes to string
textract_str_text = codecs.decode[textract_text]

Sau khi sử dụng gói này để trích xuất văn bản, không bị mất thông tin. Cấu trúc của tài liệu gốc được duy trì. Tuy nhiên, cấu trúc bảng không được bảo tồn

Nhìn chung, gói này cung cấp một tùy chọn tốt để trích xuất văn bản không chỉ từ PDF mà còn từ các loại tệp khác

PyMuPDF

PyMuPDF là một ràng buộc trăn cho MuPDF, một trình xem PDF nhẹ. PyMuPDF không hoàn toàn dựa trên python. Gói này được biết đến với cả hai, hiệu suất hàng đầu và chất lượng hiển thị cao

Với PyMuPDF, chúng tôi có thể truy cập các tệp có phần mở rộng như *. pdf, *. xps, *. oxps, *. xuất bản, *. cbz hoặc *. fb2 từ tập lệnh Python của bạn. Một số định dạng hình ảnh phổ biến cũng được hỗ trợ, bao gồm hình ảnh TIFF nhiều trang

PyMuPDF cũng trích xuất thông tin của nhiều tài liệu. Nó cho chúng tôi đặc quyền trích xuất thông tin cho một trang cụ thể nếu bạn nhập số trang

Dưới đây là mã để trích xuất văn bản từ PDF bằng PyMuPDF cùng với Nhập PDF và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#Usinf pymupdf
import fitz # this is pymupdf
#extract text page by page
with fitz.open[path] as doc:
pymupdf_text = ""
for page in doc:
pymupdf_text += page.getText[]

Nhìn chung, PyMuPDF là lựa chọn mà bạn có thể cân nhắc khi trích xuất văn bản từ tệp PDF. Nó loại bỏ các khoảng trống không cần thiết khỏi văn bản, vì vậy nhiệm vụ làm sạch văn bản của quá trình xử lý trước được gói này tự động thực hiện

Nó duy trì cấu trúc ban đầu của tài liệu. Tuy nhiên, tương tự như các gói khác, vấn đề trích xuất bảng ở định dạng ban đầu vẫn tồn tại. Chúng tôi sẽ phải sử dụng một số gói khác để lưu giữ thông tin trong bảng

PDFtotext

PDFtotxt là gói hoàn toàn dựa trên python có thể được sử dụng để trích xuất văn bản từ tệp PDF. Như tên cho thấy, nó chỉ hỗ trợ các tệp PDF trong khi các định dạng tệp khác không được hỗ trợ

Dữ liệu được trích xuất dưới dạng một đối tượng. Cấu trúc của PDF được giữ nguyên

Dưới đây là mã để trích xuất văn bản từ PDF bằng gói PDFtotext cùng với Nhập PDF và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#Using PDFtotext
import pdftotext
# Load your PDF
with open[path2, "rb"] as f:
pdf = pdftotext.PDF[f]
# Read all the text into one string
pdftotext_text = "\n\n".join[pdf]

Nói cách khác, không giống như tất cả các gói đã thảo luận trước đây, ưu điểm chính của gói là nó bảo toàn cấu trúc của văn bản PDF cũng như định dạng cấu trúc bảng

Công cụ khai thác PDF

Đây là một gói hoàn toàn dựa trên python khác được sử dụng để chỉ giải nén các tệp PDF. Nó cũng có thể chuyển đổi các tệp PDF thành các định dạng tệp khác như HTML/XML. Có nhiều phiên bản PDFminer khác nhau và phiên bản mới nhất tương thích với python 3. 6 trở lên

PDFminer cung cấp dịch vụ của mình dưới dạng yêu cầu API. Do đó, kết quả thu được từ gói này mất nhiều thời gian hơn một chút so với các gói hoàn toàn dựa trên python khác

Có một số tham số được sử dụng khi gọi gói này. Mô tả đầy đủ của các tham số có thể được tìm thấy ở đây

Mã được sử dụng để trích xuất văn bản từ PDF bằng gói PDFminer tẻ nhạt và dài hơn so với mã đơn giản được sử dụng cho các gói khác được đưa ra bên dưới cùng với Nhập PDF và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#Using PDFminer
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
def convert_pdf_to_txt[path]:
rsrcmgr = PDFResourceManager[]
retstr = StringIO[]
codec = 'utf-8'
laparams = LAParams[]
device = TextConverter[rsrcmgr, retstr, codec=codec,laparams=laparams]
fp = open[path, 'rb']
interpreter = PDFPageInterpreter[rsrcmgr, device]
password = ""
maxpages = 0
caching = True
pagenos=set[]
for page in PDFPage.get_pages[fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True]:
interpreter.process_page[page]
text = retstr.getvalue[]
fp.close[]
device.close[]
retstr.close[]
return text
pdf_miner_text = convert_pdf_to_txt[path1]

bảng

Gói dựa trên java này chủ yếu được sử dụng để đọc các bảng trong PDF. Nó là một trình bao bọc python đơn giản cho tabula-java

Việc trích xuất thông tin được lưu trữ trong DataFrame python trong python, sau này có thể được chuyển đổi thành định dạng tệp csv, tsv, excel hoặc json

Hiển thị bên dưới là mã để trích xuất bảng vào DataFrame từ tệp PDF bằng Gói Tabula cùng với PDF đầu vào và xuất văn bản được trích xuất

path = r"\....Downloads\RuchaSawarkar.pdf"#using Tabula
import tabula
df = tabula.read_pdf[path, pages='all']

Gói này rất hữu ích để trích xuất thông tin bảng. Sử dụng Tabula cùng với các gói khác được đề cập ở trên có thể hữu ích để trích xuất toàn văn từ tệp PDF

Phần kết luận

Trong blog này, tôi đã so sánh các gói python khác nhau để trích xuất văn bản từ định dạng tệp PDF. Ngoài ra, tôi đã bao gồm các đoạn mã cho từng gói bằng ngôn ngữ lập trình python

Tóm tắt

  1. PyPDF2 — Ít được ưa thích hơn so với các loại khác
  2. Tika — Cần cài đặt java — Cần quen thuộc với việc cài đặt Java, không cần thiết liên quan đến kết nối java, tốt để trích xuất nội dung, khóa, siêu dữ liệu
  3. textract — Trả về đối tượng byte — cần chuyển nó thành chuỗi
  4. PyMuPDF — Trích xuất văn bản từ tệp PDF, xóa khoảng trắng không cần thiết khỏi văn bản, duy trì cấu trúc ban đầu của tài liệu
  5. PDFminer — Giữ nguyên cấu trúc của văn bản tệp PDF nhưng không giữ nguyên cấu trúc bảng
  6. PDFtoText — Tương đối được ưa thích nhất vì nó giữ nguyên bảng và cấu trúc ban đầu

Tôi đã tải lên các mã và một số tệp PDF để so sánh các gói trên liên kết hồ sơ GitHub của tôi để bạn tham khảo

Cảm ơn bạn đã đọc. Tôi chân thành hy vọng bạn thấy nó hữu ích và như mọi khi, tôi sẵn sàng nhận phản hồi mang tính xây dựng

Như tôi đã đề cập, tôi là Nhà khoa học dữ liệu tại 3K Technologies. Vui lòng theo dõi trang công ty của chúng tôi để biết thêm các blog như vậy và các giải pháp sáng tạo tại đây

Chủ Đề