Hướng dẫn how do i extract specific text from a pdf in python? - làm cách nào để trích xuất văn bản cụ thể từ pdf trong python?

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    ĐọcPortable Document Format. It uses .pdf extension. It is used to present and exchange documents reliably, independent of software, hardware, or operating system.

    Bàn luận

    Tất cả các bạn phải quen thuộc với PDFS là gì. Trên thực tế, chúng là một trong những phương tiện kỹ thuật số quan trọng và được sử dụng rộng rãi nhất. PDF là viết tắt của định dạng tài liệu di động. Nó sử dụng tiện ích mở rộng .pdf. Nó được sử dụng để trình bày và trao đổi tài liệu một cách đáng tin cậy, độc lập với phần mềm, phần cứng hoặc hệ điều hành.

    Trích xuất văn bản từ tệp PDF For more information, refer to Working with PDF files in Python

    Gói Pypdf của Python có thể được sử dụng để đạt được những gì chúng ta muốn (trích xuất văn bản), mặc dù nó có thể làm nhiều hơn những gì chúng ta cần. Gói này cũng có thể được sử dụng để tạo, giải mã và hợp nhất các tệp PDF.

    Lưu ý: Để biết thêm thông tin, hãy tham khảo làm việc với các tệp PDF trong Python

    pip install PyPDF2

    Example:

    Cài đặt

    Hướng dẫn how do i extract specific text from a pdf in python? - làm cách nào để trích xuất văn bản cụ thể từ pdf trong python?

    Để cài đặt gói này, loại lệnh dưới đây trong thiết bị đầu cuối.

    Đầu vào PDF:

    pdfFileObj = open('example.pdf', 'rb')
    7
    pdfFileObj = open('example.pdf', 'rb')
    8

    print(pdfReader.numPages)
    0
    print(pdfReader.numPages)
    1

    pdfFileObj = open('example.pdf', 'rb')
    9
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    0
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    1
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    2223
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    4
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    5
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    6

    print(pdfReader.numPages)
    0
    print(pdfReader.numPages)
    8

    print(pdfReader.numPages)
    9

    Output:

    Hướng dẫn how do i extract specific text from a pdf in python? - làm cách nào để trích xuất văn bản cụ thể từ pdf trong python?

    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    7
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    0
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    9

    • pdfFileObj = open('example.pdf', 'rb')

      print(pdfReader.numPages)
      2
      pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
      0
      print(pdfReader.numPages)
      4
      print(pdfReader.numPages)
      5
      pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
      6example.pdf in binary mode. and saved the file object as pdfFileObj.

    • pdfReader = PyPDF2.PdfFileReader(pdfFileObj)

      Hãy để chúng tôi cố gắng hiểu mã trên trong các khối:PdfFileReader class of PyPDF2 module and  pass the pdf file object & get a pdf reader object.

    • print(pdfReader.numPages)

      Chúng tôi đã mở ví dụ.pdf ở chế độ nhị phân. & Nbsp; và đã lưu đối tượng tệp dưới dạng pdffiLeobj.property gives the number of pages in the pdf file. For example, in our case, it is 20 (see first line of output).

    • pageObj = pdfReader.getPage(0)

      Ở đây, chúng tôi tạo một đối tượng của lớp pdffileReader của mô -đun PYPDF2 và & nbsp; & nbsp; vượt qua đối tượng tệp PDF và nhận đối tượng đầu đọc pdf.PageObject class of PyPDF2 module. pdf reader object has function getPage() which takes page number (starting form index 0) as argument and returns the page object.

    • print(pageObj.extractText())

      Thuộc tính Numpages cung cấp số lượng trang trong tệp PDF. Ví dụ, trong trường hợp của chúng tôi, nó là 20 (xem dòng đầu ra đầu tiên).extractText() to extract text from the pdf page.

    • pdfFileObj.close()

      Bây giờ, chúng tôi tạo một đối tượng của lớp trang PYPDF2. Đối tượng đầu đọc pdf có chức năng getPage () lấy số trang (chỉ mục biểu mẫu bắt đầu 0) làm đối số và trả về đối tượng trang.

    Cách chia, lưu và trích xuất văn bản từ các tệp PDF bằng PYPDF2 và PDFMiner, được chứng minh với các tác phẩm hoàn chỉnh của H. P. Lovecraft.

    Ảnh của Aleksandar Pasaric từ Pexels

    Tôi không nghĩ rằng có nhiều chỗ cho sự sáng tạo khi viết đoạn giới thiệu cho một bài viết về trích xuất văn bản từ tệp pdf. Có một pdf, có văn bản trong đó, chúng tôi muốn văn bản ra và tôi sẽ chỉ cho bạn cách làm điều đó bằng cách sử dụng Python.

    Trong phần đầu tiên, chúng ta sẽ xem xét hai thư viện Python, PYPDF2 và PDFMiner. Như tên của chúng cho thấy, chúng là các thư viện được viết riêng để hoạt động với các tệp PDF. Chúng tôi sẽ thảo luận về các lớp và phương pháp khác nhau mà chúng tôi cần.

    Sau đó, trong phần thứ hai, chúng tôi sẽ làm việc trong một dự án, đó là về việc chia tệp PDF dài 708 trang thành các tệp nhỏ hơn riêng biệt, trích xuất thông tin văn bản, làm sạch nó và sau đó xuất sang các tệp văn bản dễ đọc. Để biết thêm thông tin về dự án này, vui lòng tham khảo repo GitHub của tôi.

    PyPDF2

    Bước đầu tiên, cài đặt gói:

    pip install PyPDF2

    Đối tượng đầu tiên chúng ta cần là pdffileReader:

    reader = PyPDF2.PdfFileReader('Complete_Works_Lovecraft.pdf')

    Tham số là đường dẫn đến tài liệu

    pageObj = pdfReader.getPage(0)
    0 mà chúng tôi muốn làm việc. Bạn có thể nhận được một số thông tin chung về tài liệu của bạn với đối tượng
    pageObj = pdfReader.getPage(0)
    1 này. Ví dụ:
    pageObj = pdfReader.getPage(0)
    2 là một thuộc tính chứa từ điển thông tin tài liệu ở định dạng này:

    {'/Author': 'H.P. Lovecraft',
    '/Creator': 'Microsoft® Word 2010',
    '/CreationDate': "D:20110729214233-04'00'",
    '/ModDate': "D:20110729214233-04'00'",
    '/Producer': 'Microsoft® Word 2010'}

    Bạn cũng có thể nhận được tổng số trang với

    pageObj = pdfReader.getPage(0)
    3.

    Có lẽ phương pháp quan trọng nhất là

    pageObj = pdfReader.getPage(0)
    4 trả về một trang của tệp dưới dạng một pageObject riêng biệt. Hãy cẩn thận, PageObjects nằm trong danh sách, vì vậy phương thức sử dụng chỉ mục dựa trên không.

    Chúng tôi sẽ không sử dụng rất nhiều lớp PageObject, một điều bổ sung bạn có thể xem xét là phương thức

    pageObj = pdfReader.getPage(0)
    5, chuyển đổi nội dung của một trang thành biến chuỗi. Ví dụ: để lấy văn bản trên trang thứ 7 (hãy nhớ, không chỉ số không) của PDF, trước tiên bạn sẽ tạo một PageObject từ pdffileReader và gọi phương thức này:

    pdfFileObj = open('example.pdf', 'rb')
    0

    Tuy nhiên, ngay cả tài liệu chính thức cũng nói điều này trên phương thức: Đây là hoạt động tốt cho một số tệp PDF, nhưng kém cho những người khác, tùy thuộc vào trình tạo được sử dụng. Điều này không chính xác yên tâm, và theo kinh nghiệm của tôi,

    pageObj = pdfReader.getPage(0)
    5 không hoạt động đúng, nó đã bỏ qua các dòng trang đầu tiên và cuối cùng. Đây là lý do chính tại sao tôi cũng sử dụng thư viện khác, PDFMiner, trong dự án.

    Điều tiếp theo chúng ta cần là một đối tượng pdffilewriter. Lớp này không có tham số, bạn chỉ có thể tạo nó như vậy:

    pdfFileObj = open('example.pdf', 'rb')
    1

    Đối tượng

    pageObj = pdfReader.getPage(0)
    7 sẽ theo dõi tệp
    pageObj = pdfReader.getPage(0)
    0 mà chúng tôi muốn tạo. Để thêm một trang vào tệp sẽ được tạo, hãy sử dụng phương thức
    pageObj = pdfReader.getPage(0)
    9, yêu cầu một đối tượng PageObject làm tham số. Ví dụ: để thêm một trang nhất định từ PDF đầu vào của chúng tôi:

    pdfFileObj = open('example.pdf', 'rb')
    2

    Và cuối cùng, một đối tượng pdffileWriter có một phương thức ghi lưu nội dung trong một tệp. Phương thức yêu cầu một tham số, một đối tượng tệp, có nghĩa là chỉ cần nhập đường dẫn tệp giành được công việc. Một cách đơn giản để tạo đối tượng tệp là bằng cách sử dụng phương thức

    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    1 tích hợp của Python:

    pdfFileObj = open('example.pdf', 'rb')
    3

    Đây là tất cả các lớp và phương pháp mà chúng tôi sẽ sử dụng, xem tài liệu PYPDF2 để biết thông tin về các chức năng bổ sung.

    Bây giờ chúng ta có thể đọc và viết các tệp PDF, nhưng có một chức năng quan trọng mà chúng ta vẫn cần: chuyển đổi nội dung thành tệp văn bản. Đối với điều đó, chúng ta cần sử dụng một thư viện khác, pdfminer.

    PDFMiner

    Chúng tôi sẽ sử dụng pdfminer.six, một ngã ba được duy trì cộng đồng của thư viện PDFMiner ban đầu. (Dự án PDFMiner không còn được duy trì vào năm 2020.)

    Đầu tiên, bạn cần cài đặt nó:

    pdfFileObj = open('example.pdf', 'rb')
    4

    So với PYPDF2, phạm vi PDFMiner, hạn chế hơn nhiều, nó thực sự chỉ tập trung vào việc trích xuất văn bản từ thông tin nguồn của tệp PDF. Tài liệu cũng rất tập trung, có khoảng ba ví dụ trong đó và về cơ bản chúng tôi sẽ sử dụng mã này được cung cấp một cách khéo léo trong hướng dẫn. Vì mã dường như hoạt động chính xác, tôi không cảm thấy cần phải đào sâu hơn.

    Đó là tất cả những gì chúng ta cần bây giờ, vào dự án thực tế của chúng tôi!

    Giới thiệu dự án Lovecraft

    Chỉ để cung cấp cho bạn một số bối cảnh về lý do tại sao chúng tôi đang thực hiện dự án này, tôi muốn thực hiện một phân tích NLP toàn diện về các tác phẩm của H. P. Lovecraft. Trong trường hợp bạn không biết đó là ai, ông là một nhà văn người Mỹ vào đầu thế kỷ 20, nổi tiếng với tiểu thuyết kinh dị kỳ lạ và vũ trụ, với ảnh hưởng rất lớn đến văn hóa nhạc pop hiện đại. Nếu bạn muốn có một cái nhìn thoáng qua về phong cách viết của anh ấy, hãy xem bài đăng này và nếu bạn muốn đọc một số khía cạnh có vấn đề hơn của nhân vật của anh ấy, tôi sẽ đề xuất điều này.

    Điều tuyệt vời là các tác phẩm của ông chính thức là phạm vi công cộng ở Liên minh châu Âu bây giờ đã đi qua 70 năm kể từ khi ông qua đời, và về cơ bản là phạm vi công cộng ở Hoa Kỳ vì dường như không ai sở hữu các quyền. Đó là lý do tại sao mọi thứ đều có Cthulhu trong họ những ngày này, đó là sở hữu trí tuệ miễn phí. Có nhiều nguồn trực tuyến nơi bạn có thể thu thập các tác phẩm của anh ấy, nhưng thật thú vị, chúng không có trên Project Gutenberg. Tôi đã tìm thấy một số bộ sưu tập khác có những thay đổi từ nhỏ, một ví dụ là thường xuyên, so với thường xuyên, trong câu đầu tiên của Beyond Wall và Sleep, hoặc không chứa các trích dẫn, v.v.

    Cuối cùng, tôi thấy Arkham Archivist là một tùy chọn được ghi chép tương đối tốt (tôi cũng thực sự thích cái tên này), tải xuống PDF và bắt đầu làm việc để chia tệp và trích xuất văn bản.

    Đưa lý thuyết vào thực tế

    Trong phần này, chúng tôi đang kết hợp những gì chúng tôi đã học cho đến nay. Tất cả những gì chúng ta cần bắt đầu là tệp PDF lớn từ Arkham Archivist.

    Có một vài chức năng chung mà chúng tôi sẽ sử dụng, tôi đã lưu chúng trong một tệp

    print(pageObj.extractText())
    1 riêng biệt:

    Functions:

    • print(pageObj.extractText())
      2: Đó là mã trích xuất văn bản chung mà chúng tôi đã sao chép từ tài liệu pdfminer.six và được sửa đổi một chút để chúng tôi có thể sử dụng nó như một hàm;
    • print(pageObj.extractText())
      3: Một chức năng lấy tiêu đề khi nó xuất hiện trong bảng nội dung và chuyển đổi nó thành tên của tệp- khi tôi bắt đầu làm việc này, tôi cho rằng chúng tôi sẽ cần nhiều điều chỉnh hơn;
    • print(pageObj.extractText())
      4: Mục đích của chức năng này sẽ trở nên rõ ràng hơn sau đó, về cơ bản, nó được sử dụng để xác định xem một dòng trong bảng nội dung có thực sự là một cặp tiêu đề - số trang và nếu có, trả lại chúng trong một bộ tu.

    Bước tiếp theo là về việc thiết lập môi trường, chúng tôi nhập các thư viện (bao gồm các chức năng từ khối trên), kiểm tra một số thuộc tính của tài liệu. Và quan trọng nhất, chúng tôi đã thiết lập đối tượng PYPDF2 PDFFILEREADER mà chúng tôi sẽ sử dụng trong suốt dự án:

    pageObj = pdfReader.getPage(0)
    1.

    Bây giờ chúng ta có thể bắt đầu làm việc với tập tin. Có một cái nhìn về PDF, có vẻ như cách hành động tốt nhất là trích xuất các số trang từ bảng nội dung, và sau đó sử dụng chúng để phân chia tệp. Mục lục nằm ở trang 3 và 4 trong PDF, có nghĩa là 2 và 3 trong danh sách pdffileReader của pageObjects. Khi chúng tôi có PDF trong một tệp riêng biệt, chúng tôi có thể sử dụng mã pdfminer.six để trích xuất thông tin văn bản. .

    Đến bây giờ, biến

    print(pageObj.extractText())
    6 trông như thế này:

    pdfFileObj = open('example.pdf', 'rb')
    5

    và như thế. Một vài chuỗi đơn giản thay thế:

    Sẽ chuyển đổi

    print(pageObj.extractText())
    6 thành định dạng đẹp hơn nhiều. Một người cần phải cẩn thận khi thực hiện các điều chỉnh như thế này, ví dụ, nó cũng sẽ loại bỏ bất kỳ ‘. Đó là một tiêu đề có thể có, nhưng may mắn thay, chúng tôi không có tiêu đề như vậy. Bây giờ chúng tôi có một danh sách các dòng trong bảng nội dung:

    pdfFileObj = open('example.pdf', 'rb')
    6

    Chúng tôi muốn thu thập các tiêu đề và số trang vào danh sách. Điều này được thực hiện bằng cách loại bỏ các ký tự không gian, và sau đó kiểm tra xem dòng kết thúc bằng các số. Chúng ta cần phải cẩn thận vì chúng ta muốn giữ các không gian trong các tiêu đề.

    Bây giờ chúng tôi có danh sách của mình, chúng tôi có thể chia tệp thành các tệp PDF nhỏ hơn, lưu chúng trong một thư mục riêng:

    Nếu chúng ta xem xét các tệp PDF riêng lẻ, có ba điều chỉnh bổ sung mà chúng ta muốn thực hiện:

    • Mỗi câu chuyện có năm nó được viết trong ngoặc sau tiêu đề. Đây không phải là một phần của văn bản gốc, và chúng tôi muốn loại trừ chúng. Tuy nhiên, chúng tôi muốn giữ chúng trong một danh sách để chúng tôi có thể sử dụng chúng trong phân tích trong tương lai.
    • Mỗi câu chuyện đều có một liên kết trở lại bảng nội dung, Quay trở lại mục lục của nội dung, nó rõ ràng không phải là một phần của văn bản gốc. Tôi đã kiểm tra và sự kết hợp của các từ này (5 gram, như chúng ta sẽ thấy sau trong dự án NLP) không xuất hiện trong bất kỳ văn bản gốc nào, vì vậy chúng ta có thể xóa nó.
    • Câu chuyện cuối cùng có một Fin Fin ở cuối, và một loạt các khoảng trắng. Vì các ký tự, F-I-N, rất có thể sẽ xuất hiện trong một văn bản tiếng Anh ở đâu đó, cuối cùng tôi chỉ cần cắt phần cuối của chuỗi cuối cùng.

    Mã có thể mất một phút để chạy cho tất cả các câu chuyện.

    Như một liên lạc cuối cùng, chúng tôi lưu các tiêu đề gốc, tên tệp, số trang và năm mà nó được viết trong một tệp CSV.

    Với điều đó, chúng tôi đã hoàn thành, chúng tôi đã làm sạch thành công văn bản và lưu chúng trong các tệp văn bản riêng biệt.

    Sự kết luận

    Tôi đoán câu hỏi chính là: Có đáng để thực hiện dự án theo cách này không? Tôi không thể tìm thấy các tệp văn bản ở đâu đó? Như tôi đã đề cập, tôi đã tìm thấy các nguồn văn bản, nhưng đây dường như là đáng tin cậy nhất. Được rồi, nhưng sẽ nhanh hơn để sao chép văn bản bằng tay? Tôi đã suy nghĩ về điều đó, nhưng tôi không nghĩ như vậy. Hãy suy nghĩ về tất cả các sắc thái chúng tôi áp dụng, thu thập năm nó được viết, xóa văn bản không cốt lõi, v.v.

    Trong mọi trường hợp, tôi đã học được điều gì đó mới, và tôi hy vọng bạn thấy nó hữu ích. Thật thú vị khi thấy có bao nhiêu vấn đề nhỏ mà người ta có thể gặp phải trong khi làm việc trên một dự án tương đối đơn giản như thế này, và tôi có thể chờ đợi để cuối cùng bắt đầu làm việc trên văn bản. Tôi thực sự tò mò về mức độ thường xuyên của Lovecraft thực sự đã sử dụng từ kinh dị "trong các tác phẩm của mình!

    Người giới thiệu

    Làm cách nào để trích xuất văn bản cụ thể từ PDF?

    Cách trích xuất văn bản từ PDF..
    Bước 1: Tải lên PDF. Đăng nhập vào công cụ OCR của chúng tôi và chọn tệp PDF để tải lên. ....
    Bước 2: Thêm quy tắc phân tích cú pháp. Trước khi tách văn bản khỏi PDF, thêm các quy tắc để tự động hóa và tăng tốc quá trình. ....
    Bước 3: Xuất và lưu văn bản của bạn. Nó khá là nhiều..

    Làm thế nào để bạn trích xuất các phần cụ thể của tệp văn bản trong Python?

    Cách trích xuất các phần cụ thể của tệp văn bản bằng Python..
    Hãy chắc chắn rằng bạn đang sử dụng Python 3 ..
    Đọc dữ liệu từ một tệp văn bản ..
    Sử dụng "với mở".
    Đọc các tệp văn bản theo từng dòng ..
    Lưu trữ dữ liệu văn bản trong một biến ..
    Tìm kiếm văn bản cho một chuỗi con ..
    Kết hợp các biểu thức thường xuyên ..
    Để tất cả chúng cùng nhau..

    Tôi có thể trích xuất dữ liệu từ PDF bằng Python không?

    Thư viện Python phổ biến..
    PDFMiner là một công cụ để trích xuất thông tin từ các tài liệu PDF.....
    PYPDF2 là một thư viện PDF Python thuần túy có khả năng chia tách, hợp nhất với nhau, cắt xén và chuyển đổi các trang của các tệp PDF.....
    Tabula-Py là một trình bao bọc Python đơn giản của Tabula-Java, có thể đọc bảng của PDF ..

    Làm cách nào để tìm kiếm một từ trong PDF bằng Python?

    Làm cách nào để tìm kiếm một từ trong PDF bằng Python ?..
    PIP3 Cài đặt PYPDF2 ..
    reader = pypdf2.pdffileereader (tệp).
    trang = reader.getPage (page_number).
    page_content = page.extracttext ().
    print(page_content).
    Nếu search_term trong trang_content:.
    cho page_number trong phạm vi (0, người đọc ..
    trang = reader.getPage (page_number).