Как определить, когда pdf-текст был успешно извлечен с помощью PyPDF2.extractText?

61
4

Я использую библиотеку PyPDF2 для извлечения текста из файлов PDF с помощью функции extractText, и для большинства PDF файлов он отлично работает!

Однако некоторые PDF файлы создают текст, который выглядит так:

\П "# $% &!() "+" -. ")/" 0 $ -1 "2) +3. - "!" $ 45\п" # $% & '() # '+) $! "# -. # $ -/$ 0 1+"! # +12 $\п "#" $% "& #" % $' $()% +, - $ ( %. ($ # "$ (%" & #%/% 0!%\п $ 0 "& $ (% 1 (0, $ 2% 3 (% 0" % 0!% "& $% 1 (34 + 5 "!% 36% 1 (0, $ 7\п %% 8%" # $% & '($)% "!\п% 0% #% + - $ (%" & # "% 0! !% 3 * 9)% 40'0 0-9 $% -)%/% # * 4% 0: & $% 3 * 9)% $ '$% "$ 967\п %%% 0%!"\n1 (0, $% + - $ (7\п %%;! 3% 099+ "(#" $% 6 + 4 #, $ "# 9%" & $ 3 ($,% 36% # (0 "&, $" 052% <% 90 "% -$93 =%" & $% 1 (0, $% 6 # 5 "3 (0 #!>" 03 *%\n36% +, - $ (% - $ "= $$%/% # 4% :? 7% @(0, $% + - $ (% # ($% 0 *%\n6.'78" AB% $ # ! *%, +9 "019) 7С\п%"/D% E $ 0 "& $ (% 1 (0, $% * 3 (% 53,13 0!" $ 7%\п%: D% 9 %%%%%%%/FD%: BG\п% HD%:? %%%%%%%/D,% НВ\п %% FD%: В:\п% 3 (

Согласно документам, этого можно ожидать:

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

К сожалению, extractText() не вызывает никаких исключений, когда выводит текст, подобный приведенному выше.

Итак, мой вопрос в том, есть ли способ программно определить, когда extractText() возвращает тарабарщину?

спросил(а) 2021-01-19T18:38:47+03:00 2 месяца, 3 недели назад
1
Решение
62

На основе комментария @DYZ, вот решение.

document_path - путь к открываемому PDF файлу. Остальное должно быть довольно понятным.

from PyPDF2 import PdfFileReader
from nltk.corpus import words

words = words.words()
document_file = PdfFileReader(open(document_path, 'rb'))
num_pages = document_file.getNumPages()
for page_num in range(0, num_pages):
page = document_file.getPage(page_num)
page_contents = page.extractText()
if set(page_contents.lower().split()).intersection(words):
# process page_contents

ответил(а) 2021-01-19T18:38:47+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема