python - 使用PyMuPDF逐页逐行从pdf中提取文本
问题描述
我必须从现有的 PDF 文档中提取文本。目前我为此使用 PyMuPDF 模块。总体而言,它运行良好且速度非常快。\t
问题是,这个工具用新的换行符替换了 pdf 文档中的所有水平制表符(例如,在标题:5主题中)。由于我必须逐行提取文本,这对我来说非常不切实际。
有谁知道,如何解决这个问题或知道另一种方法来提取每页和逐行的文本页面?我还尝试了 tika(这里我无法按页提取文本)和 PyPDF2(这太可怕了:对于任何格式化的文本(如以粗体书写),它都会在提取的文本中添加一个新的换行符。
for document in pdfPath:
string_dic[document] = StringIO()
pdf_file = fitz.open(document)
number_of_pages = pdf_file.pageCount
for page_number in range(number_of_pages):
page = pdf_file.loadPage(page_number)
page_content = page.getText("text")
string_dic[document].write(page_content)
string_dic[document].write(chr(12))
string_dic[document].seek(0)
当我转换具有以下内容的 PDF 文档时: 选项卡后的
5 个文本
提取后我得到以下结果:选项卡后的
5 个
文本\t
解决方案
根据文档,
page.getText('text',flags=2)
应该管用。但是,当我尝试时,它仍然有 \n 而不是 \t
另一种选择是您必须将文本作为字典并查看它以构建文本。这是一种迂回的方式,但是由于您获得了每个跨度的 x0 和 x1 位置,因此您可以从技术上计算中间的空格并使用它们
page.getText('dict')
输出
{'width': 612.0,
'height': 792.0,
'blocks': [{'type': 0,
'bbox': (72.28006744384766,
72.37419891357422,
156.7176055908203,
87.02263641357422),
'lines': [{'wmode': 0,
'dir': (1.0, 0.0),
'bbox': (72.28006744384766,
72.37419891357422,
78.36209869384766,
87.02263641357422),
'spans': [{'size': 12.0,
'flags': 4,
'font': 'Calibri',
'color': 0,
'text': '5',
'bbox': (72.28006744384766,
72.37419891357422,
78.36209869384766,
87.02263641357422)}]},
{'wmode': 0,
'dir': (1.0, 0.0),
'bbox': (108.28006744384766,
72.37419891357422,
156.7176055908203,
87.02263641357422),
'spans': [{'size': 12.0,
'flags': 4,
'font': 'Calibri',
'color': 0,
'text': 'SomeText',
'bbox': (108.28006744384766,
72.37419891357422,
156.7176055908203,
87.02263641357422)}]}]}]}
推荐阅读
- javascript - 有没有办法使用 cypress/JS 以编程方式通过 Keycloak 登录应用程序?
- javascript - 使脚本仅适用于特定的屏幕尺寸
- python - 有没有办法将列表返回为句子格式python
- javascript - 当我在字段集中取消隐藏和重新隐藏图例标签时出现问题
- php - MySQL 和 PHP - 在一列中按多个条件进行过滤
- python - 代码:Python,错误类型:“int”对象不可下标
- c# - 将此作为继承类型返回
- html - HTML CSS 导航栏问题
- wordpress - 错误显示在 DB 中未找到锁定条目
- visual-studio - 卸载后Wix强制重启