Я пытаюсь извлечь некоторые вещи из некоторых документов PDF. Я возился с различными инструментами, хотя больше всего вложил в pdfminer и pymupdf. Я начал с pdfminer, но начал тестировать pymupdf после того, как не смог решить одну конкретную проблему - то есть, когда в моем документе pdf есть несколько страниц, я хочу выбрать, обрабатывать ли каждую конкретную страницу или нет. Однако проблема, с которой я сталкиваюсь в обеих библиотеках, заключается в том, что когда я пытаюсь получить текст с одной конкретной страницы (или другой), возвращаемый текст - это весь текст из документа.
Вот ссылка на документ , содержащий 57 страниц.
Я сосредоточусь здесь на случае использования pymupdf
Вот код
import fitz
doc = fitz.open('local_path_to_file_from_link_above')
for page in doc:
text = page.getText().encode("utf8")
break
Я перебиваю здесь, чтобы подтвердить, что я вытащил текст с одной и только одной страницы - но когда я проверяю текст, я обнаруживаю, что в нем содержится почти весь текст всего документа (все 57 страниц)
Так что мне было любопытно, что, несмотря на появление границ страниц в файле PDF - возможно, их не существует, поэтому я использовал атрибут / свойство / метод pageCount, чтобы определить, присутствуют ли страницы - они кажутся
>>> doc.pageCount
57
Немного сложно описать вывод, когда я зацикливаюсь на всех страницах, каждая страница не содержит точно все содержимое всех страниц, но содержит почти все содержимое. Я определил это с помощью следующего кода
mydict = dict()
for n, page in doc:
print n, len(p.getText())
mydict[n] = p.getText()
Вот вывод - для полноты
0 45491
1 45491
2 45491
3 45491
4 45491
5 45491
6 45491
7 45491
8 45491
9 45492
10 45492
11 45492
12 45492
13 45492
14 45492
15 45492
16 45492
17 45492
18 45492
19 45492
20 45492
21 45492
22 45492
23 45492
24 45492
25 45492
26 45492
27 45492
28 45492
29 88408
30 42990
31 42990
32 42990
33 42990
34 42990
35 42990
36 42990
37 42990
38 42990
39 42990
40 42990
41 42990
42 42990
43 42990
44 42990
45 42990
46 42990
47 42990
48 42990
49 42990
50 42990
51 42990
52 42990
53 42990
54 42990
55 42990
56 42990
Таким образом, существует аберрация в отношении содержания страницы 29, и есть различия в длине текста, извлекаемого со страниц, но возни с этим, кажется, существенное совпадение, например
>>> mydict[0][0:5000] == mydict[1][0:5000]
True
но
>>> mydict[0][-5000:] == mydict[1][-5000:]
False
Подводя итог, библиотека, похоже, понимает существующие границы страницы, но текст, извлекаемый для отдельной страницы, - это почти весь текст в документе. Поскольку генерируется хороший ToC - я хочу использовать это и номера страниц, предоставленные этим ToC, чтобы идентифицировать конкретные страницы, которые я хочу для дальнейшего анализа и извлечения данных.
Я увижу, что столкнулся с похожими проблемами, пытаясь использовать pdfminer. Я мог бы извлечь весь текст, но не только текст с определенной указанной страницы.