У меня есть функция для чтения PDF, как показано ниже:

#PDF files
def Readingpdf(pdfname):
    pdfRead=PyPDF2.PdfFileReader(pdfname)
    comp = ""
    for i in range(pdfRead.getNumPages()):
        comp += pdfRead.getPage(i).extractText()
    return comp

Он отлично работает с обычным файлом PDF (например, с книгами). Я могу легко извлекать тексты, но когда я попробовал его на работе над «протоколом встречи», у меня были только пустые строки, как показано ниже:

' \n\n\n\n\n \n\n\n \n\n \n\n \n\n\n\n \n \n\n \n\n \n\n \n \n \n \n \n \n\n\n\n\n \n \n\n\n\n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n\n \n\n \n\n \n\n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n \n\n \n \n\n \n \n\n\n \n \n\n \n \n\n \n \n \n \n \n\n\n\n\n\n\n\n\n \n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n \n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n \n \n\n \n\n \n \n\n \n \n \n \n\n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n\n \n\n\n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n \n \n\n \n\n \n \n\n \n \n \n \n\n \n\n \n\n \n\n \n \n \n \n \n \n \n \n \n\n\n \n\n\n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n\n \n\n \n \n\n \n \n\n\n\n \n \n\n \n\n \n \n\n \n\n\n\n\n\n\n\n \n \n\n \n \n\n\n \n \n\n \n\n \n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \n\n\n\n\n\n\n \n\n\n2\n \n\n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n\n\n \n\n\n\n \n \n\n\n\n\n \n \n \n \n \n \n \n \n-\n \n\n\n\n\n \n \n\n \n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n \n \n\n \n \n\n\n\n \n \n\n \n\n \n \n\n \n\n\n\n\n\n\n\n \n \n\n \n \n\n\n\n \n \n\n \n\n \n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n \n \n\n\n\n\n\n\n\n \n \n\n \n\n \n\n\n \n\n \n \n \n \n \n \n \n \n \n\n\n \n\n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n\n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n-\n \n\n\n\n\n\n \n \n\n \n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n \n \n\n \n \n \n \n \n \n\n \n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n \n \n\n \n \n\n\n\n \n \n\n \n\n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n\n\n\n \n \n\n \n\n \n \n \n \n \n \n \n \n\n \n\n\n \n\n \n\n\n \n \n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n \n \n\n \n \n\n \n \n \n \n\n\n\n \n \n \n \n\n \n\n \n \n\n \n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n \n \n\n \n \n\n\n \n \n\n\n \n \n \n \n\n\n\n\n\n\n \n\n\n3\n \n\n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n-\n \n\n\n\n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n\n \n\n\n \n \n\n \n \n \n \n \n \n\n \n\n \n\n\n \n\n\n \n \n\n \n \n \n \n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n\n \n \n\n \n \n\n \n \n\n \n\n\n \n \n\n \n\n\n\n\n\n\n\n\n \n \n\n \n \n\n\n \n \n\n\n \n \n\n \n\n\n\n\n\n\n \n \n\n \n \n\n\n\n\n \n \n\n \n\n\n\n \n\n \n\n \n \n \n \n \n \n \n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n-\n \n\n\n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n \n \n\n \n \n\n\n \n \n\n \n\n \n-\n \n\n\n\n \n \n\n \n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n\n \n \n \n \n \n-\n \n\n \n \n\n \n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n\n \n \n \n \n \n \n\n \n\n\n\n\n\n\n\n\n

Очень жаль, что я не могу поделиться исходным PDF-файлом, однако вот изображение ниже, чтобы объяснить его структуру: введите описание изображения здесь

Я не получаю никаких ошибок, это просто пустые строки - это потому, что файлы имеют формат таблицы? Или мне что-то не хватает в этой простой функции?

Это часть проекта НЛП, где мне нужно загрузить 100 таких файлов и попытаться увидеть в них закономерность. Любая помощь действительно приветствуется.

0
Sam.H 17 Фев 2021 в 12:18

1 ответ

Лучший ответ

Есть много способов извлечь текст PDF. Пожалуйста, попробуйте следующее:

  1. PDFMINER

Использование pdfminer для извлечения pdf. Вы можете сослаться на пример кода.

import io

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

def convert_pdf_to_txt(path):
    '''Convert pdf content from a file path to text

    :path the file path
    '''
    rsrcmgr = PDFResourceManager()
    codec = 'utf-8'
    laparams = LAParams()

    with io.StringIO() as retstr:
        with TextConverter(rsrcmgr, retstr, codec=codec,
                           laparams=laparams) as device:
            with open(path, 'rb') as fp:
                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)

                return retstr.getvalue()

if __name__ == "__main__":
    print(convert_pdf_to_txt('test.pdf'))
  1. PYMUPDF

Использование pymupdf для извлечения pdf. Вы можете сослаться на пример кода.

import fitz        
doc = fitz.open("file.pdf")        
for page in doc:
    text = page.getText()
    print(text)
  1. OCR Чтобы извлечь текст из PDF, вам нужно использовать OCR, на мой взгляд, лучший OCR - это Tesseract OCR, разработанный Google, вы можете просто установить pytesseract и использовать его, как вы используете в своем PDF-файле, но я настоятельно рекомендую использовать openCV для использования OCR просто по тексту

https://towardsdatascience.com/extracting-text-from-scanned-pdf-using-pytesseract-open-cv-cd670ee38052

  1. SLATE

Использование lib slate (pip install slate3k)

import slate3k as slate

with open(file.pdf, 'rb') as f:
   extracted_text = slate.PDF(f)
   print(extracted_text)

Удачи!!!

1
Thuấn Đào Minh 17 Фев 2021 в 09:33