如何使用 pymupdf 从较大的 pdf 中的选定页面中提取文本?
how to extract text from a selection of pages in a larger pdf using pymupdf?
我知道有很多库可以从 PDF 中提取文本。具体来说,我在使用 pymupdf 时遇到了一些困难。
来自此处的文档:https://pymupdf.readthedocs.io/en/latest/app4.html#sequencetypes
我希望使用 select()
来选择一个页面间隔,然后使用 getText()
这是我正在使用的文档 linear_regression.pdf
import fitz
s = [1, 2]
doc = fitz.open('linear_regression.pdf')
selection = doc.select(s)
text = selection.getText(s)
但是我得到这个错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-23-c05917f260e7> in <module>()
6 # print(selection)
7 # text = doc.get_page_text(3, "text")
----> 8 text = selection.getText(s)
9 text
AttributeError: 'NoneType' object has no attribute 'getText'
所以我假设 select()
没有被正确使用
非常感谢
select
在这里,根据 the documentation,在内部修改 doc
而不会 return 任何东西。在 Python 中,如果一个函数没有明确地 return 任何东西,它将 return None
,这就是你看到那个错误的原因。
但是,Document
提供了一个名为 get_page_text
的 method,它允许您从特定页面(0 索引)获取文本。因此,对于您的示例,您可以这样写:
import fitz
s = [1, 2] # pages 2 and 3
doc = fitz.open('linear_regression.pdf')
text_by_page = [doc.get_page_text(i) for i in s]
现在,您有了一个列表,列表中的每一项都是来自不同所需页面的文本。将其转换为字符串的简单方法是:
text = ' '.join(text_by_page)
在第一页的最后一个词和最后一页的第一个词之间用 space 连接两个页面(好像根本没有分页符)。
我知道有很多库可以从 PDF 中提取文本。具体来说,我在使用 pymupdf 时遇到了一些困难。
来自此处的文档:https://pymupdf.readthedocs.io/en/latest/app4.html#sequencetypes
我希望使用 select()
来选择一个页面间隔,然后使用 getText()
这是我正在使用的文档 linear_regression.pdf
import fitz
s = [1, 2]
doc = fitz.open('linear_regression.pdf')
selection = doc.select(s)
text = selection.getText(s)
但是我得到这个错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-23-c05917f260e7> in <module>()
6 # print(selection)
7 # text = doc.get_page_text(3, "text")
----> 8 text = selection.getText(s)
9 text
AttributeError: 'NoneType' object has no attribute 'getText'
所以我假设 select()
没有被正确使用
非常感谢
select
在这里,根据 the documentation,在内部修改 doc
而不会 return 任何东西。在 Python 中,如果一个函数没有明确地 return 任何东西,它将 return None
,这就是你看到那个错误的原因。
但是,Document
提供了一个名为 get_page_text
的 method,它允许您从特定页面(0 索引)获取文本。因此,对于您的示例,您可以这样写:
import fitz
s = [1, 2] # pages 2 and 3
doc = fitz.open('linear_regression.pdf')
text_by_page = [doc.get_page_text(i) for i in s]
现在,您有了一个列表,列表中的每一项都是来自不同所需页面的文本。将其转换为字符串的简单方法是:
text = ' '.join(text_by_page)
在第一页的最后一个词和最后一页的第一个词之间用 space 连接两个页面(好像根本没有分页符)。