python 和 pyPdf - 如何从页面中提取文本,以便行与行之间有空格

2024-01-01

目前,如果我使用 pyPdf 和 extractText() 创建 pdf 页面的页面对象,会发生的情况是行连接在一起。例如,如果页面的第 1 行显示“hello”,第 2 行显示“world”,则从 extractText() 返回的结果文本是“helloworld”而不是“hello world”。有谁知道如何解决这个问题,或者有解决方法的建议?我真的需要文本在行之间有空格,因为我正在对此 pdf 文本进行文本挖掘,并且行之间没有空格会杀死它......


这是 pdf 解析的常见问题。在某些情况下,您还可能需要修复尾随破折号。我为我的一个项目想出了一种解决方法,我将很快在这里描述:

I used pdfminer http://www.unixuser.org/~euske/python/pdfminer/index.html从 PDF 中提取 XML,并在 XML 中找到串联的单词。我提取了与 HTML 相同的 PDF,并且 HTML 可以通过以下正则表达式行进行描述:

<span style="position:absolute; writing-mode:lr-tb; left:[0-9]+px; top:([0-9]+)px; font-size:[0-9]+px;">([^<]*)</span>

跨度是绝对定位的,并且具有顶部样式,您可以使用它来确定是否发生换行。如果发生换行并且最后一行的最后一个单词没有尾随破折号,您可以将最后一行的最后一个单词和当前行的第一个单词分开。虽然细节可能很棘手,但您也许能够修复几乎所有文本解析错误。

此外,您可能想运行一个字典库,例如enchant http://www.rfk.id.au/software/pyenchant/在您的文本中查找错误,如果词典建议的修复类似于错误词,但在某处有空格,则错误词可能是解析错误,可以使用词典建议进行修复。

解析 PDF 很糟糕,如果您找到更好的来源,请使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 和 pyPdf - 如何从页面中提取文本,以便行与行之间有空格 的相关文章

随机推荐

  • Angular - 在应用程序组件中获取路线数据

    我在中配置了以下路由app routing module ts const routes Routes path abc id component AbcComponent data category Public path xyz id
  • 如何动态定义一个类方法来引用外部的局部变量?

    class C end var I am a local var outside C class eval do def self a class method puts var end end 我知道 这是不正确的 因为def创建了一个新
  • 使用Android Studio将html文件从assets文件夹加载到android上的webview

    我正在使用 Android Studio Gradle app src main android asset 文件夹中有一个名为 Chart html 的文件 我正在尝试将此文件加载到我的网络视图中 如下所示 WebView view ne
  • 如何从 python 中使用 Seaborn 创建的直方图中删除透明度?

    我正在 python 中使用seaborn 创建直方图 并想要自定义颜色 默认设置创建透明的直方图 我希望我的直方图是实心的 如何去除透明度 我尝试创建调色板并将去饱和度设置为 0 但这并没有改变生成的直方图的饱和度 Example In
  • ASP.NET MVC 为每个操作命中输出缓存

    我们正在使用 ASP NET MVC 3 和 AppFabric 作为分布式缓存解决方案来运行相当大的站点构建 我们实现了一个自定义 OutputCacheAdapter 来使用我们的 AppFabric 集群 我们看到 ASP NET 为
  • PHP Documentor 中的注释关联数组

    我在 PHP 应用程序中使用了多个关联数组 并且使用 PHP 文档管理器来注释我的源代码 我从来没有真正为数组中的数组指定注释 但现在我需要这样做 但不知道如何做 array array id gt test class gt tester
  • Skype:接收链接时阻止显示图像

    在 Skype 中 当有人向我发送链接 例如https github com sameersbn docker postgresql blob master docker compose yml 我没有将链接视为文本 而是将其视为图像 单击
  • 获取有关 YouTube 直播的实时信息

    我正在构建一个网页来显示我不管理的几个 YouTube 频道的直播状态 该页面将显示所选频道的列表 并带有 red dot在任何正在直播的频道旁边 我还希望网页实时更新该状态 因此如果频道开始直播 我需要立即添加点 当频道停止直播时 我需要
  • 迁移以将新数据行插入 Room DB

    我正在制作一个新版本的应用程序 其新功能需要 Room DB 中的设置表中包含更多行数据 尽管我的数据库在结构上没有改变 没有新表 没有列更改等 但我正在考虑在 Room DB 上运行新的迁移 DB v2 gt v3 只是为了将这些新数据行
  • 尽管导入了Python模块的包,但访问Python模块失败

    我的 Django 项目的目录层次结构如下所示 pybsd devices templates views interaction init py geraete py geraetemodelle py geraetegruppen py
  • Collection.loadTable:在 GEE 中找不到

    当我尝试在 Google Earth Engine Asset 中上传 shp 文件并在 Python 中导入时 如下所示 self TS POP ee FeatureCollection 用户 arafayknysys pop TS 当我
  • vert.x 获取 - 无法创建子事件循环

    我正在创建大约 150 个大小约为 5MB 的文件 Vertx 文件 API 在创建 10 15 个文件后随机给出异常 无法创建子事件循环 我使用的是 vertx 3 和 java 8 下面是我的代码片段 在我收到回调后 我只能再次调用该函
  • python、lxml 和 xpath - html 表解析

    我对 lxml 很陌生 对 python 也很陌生 找不到以下问题的解决方案 我需要导入一些包含 3 列和从第 3 行开始的未定义行数的表 当任何行的第二列为空时 该行将被丢弃 并且表的处理将中止 以下代码可以很好地打印表的数据 但之后我无
  • 需要 js 删除定义以强制重新加载

    出于测试目的 我尝试删除一些 amd 模块并从服务器重新加载更新版本 目标是不刷新浏览器 我目前正在执行以下操作 但浏览器仍然不会从网络重新加载项目 var scripts document getElementsByTagName scr
  • 使用 Cocoa Lumberjack 日志框架立即刷新日志语句,NSLog 刷新到控制台的方式

    许多 iOS 开发者发现Cocoa Lumberjack 日志框架 https github com robbiehanson CocoaLumberjack readme满足这么简单的需求NSLog声明没有 这让人想起 Java 世界中的
  • 如果前五列中为 NaN,则删除行

    我有一个 pandas 数据框 尺寸为 89 行 x 13 列 我想删除一个entire row if NaN出现在前五列中 这是一个例子 LotName C15 C16 C17 C18 C19 Spots15 Spots16 Cherry
  • 如何使除一个之外的一组互斥属性中的任何一个

    我有一个遗留 API 我试图在 JSON 模式中定义 该对象有一个奇怪的结构 其中有一组 4 个属性 其中任何一个都是必需的 并且其中 3 个是互斥的 之后还有 30 多个共享可选属性 我将它们标记为 e g foo bar baz 123
  • 是否可以使用 TortoiseSVN 获取统计数据?

    是否可以获得有关每个用户贡献 总行数等的统计数据 您可以通过使用 显示日志 然后 统计 IIRC 底部的按钮 来获取基本统计数据
  • 如何将对象插入流星集合

    我刚刚开始学习 Meteorjs 问题多于答案 我想将我的应用程序的翻译存储到临时集合中 并订阅 Iron Router 来发布它 我有一个字典对象 我想将其插入到集合中 这是我的做法 In 服务器 translations js tran
  • python 和 pyPdf - 如何从页面中提取文本,以便行与行之间有空格

    目前 如果我使用 pyPdf 和 extractText 创建 pdf 页面的页面对象 会发生的情况是行连接在一起 例如 如果页面的第 1 行显示 hello 第 2 行显示 world 则从 extractText 返回的结果文本是 he