1

我对 python 和 pdfminer 都是新手,虽然一般来说不是编程。我在 Windows 7 和 cygwin 上使用 Python 2.7。

我正在用 beautifulsoup 编写一个脚本来从 pdf 中提取特定信息。为此,我使用 pdf2txt 创建了此 pdf 的 .txt 和 .html 文件以用于测试。只是通常的命令:

python pdf2txt.py -o output.txt input.pdf

python pdf2txt.py -o output.html input.pdf

它们都有相同的问题:某些文本行出现乱序。在这个 pdf 上运行 pdf2txt,你会明白我的意思:(编辑:我找到了原始网站。)这是美属萨摩亚在这个页面上的一个:https ://www.iamovers.org/ResourcesPublications/ShipperGuides.aspx?navItemNumber =580

例如,这是 pdf 第一页的一部分的正确布局:

需要文件

护照复印件(某些港口要求 3299 所列所有家庭成员的护照)
CF-3299 表格
补充声明(大多数港口要求)
英文详细清单
签证复印件(如果是非美国公民/永久居民)/永久居留复印件居民卡
I-94 印章 /
提单 (OBL) / 空运提单 (AWB)
表格 DS-1504 (外交官)
A-1 签证 (外交官)
进口商安全申报 (ISF)

这就是使用 pdf2txt.py 进行 txt 和 html 转换的结果:

需要文件

护照复印件(某些港口要求 3299 中列出的所有家庭成员的护照)
CF-3299 表格
补充声明(大多数港口要求)
英文详细清单
签证复印件(如果是非美国公民/永久居民)/永久居留复印件居民卡

提单 (OBL) / 空运提单 (AWB)
表格 DS-1504 (Diplomats)
A-1 签证 (Diplomats)副本

进口商安全申报 (ISF)

I-94 邮票/卡

出于某种原因,以字母“I”开头的行总是从它们的位置中取出,并放在下一个空白行或前一个空白行上。还有一些其他角色也不断发生。

我在这里发布了这个问题:https ://github.com/euske/pdfminer/issues/121

这一定是pdfminer的问题。我还不太了解python,无法对包进行更改。有谁知道如何解决这一问题?

4

1 回答 1

0

我不想将我的电子邮件地址提供给某个文件托管站点,因此我无法查看您提供的示例。

但是,一般来说,即使 PDF 文件仅包含排列整齐的文本,PDF 仍然不是文本文件格式。它更像是一个脚本,告诉 PDF 阅读器将哪些图形和文本元素放置在页面上的哪个位置以及按什么顺序放置。

您似乎希望纯文本输出与 PDF 文件的布局相匹配,但如果您考虑一下,这并不是一个微不足道的要求。您可以假设(正如 pdf2txt 显然所做的那样)元素已经在 PDF 文件中从上到下、从左到右排序,然后扫描每个页面的元素列表,添加任何可提取的字符串或字符你遇到一个字符串的末尾。但这是一个幼稚的假设,因为不需要以任何方式对 PDF 页面中的元素进行排序(除非从后到前,以防有任何重叠。)

就我个人而言,我经常使用 PDFTron 的 PDFNet 的 C# 版本。它能够生成文本页面上所有单词的列表,每个单词由字符串和边界框表示。然后,您可以创建将单词链接成行并对这些行进行排序的规则,尽管您要考虑的布局类型越多(例如排列在两列中的文本、表格布局、沿边框的垂直文本),它确实会变得更复杂页面等)

还有一个Python 版本,所以也许你可以看看。但最重要的是,你想要做的实际上并不是那么简单。

于 2015-09-21T08:12:30.690 回答