0

我正在尝试从一些 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 时遇到了类似的问题。我可以检索所有文本,而不仅仅是来自特定指定页面的文本。

4

2 回答 2

1

尝试以下操作以从该 pdf 的任何特定页面获取文本。

import fitz

path = r''

doc = fitz.open(path)
page = doc.loadPage(1) #put here the page number
page_to_text = page.getText("text")
print(page_to_text)
于 2019-08-16T10:31:29.397 回答
0

您可能要考虑PyPDF2,它的PdfFileReader类有一个getPage方法

文档:PyPDF2 文档

于 2019-06-19T23:14:18.870 回答