gpt4 book ai didi

python - 如何使用 Python 中的坐标从 PDF 中提取文本片段?

转载 作者:行者123 更新时间:2023-12-04 09:17:07 27 4
gpt4 key购买 nike

给定一个数字创建的 PDF 文件,我想提取带有坐标的文本。边界框会很棒,但 anchor +字体/字体大小也可以。
我创建了一个 example PDF document以便轻松尝试/分享结果。
我试过的
pdf转文本

pdftotext PDF-export-example.pdf -layout
this output .它已经包含文本,但坐标不在那里。
PyPDF2
PyPDF2 更糟——也没有坐标,也没有字体大小,在这种情况下甚至没有 ASCII 艺术线索布局是如何的:
from PyPDF2 import PdfFileReader


def text_extractor(path):
with open(path, "rb") as f:
pdf = PdfFileReader(f)
page = pdf.getPage(0)
text = page.extractText()
print(text)


if __name__ == "__main__":
path = "PDF-export-example.pdf"
text_extractor(path)
pdfminer.6
另一种提取文本的方法,但没有坐标/字体大小。
谢谢 Duck puncher对于这个:
from io import StringIO

from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage


def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = "utf-8"
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(path, "rb")
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()

for page in PDFPage.get_pages(
fp,
pagenos,
maxpages=maxpages,
password=password,
caching=caching,
check_extractable=True,
):
interpreter.process_page(page)

text = retstr.getvalue()

fp.close()
device.close()
retstr.close()
return text


if __name__ == "__main__":
print(convert_pdf_to_txt("PDF-export-example.pdf"))
这个在正确的方向上走得更远,因为它可以给出字体名称和大小。但是坐标仍然丢失(并且输出有点冗长,因为它是逐个字符的):
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar

for page_layout in extract_pages("PDF-export-example.pdf"):
for element in page_layout:
if isinstance(element, LTTextContainer):
for text_line in element:
for character in text_line:
if isinstance(character, LTChar):
print(character)
print(character.fontname)
print(character.size)
表格
在这里我什么也没有得到:
from tabula import read_pdf

df = read_pdf("PDF-export-example.pdf")
print(df)

最佳答案

我用过 PyMuPDF将页面内容提取为带有 bbox 信息的单个单词列表。

import fitz

doc = fitz.open("PDF-export-example.pdf")

for page in doc:
wlist = page.getTextWords() # make the word list
print(wlist)
输出 :
[
(72.0250015258789, 72.119873046875, 114.96617889404297, 106.299560546875, 'Test', 0, 0, 0),
(120.26901245117188, 72.119873046875, 231.72618103027344, 106.299560546875, 'document', 0, 0, 1),
(72.0250015258789, 106.21942138671875, 101.52294921875, 120.18524169921875, 'Lorem', 1, 0, 0),
(103.98699951171875, 106.21942138671875, 132.00445556640625, 120.18524169921875, 'ipsum', 1, 0, 1),
(134.45799255371094, 106.21942138671875, 159.06637573242188, 120.18524169921875, 'dolor', 1, 0, 2),
(161.40098571777344, 106.21942138671875, 171.95208740234375, 120.18524169921875, 'sit', 1, 0, 3),
...
]
page.getTextWords()
  • 方法使用空格和行将页面的文本分成“单词”
    中断作为分隔符。因此,此列表中的单词不包含
    空格或换行符。
  • 返回类型:list

  • 此列表中的一项如下所示:
    (x0, y0, x1, y1, "word", block_no, line_no, word_no)
    其中前 4 项是单词 bbox 的浮点坐标.最后三个整数提供了有关单词下落的更多信息。

    关于名称 fitz 的说明
    PyMuPDF 库的标准 Python 导入语句是 import fitz .这是有历史原因的:
    MuPDF 的原始渲染库称为 Libart。
    在 Artifex Software 收购 MuPDF 项目后,开发重点转移到编写名为 Fitz 的新现代图形库上。 Fitz 最初打算作为一个研发项目来取代老化的 Ghostscript 图形库,但已成为支持 MuPDF 的渲染引擎。

    关于python - 如何使用 Python 中的坐标从 PDF 中提取文本片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63170120/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com