首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在保持文本结构(标题/字幕/正文)的同时进行PDF文本提取的OCR

如何在保持文本结构(标题/字幕/正文)的同时进行PDF文本提取的OCR
EN

Stack Overflow用户
提问于 2018-07-09 19:36:13
回答 3查看 2.2K关注 0票数 6

我一直在不停地寻找一个工具,它可以在维护结构的同时从PDF中提取文本。也就是说,给出这样的文本:

标题

Subtitle1

Body1

Subtitle2

Body2

标题

Subtitle1。Body1

Subtitle2。Body2

我想要一个工具,可以输出一个标题,字幕和身体的列表。或者,如果有人知道如何做到这一点,那也是有用的:)

如果这三个类别采用相同的格式,这会更容易,但有时字幕可以是粗体、斜体、下划线,或者是3的随机组合。从HTML/PDF/Docx进行简单解析的问题是,这些文本没有标准,因此我们经常会遇到在几个标记中划分的句子(在HTML的情况下),并且很难解析。正如您所看到的,字幕并不总是在给定段落的上方,或者有时是在要点中。很多可能的格式组合..。

到目前为止,我在使用Tesseract的这里和使用OpenCV的这里中都遇到过类似的查询,但它们都没有完全回答我的问题。

我知道有一些机器学习工具可以从科学论文中提取“目录”部分,但这也不能割断它。是否有人知道包/库,或者是否已经实现了这种功能?或者有人知道解决这个问题的方法,最好是用Python?

谢谢!

编辑:

我所指的文档是来自公司的10-Ks,比如这个10,并且说,我想像上面提到的那样,以一种编程和结构化的方式提取项目7。但并不是所有这些代码都是标准化的,可以进行HTML解析。( PDF文档就是保存为PDF格式的HTML )

EN

回答 3

Stack Overflow用户

发布于 2019-10-30 11:23:35

有一些工具可以在一定程度上完成所请求的功能。说“一定程度”,我的意思是,标题和标题的字体属性将保留后,OCR转换。

看看Adobe的Document平台。该系统仍处于发射阶段,并将于2020年初发射。但是,开发人员可以通过注册早期访问程序来实现早期访问。所有信息都可以在以下链接中获得:

https://www.adobe.com/devnet-docs/dcsdk/servicessdk/index.html

我亲自尝试过这项服务,结果似乎很有希望。所有标题和标题的情况都会在输入文档中得到认可。提供此功能的微型服务是"ExportPDF“服务,它将扫描的PDF文档转换为Microsoft文档。

示例代码可在:https://www.adobe.com/devnet-docs/dcsdk/servicessdk/howtos.html#export-a-pdf上获得

票数 1
EN

Stack Overflow用户

发布于 2021-07-21 17:43:57

这里有很多代码要做,但是让我描述一下我在Python中会做些什么。这是基于在字体大小和样式方面存在一些结构:

  1. 使用Tesseract OCR软件(开放源码,免费),在Pytesseract中使用OEM 1,PSM 11
  2. 将PDF预处理到图像并应用其他相关的预处理
  3. 以数据形式获取输出,并通过word_num将单个单词组合成一行单词
  4. 计算每一行文本的厚度(使用图像和tesseract输出)
    • 将图像转换为灰度,并将图像颜色倒置
    • 在图像上选定的文本区域上执行张孙细化操作(opencv贡献:cv2.ximgproc.thinning)
    • 在稀疏图像中有白色像素的和,即值等于255的地方(白色像素是字母)
    • 倒置图像中有白色像素的和
    • 最后计算厚度(sum_inverted_pixels - sum_skeleton_pixels) / sum_skeleton_pixels (有时会出现零除数误差,检查骨架之和为0,然后返回0)
    • 用最小值和最大值将厚度正规化

  5. 通过应用文本行粗体(例如0.6或0.7 )的阈值来获取标头
  6. 要区分不同的标题和字幕,您必须依赖枚举标题和字幕或标题和字幕的大小。
    • 通过将以像素为单位的高度转换为以点为单位的高度来计算每个单词的字体大小
    • 中位字体大小成为每一行文本的本地字体大小。

  7. 最后,您可以对标题、字幕进行分类,两者之间的任何内容都可以是文本。

请注意,有一些方法可以检测表、页脚等,我不会深入研究这些方法。找像下面这样的研究论文。

相关研究论文:

票数 1
EN

Stack Overflow用户

发布于 2021-07-19 02:45:20

我做了一些关于这个话题的研究和实验,所以让我试着给出一些我从工作中得到的提示,这还远远不够完美。

我没有找到任何可靠的库来做这件事,尽管我有足够的时间和可能的能力(我在阅读别人的代码方面仍然相对缺乏经验),我很想检查一下其中的一些工作,特别是一个(帕斯尔)。

通过将过滤器应用于Tesseract's hOCR输出,我在标题/标题识别方面确实取得了一些不错的结果。它需要大量的工作,即

  1. OCR pdf
  2. 正确解析生成的hOCR,以便您可以访问其段落、行和单词。
  3. 扫描每一行的高度,分割它们的边框
  4. 扫描每个单词的宽度和高度,再次分割边框,并跟踪它们
  5. 需要高度来拦截假阳性,因为线高有时会膨胀。
  6. 找出最常见的行高,这样您就有了一般基本字体的基线。
  7. 首先,确定那些高度高于6号中的基线的线。
  8. 消除错误,检查行的单词是否有与行的最大高度相匹配的错误,否则使用每一行的最大单词高度与#6基线进行比较。
  9. 现在,您有几个候选行,您想要检查a。候选行不属于其他行不尊重相同高度的段落,除非它是第一行(有时Tesseract将标题与段落连接起来)。这一行不以“”结尾。或",“或其他可能排除标题/标题的标记

这个列表要长得多。例如,您可能还需要应用其他一些标准,比如比较相同的单词宽度:如果在一行中您发现超过一定数量的单词(我使用>= 50%)大于平均值(与文档中其他地方的相同单词相比),那么您几乎肯定有一个很好的候选标题或标题。(标题和标题通常也会出现在文档中,通常是多次出现)

另一个标准是检查所有大写行,增强可以是单行(属于只有一行的段落的行)。

对不起,我不能发布任何代码(*),但希望你得到了要点。

这并不是一个简单的壮举,如果您不使用ML,则需要大量的工作。也不确定有多少ML能使它更快,因为有大量的PDF存在,而且可能是大人物(Adobe、Google、Abbyy等)训练了他们的模型很长一段时间。

(*)我的代码是用JS编写的,它在一个大型的转换应用程序中被严重地交织在一起,到目前为止,我还不能发布开源。我相当肯定您可以在Python中完成这项工作,尽管JS操作在那里可能有一定的优势。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51252872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档