Почему Python вытягивает символы вместо текста из PDF - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь перебрать набор PDF-файлов (все они OCR) в наборе папок и выполнить поиск ключевых терминов в PDF-файле. Если PDF-файл содержит определенный термин, сохраните имя папки, имя файла, и т. д. Этот код работает в определенной степени. Кроме того, он пропускает несколько PDF-файлов в рамках условий поиска. Причина в том, что, когда я читаю в нескольких PDF-файлах, на нескольких страницах отображается какой-то бред (по крайней мере мне). Например, скажем, я прочитал в PDF-файл с именем «the_one.pdf». Имеет 278 страниц. Когда я захожу в Adobe Acrobat для поиска в этом документе, я могу найти «Термин поиска 1» на странице 171, но когда он читается с помощью Python, Python выводит что-то вроде этого:

 -ˆ˜
 %
 ˜%˝ˆ
 ,˙
 ˚
 %.
 %,˛#
 %˜˚
 0"
 ˚˝
 %
 ˚˝ˆ˙)˛˚˜
 ˚0˛˚
 :&;
 #˛˘˘˙
 ˚%˚
 "
 %˚˛˘
 ˆ
 ˛˚,˚
 "
 $%˚˚%
 %
 ˝%.
 "˛
 "
 %˜
 ˝,
 -ˆ
 %˘˙
 ˛˘˚
 0"
 "
 ˛

 .˛˝
 %˜˚
 ˝˜
 .%
 !˝ˆ%
 4
 0"
 "
 %˜˚
 ˛
 %˛˘˘˙
 !˝ˆ˜
 %
 ˛ ˚˝ˆ˙)˛˚˜
 ˚0˛
 !˝ˆ%
 .˛˝˘˙8
 ˛˜
 %
 0"
 "
 ˚
 ˛ #%˛%
 "˛
 ˚ˆ˘˚

 ˛ ˛˚˛˝%
 0"%ˆ
 ˛˙
 !˝ˆ˛˘
 %˜
 %
 %"
 ˚ˆ˝%
 #
7
 ˘˛˘˙
 :&;
 ˛˘˚%
 ˛˚,˚
 "
 $%˚˚%
 %
 ˝%.
 %
 %˜
 ˝,
 6
 ;˚
 %˜
 ˛%
 "
 $%˚˚%
 ˚"%ˆ˘˜
 ˘˝˘˙
 %
 "˛
 .˝˚
 %
 ˚˛˜)˛˘%
 /ˇ˚
 ˘˝˘˙
 ˝˘ˆ˜
 ˚˛˜)˛˘%
 /ˇ˚
 "˛
 ˛
 #˚˜
 ˛˚
 9$
 ˜˛˚
 ˜˛˘˚
 :
 "˚
 ˘
 .˝˚
 %
 ˚˛˜)˛˘%
 /ˇ˚
 ˛
 ˜˜
 %
 ˛˘˙
 %
 9$
 ˜˛˚
 ˜˛˘˚
 "˛
 ˛
 ˜ˆ˛˘˘˙
 #˚˜
 ˛˚
 /ˇ˚
 4˛˜
 ˚ˆ˝"
 ˚
 ˛
 ˛˘˚%
 ˛%˜
 %
 ˆ˚
 ˛˘
 %˜˘˚8
 7
 9"˚
 #%˛%˚
 %.
 ˛,
 ˘˛˝
 %
 "
 ˘"%
 ˆ
 ˝˛
 ˛˘˚%
 ˛,
 ˆ˚
 %.
 ˘˝%˝
 ˚˙˚˚
 %

 ˚˝ˆ˙)˛˚˜
 ˚0˛
 !˝ˆ%
 .˛˝˘˚
 &%
 !˛˘
 ˛ ˛,
 ˛˝˛
 ˛˙
 ˚
 %
 %
 %
 %
 /ˇ˚
 ˛ -ˆ˚
 .%
 -ˆ%˛%
 4<
˝6
=8
 .%
 ˛ ˚˝.˝
 ˚˝ˆ˙)˛˚˜
 ˚0˛
 ˛˜
 ˝
 ˛˝,  

Конечно, он отображает большинство страниц правильно, но по некоторым причинам он не отображает пару из них. Из соображений конфиденциальности я не могу публиковать PDF-файлы. У кого-нибудь есть идеи, почему это происходит?

Кроме того, все, что вы можете указать, чтобы ускорить мой код или сделать его более динамичным, также полезно. Всегда ищу учиться.

Лучший, J.Dykstra

import PyPDF2 
from os import walk
import os
import re
import csv

pdf_location = r'PDF Directory' 
x = ['Search term 1', 'Search term 2', 'Search term 3', 'etc..']

key_terms = []
rule = []
filenamey = []

for dirpath, dirnames, filenames in walk(pdf_location):
    for filename in filenames:
        if filename.endswith('.pdf'):
            pdfFileObj = open(os.path.join(dirpath,filename), 'rb')
            pdfReader = PyPDF2.PdfFileReader(pdfFileObj, strict = False)
            num_pages = pdfReader.numPages
            count = 0
            text = ""

            while count < num_pages:
                pageObj = pdfReader.getPage(count)
                count +=1
                text += pageObj.extractText()


            for i in x:
                if re.search(i,text, re.IGNORECASE):
                    rulex = dirpath.split("Rule")[1]
                    filenamex = filename
                    key_termx = x[0]

                    key_terms.append(key_termx)
                    rule.append(rulex)

1 Ответ

0 голосов
/ 16 мая 2018

Разбор PDF - сложная задача, спецификация 1.7 имеет около 750 страниц, и Adobe зарабатывает на этом деньги - вот почему он работает на них.

В PDF-файлах есть таблицы, содержащие

  • "как выглядят буквы" (глифы)
  • «на какие буквы в юникоде эти глифы отображаются» (вам нужно это, чтобы правильно скопировать и вставить что-то из pdf)

и перекрестная ссылка, какой глиф сопоставляется с каким юникодом. Шрифты могут быть (частично) также встроены в PDF.

Это (одна из причин), почему pdfs могут выглядеть на 100% нормально, может быть "OCR" или ed нормально, но если вы просто копируете и вставляете документ, который имеет искаженное отображение между глифами и точками Юникода, вы получите только бред.

Я слышал, что некоторые программы даже предоставляют сопоставления юникода для всех глифов, но они совсем не совпадают ... специально (или с плохим качеством) - для предотвращения копирования и вставки.

Итог: вы можете попытаться повторно распознать некоторые страницы, вы можете использовать Adobe Acrobat PRO для извлечения текста из PDF (он имеет встроенные функции ocr), который дает вам бред или просто пропускает его.

Вы можете попробовать другие фреймворки для чтения PDF, возможно, они получили что-то не совсем правильное - но шансы невелики, если это почти всегда работает, но только не для нескольких специальных PDF-файлов.

Я просто новичок в pdf - есть несколько более продвинутых ppl, чтобы обсудить это - но если вы не можете поделиться pdf, будет сложно что-либо посоветовать.


Альтернативные подходы: Поиск текста в PDF с использованием Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...