如何从特定的pdf页面而不是整个文档中访问文本

2024-04-26 07:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一些pdf文档中提取一些东西。虽然我在pdfminer和pymupdf上投入最多,但我一直在使用各种工具。我从pdfminer开始,但在无法解决一个特定问题(即当我的pdf文档有许多页面时,我想选择是否处理每个特定页面)之后,开始测试pymupdf。但是,我在这两个库中遇到的问题是,当我尝试从一个或另一个特定页面检索文本时,返回的文本是文档中的所有文本。你知道吗

这里有一个到document的链接,有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时遇到了类似的问题。我可以检索所有的文本,但不只是从一个特定的指定页面的文本。你知道吗


Tags: 代码in文档文本内容fordocpdf
2条回答

请尝试以下方法从该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)

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

文档:PyPDF2 docs

相关问题 更多 >