Python PDFMiner-pdf2txt.py解析顺序错误的文本

Python PDFMiner-pdf2txt.py解析顺序错误的文本,python,python-2.7,pdf,pdfminer,Python,Python 2.7,Pdf,Pdfminer,我对python和pdfminer都是新手,虽然一般来说我不熟悉编程。我在Windows7和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 它们都有相同的问题:一些文本行

我对python和pdfminer都是新手,虽然一般来说我不熟悉编程。我在Windows7和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,您将了解我的意思: (编辑:我找到了原始网站。)这是本页的美属萨摩亚网站:

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

所需文件

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

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

所需文件

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

提单(OBL)/航空货运单(AWB)副本
表DS-1504(外交官)
A-1签证(外交官)

进口商安全申报(ISF)

I-94邮票/卡片

由于某些原因,以字母“I”开头的行总是从其所在位置取走,并放置在下一个空行或上一个空行上。还有一些其他的角色也经常发生这种情况

我已在此处发布此期:


这一定是pdfminer的问题。我对python还不够了解,无法在包中进行更改。有人知道如何解决这个问题吗?

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

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

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

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


还有一个,也许你可以看看。但归根结底,你要做的其实并不是那么简单。

我不想把我的电子邮件地址给某个文件托管网站,所以我不能看你提供的示例

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

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

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


还有一个,也许你可以看看。但归根结底,你要做的事情其实并没有那么简单。

是要求你发送电子邮件吗?啊。很抱歉,我已经在这里读了很多关于pdf抓取的帖子,所以我知道这不是小事。但事实上,它总是发生在以“I”、“J”和其他一些字符开头的行中,这让我认为这是一个可以解决的问题。PDFNet看起来很不错,但我只限于免费的atm解决方案。我看了一下PDFMiner,它似乎确实做了一些布局识别,所以可能是PDFMiner出了问题。你试过玩-F和-A开关吗