Học sâu trích xuất văn bản từ pdf python

Khai thác dữ liệu là quá trình trích xuất dữ liệu từ nhiều nguồn khác nhau như tệp CSV, web, PDF, v.v. Mặc dù trong một số tệp, dữ liệu có thể được trích xuất dễ dàng như trong CSV, trong khi ở các tệp như PDF không có cấu trúc, chúng tôi phải thực hiện các tác vụ bổ sung để trích xuất dữ liệu từ PDF Python

Có một vài thư viện Python mà bạn có thể trích xuất dữ liệu từ các tệp PDF. Ví dụ: bạn có thể sử dụng thư viện PyPDF2 để trích xuất văn bản từ tệp PDF có văn bản theo trình tự hoặc định dạng i. e. trong dòng hoặc hình thức. Bạn cũng có thể trích xuất các bảng trong tệp PDF thông qua thư viện Camelot. Trong tất cả các trường hợp này, dữ liệu ở dạng có cấu trúc. e. tuần tự, biểu mẫu hoặc bảng

Tuy nhiên, trong thế giới thực, hầu hết dữ liệu không có ở bất kỳ dạng nào và không có thứ tự dữ liệu. Nó hiện diện ở dạng phi cấu trúc. Trong trường hợp này, việc sử dụng các thư viện python ở trên là không khả thi vì chúng sẽ cho kết quả không rõ ràng. Để phân tích dữ liệu phi cấu trúc, chúng ta cần chuyển đổi nó sang dạng có cấu trúc

Do đó, không có kỹ thuật hoặc quy trình cụ thể nào để trích xuất dữ liệu từ các tệp PDF không có cấu trúc vì dữ liệu được lưu trữ ngẫu nhiên và nó phụ thuộc vào loại dữ liệu bạn muốn trích xuất từ ​​PDF

Ở đây, tôi sẽ chỉ cho bạn một kỹ thuật thành công nhất & một thư viện python mà qua đó bạn có thể trích xuất dữ liệu từ các hộp giới hạn trong các tệp PDF không có cấu trúc và sau đó thực hiện thao tác làm sạch dữ liệu trên dữ liệu đã trích xuất và chuyển đổi nó thành dạng có cấu trúc

PyMuPDF

Tôi đã sử dụng thư viện PyMuPDF cho mục đích này. Thư viện này cung cấp nhiều ứng dụng như trích xuất hình ảnh từ PDF, trích xuất văn bản từ các hình dạng khác nhau, tạo chú thích, vẽ hộp giới hạn xung quanh văn bản cùng với các tính năng của thư viện như PyPDF2

Bây giờ, tôi sẽ chỉ cho bạn cách tôi trích xuất dữ liệu từ các hộp giới hạn trong tệp PDF có nhiều trang

Đây là PDF và các hộp giới hạn màu đỏ mà chúng tôi cần trích xuất dữ liệu

Tôi đã thử nhiều thư viện python như PyPDF2, PDFMiner, pikepdf, Camelot và tabulat. Tuy nhiên, không có ứng dụng nào hoạt động ngoại trừ PyMuPDF để trích xuất dữ liệu từ PDF bằng Python

Trước khi đi vào mã, điều quan trọng là phải hiểu ý nghĩa của 2 thuật ngữ quan trọng sẽ giúp hiểu mã

Từ. Dãy ký tự không có khoảng trắng. Ví dụ – tro, 23, 2, 3

Chú thích. Chú thích liên kết một đối tượng như ghi chú, hình ảnh hoặc hộp giới hạn với một vị trí trên trang của tài liệu PDF hoặc cung cấp cách tương tác với người dùng bằng chuột và bàn phím. Các đối tượng được gọi là chú thích

Xin lưu ý rằng trong trường hợp của chúng tôi, hộp giới hạn, chú thích và hình chữ nhật là giống nhau. Do đó, các thuật ngữ này sẽ được sử dụng thay thế cho nhau

Đầu tiên, chúng tôi sẽ trích xuất văn bản từ một trong các hộp giới hạn. Sau đó, chúng tôi sẽ sử dụng quy trình tương tự để trích xuất dữ liệu từ tất cả các hộp giới hạn của pdf

Mã số

import fitz
import pandas as pd 
doc = fitz.open('Mansfield--70-21009048 - ConvertToExcel.pdf')
page1 = doc[0]
words = page1.get_text("words")

Đầu tiên, chúng tôi nhập mô-đun fitz của thư viện PyMuPDF và thư viện gấu trúc. Sau đó, đối tượng của tệp PDF được tạo và lưu trữ trong tài liệu và trang pdf đầu tiên được lưu trữ trên trang1. trang. get_text() trích xuất tất cả các từ của trang 1. Mỗi từ bao gồm một bộ có 8 phần tử

Trong biến word, 4 phần tử đầu đại diện cho tọa độ của từ, phần tử thứ 5 là chính từ đó, các phần tử thứ 6,7,8 lần lượt là số khối, dòng, từ

ĐẦU RA

Học sâu trích xuất văn bản từ pdf python

Trích xuất tọa độ của đối tượng đầu tiên

first_annots=[]

rec=page1.first_annot.rect

rec

#Information of words in first object is stored in mywords

mywords = [w for w in words if fitz.Rect(w[:4]) in rec]

ann= make_text(mywords)

first_annots.append(ann)

Hàm này chọn các từ có trong hộp, sắp xếp các từ và trả về dạng chuỗi.  

def make_text(words):

    line_dict = {} 

    words.sort(key=lambda w: w[0])

    for w in words:  

        y1 = round(w[3], 1)  

        word = w[4] 

        line = line_dict.get(y1, [])  

        line.append(word)  

        line_dict[y1] = line  

    lines = list(line_dict.items())

    lines.sort()  

    return "n".join([" ".join(line[1]) for line in lines])

ĐẦU RA

Học sâu trích xuất văn bản từ pdf python

trang. first_annot() đưa ra chú thích đầu tiên tôi. e. hộp giới hạn của trang

rect đưa ra tọa độ của một hình chữ nhật

Bây giờ, chúng ta có tọa độ của hình chữ nhật và tất cả các từ trên trang. Sau đó, chúng tôi lọc các từ có trong hộp giới hạn của chúng tôi và lưu trữ chúng trong biến mywords

Chúng tôi đã có tất cả các từ trong hình chữ nhật với tọa độ của chúng. Tuy nhiên, những từ này theo thứ tự ngẫu nhiên. Vì chúng tôi cần văn bản theo trình tự và điều đó chỉ có ý nghĩa, nên chúng tôi đã sử dụng hàm make_text() để sắp xếp các từ đầu tiên từ trái sang phải rồi từ trên xuống dưới. Nó trả về văn bản ở định dạng chuỗi

Tiếng hoan hô. Chúng tôi đã trích xuất dữ liệu từ một chú thích. Nhiệm vụ tiếp theo của chúng tôi là trích xuất dữ liệu từ tất cả các chú thích của PDF sẽ được thực hiện theo cách tiếp cận tương tự

Trích xuất từng trang của tài liệu và tất cả các chú thích/hình chữ nhật

for pageno in range(0,len(doc)-1):

    page = doc[pageno]

    words = page.get_text("words")

    for annot in page.annots():

        if annot!=None:

            rec=annot.rect

            mywords = [w for w in words if fitz.Rect(w[:4]) in rec]

            ann= make_text(mywords)

            all_annots.append(ann)

all_annots, một danh sách được khởi tạo để lưu trữ văn bản của tất cả các chú thích trong pdf

Chức năng của vòng lặp ngoài trong đoạn mã trên là duyệt qua từng trang của PDF, trong khi chức năng của vòng lặp bên trong là duyệt qua tất cả các chú thích của trang và thực hiện nhiệm vụ thêm văn bản vào danh sách all_annots như đã thảo luận trước đó

In all_annots cung cấp cho chúng tôi văn bản của tất cả các chú thích của pdf mà bạn có thể xem bên dưới

ĐẦU RA

Học sâu trích xuất văn bản từ pdf python

Cuối cùng, chúng tôi đã trích xuất các văn bản từ tất cả các hộp chú thích/giới hạn

Đã đến lúc làm sạch dữ liệu và đưa dữ liệu về dạng dễ hiểu

Làm sạch dữ liệu và xử lý dữ liệu

Tách để tạo thành tên cột và các giá trị của nó

cont=[]

for i in range(0,len(all_annots)):

    cont.append(all_annots[i].split('n',1))

Loại bỏ các ký hiệu không cần thiết *,#,

liss=[]

for i in range(0,len(cont)):

    lis=[]

    for j in cont[i]:

        j=j.replace('*','')

        j=j.replace('#','')

        j=j.replace(':','')

        j=j.strip()

        #print(j)

        lis.append(j)

    liss.append(lis)

Tách thành các khóa và giá trị và xóa khoảng trắng trong các giá trị chỉ chứa chữ số

keys=[]

values=[]

for i in liss:

    keys.append(i[0])

    values.append(i[1])

for i in range(0, len(values)):

    for j in range(0,len(values[i])):

        if values[i][j]>='A' and values[i][j]<='Z':

            break            

    if j==len(values[i])-1:
       values[i]=values[i].replace(' ','')

Chúng tôi tách từng chuỗi dựa trên một ký tự dòng (n) mới để tách tên cột khỏi các giá trị của nó. Bằng cách làm sạch thêm các biểu tượng không cần thiết như (*, #, 🙂 bị xóa. Khoảng cách giữa các chữ số được loại bỏ

Với các cặp khóa-giá trị, chúng tôi tạo một từ điển được hiển thị bên dưới

Chuyển sang từ điển

report=dict(zip(keys,values))

report[‘VEHICLE IDENTIFICATION’]=report[‘VEHICLE IDENTIFICATION’]. thay thế(' ',")

________số 8

giải nén = tôi

            val_after.append(extract)
break
report['LOCALITY']=val_after[0]
report['MANNER OF CRASH COLLISION/IMPACT']=val_after[1]
report['CRASH SEVERITY']=val_after[2]

ĐẦU RA

Học sâu trích xuất văn bản từ pdf python

Cuối cùng, từ điển được chuyển đổi thành khung dữ liệu với sự trợ giúp của gấu trúc

Chuyển đổi sang DataFrame và xuất sang CSV.  

first_annots=[]

rec=page1.first_annot.rect

rec

#Information of words in first object is stored in mywords

mywords = [w for w in words if fitz.Rect(w[:4]) in rec]

ann= make_text(mywords)

first_annots.append(ann)
0

first_annots=[]

rec=page1.first_annot.rect

rec

#Information of words in first object is stored in mywords

mywords = [w for w in words if fitz.Rect(w[:4]) in rec]

ann= make_text(mywords)

first_annots.append(ann)
1

ĐẦU RA

Học sâu trích xuất văn bản từ pdf python

Bây giờ, chúng tôi có thể thực hiện phân tích trên dữ liệu có cấu trúc của mình hoặc xuất nó sang excel

Tôi hy vọng rằng bạn thích đọc blog này và nó đã cho bạn trực giác về việc xử lý dữ liệu phi cấu trúc

Người giới thiệu

Nguồn của hình ảnh nổi bật. Python thật https. //trăn thật. com/python-data-engineer/

Tài liệu PyMuPDF. https. //pymupdf. đọcthedocs. io/vi/mới nhất/

Giới thiệu về tác giả

Xin chào. Tôi là Ashish Choudhary. Tôi đang theo đuổi B. Công nghệ từ Đại học Khoa học & Công nghệ JC Bose. Khoa học dữ liệu là niềm đam mê của tôi và cảm thấy tự hào khi viết những blog thú vị liên quan đến nó. Vui lòng liên hệ với tôi trên Linkedin Linkedin. com/in/ashish-choudhary-7b6029166

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả

Làm cách nào để trích xuất bảng dưới dạng văn bản từ PDF bằng Python?

Cách trích xuất bảng từ PDF bằng Python .
pip3 cài đặt camelot-py[cv] tabula-py
nhập tệp camelot # PDF để trích xuất các bảng từ tệp = "foo. pdf"
# trích xuất tất cả các bảng trong tệp PDF bảng = camelot. .
# số bảng đã trích print("Tổng số bảng đã trích. ", những cái bàn. .
Tổng số bảng được trích xuất. 1

Cách dễ nhất để trích xuất văn bản từ PDF bằng Python là gì?

Công cụ chúng tôi đang sử dụng trong hướng dẫn này là PDF Plumber, một gói mã nguồn mở của python, rất tuyệt vời, đơn giản và mạnh mẽ. .
Nhập mô-đun của bạn. pip cài đặt pdfplumber -qimport pdfplumber. .
open('đường dẫn/đến/thư mục').
trang[ ].
trích_văn()

Làm cách nào để chuyển đổi PDF sang txt bằng Python?

Cách chuyển đổi PDF sang TXT .
Cài đặt 'Aspose. Từ cho Python thông qua. BỌC LƯỚI'
Thêm tham chiếu thư viện (nhập thư viện) vào dự án Python của bạn
Mở tệp PDF nguồn bằng Python
Gọi phương thức 'save()', chuyển tên tệp đầu ra có phần mở rộng TXT
Nhận kết quả chuyển đổi PDF dưới dạng TXT