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 Show 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 PyMuPDFTô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ã
Đầ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 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 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 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ệuTá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ố 8giả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 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 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ệuNguồ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 |