gpt4 book ai didi

python - 从 PDF 文件中突出显示的注释中提取文本

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:42 25 4
gpt4 key购买 nike

从昨天开始,我尝试使用 python-poppler-qt4 从一个 pdf 中的一些突出显示的注释中提取文本。

根据 this documentation ,看起来我必须使用 Page.text() 方法获取文本,从突出显示的注释传递一个 Rectangle 参数,我使用 Annotation.boundary() 获取它。但我只得到空白文本。有人能帮我吗?我在下面复制了我的代码并添加了我正在使用的 PDF 的链接。感谢您的帮助!

import popplerqt4
import sys
import PyQt4


def main():

doc = popplerqt4.Poppler.Document.load(sys.argv[1])
total_annotations = 0
for i in range(doc.numPages()):
page = doc.page(i)
annotations = page.annotations()
if len(annotations) > 0:
for annotation in annotations:
if isinstance(annotation, popplerqt4.Poppler.Annotation):
total_annotations += 1
if(isinstance(annotation, popplerqt4.Poppler.HighlightAnnotation)):
print str(page.text(annotation.boundary()))
if total_annotations > 0:
print str(total_annotations) + " annotation(s) found"
else:
print "no annotations found"

if __name__ == "__main__":
main()

测试pdf: https://www.dropbox.com/s/10plnj67k9xd1ot/test.pdf

最佳答案

查看the documentation for Annotations似乎边界属性以标准化坐标返回此注释的边界矩形。虽然这看起来是一个奇怪的决定,但我们可以简单地按 page.pageSize().width() 缩放坐标。和 .height()值(value)观。

import popplerqt4
import sys
import PyQt4


def main():

doc = popplerqt4.Poppler.Document.load(sys.argv[1])
total_annotations = 0
for i in range(doc.numPages()):
#print("========= PAGE {} =========".format(i+1))
page = doc.page(i)
annotations = page.annotations()
(pwidth, pheight) = (page.pageSize().width(), page.pageSize().height())
if len(annotations) > 0:
for annotation in annotations:
if isinstance(annotation, popplerqt4.Poppler.Annotation):
total_annotations += 1
if(isinstance(annotation, popplerqt4.Poppler.HighlightAnnotation)):
quads = annotation.highlightQuads()
txt = ""
for quad in quads:
rect = (quad.points[0].x() * pwidth,
quad.points[0].y() * pheight,
quad.points[2].x() * pwidth,
quad.points[2].y() * pheight)
bdy = PyQt4.QtCore.QRectF()
bdy.setCoords(*rect)
txt = txt + unicode(page.text(bdy)) + ' '

#print("========= ANNOTATION =========")
print(unicode(txt))

if total_annotations > 0:
print str(total_annotations) + " annotation(s) found"
else:
print "no annotations found"

if __name__ == "__main__":
main()

此外,我决定连接 .highlightQuads()更好地表示实际突出显示的内容。

请注意显式 <space>我已附加到文本的每个四边形区域。

在示例文档中返回 QString无法直接传递给 print()str() , 解决方案是使用 unicode()相反。

我希望这能像帮助我一样帮助别人。

注意:页面旋转可能会影响缩放值,我无法对此进行测试。

关于python - 从 PDF 文件中突出显示的注释中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050551/

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