首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中将pdf转换为文本时保持条目顺序?

如何在python中将pdf转换为文本时保持条目顺序?
EN

Stack Overflow用户
提问于 2019-04-26 17:01:08
回答 1查看 282关注 0票数 0

我正在尝试从pdf文件中读取文本。此文件是生成的报表的一部分。我很容易读到文件中的文字,但它的出来非常混乱。我想要的是将pdf文件中的每一行作为列表中的一个条目,但是您可以看到字段名和条目都被混淆了。一个我试图重要的pdf的例子可以找到这里,下面是我试图用来获取行的代码。

代码语言:javascript
复制
import PyPDF2

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

filename = 'U:/PLAN/BCUBRICH/Python/Network Plan/Page 1 from AMP380_1741500.pdf'



def getPDFContent(filename):
    content = ""

    p = open(filename, "rb")
    pdf = PyPDF2.PdfFileReader(p)
    pdf.
    num_pages = pdf.getNumPages()
    for i in range(0, num_pages):
        content += pdf.getPage(i).extractText()+'\n'
#    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content

content=getPDFContent(filename)

这里是我得到的输出:

代码语言:javascript
复制
Out:'''UNITED STATES ENVIRONMENTAL PROTECTION AGENCYAIR QUALITY SYSTEMSITE DESCRIPTION REPORTApr. 25, 2019Site ID: 49-003-0003 
Site Name: Brigham City 
Local ID: BR 
140 W.FISHBURN DRIVE, BRIGHAM CITY, UTStreet Address: City: Brigham City 
Utah Zip Code: 84302
State: Box ElderCounty: Monitoring PointLocation Description: SuburbanLocation Setting: Interpolation-MapColl. Method:ResidentialLand Use: 20000819Date Established: Date Terminated: 20190130Last Updated: HQ Eval. Date:Regional Eval. Date: UtahAQCR : Ogden-Clearfield, UTCBSA: Salt Lake City-Provo-Orem, UTCSA: Met. Site ID:Direct Met Site: On-Site Met EquipType Met Site: Dist to Met. Site(m): Local Region: Urban Area: Not in an urban area 
EPA Region: Denver 
17411City Population: Dir. to CBD: Dist. to City(km): 3000Census Block: 3Block Group: 960701Census Tract: 1Congressional District: Class 1 Area: +41.492707Site Latitude: -112.018863Site Longitude: MountainTime Zone: UTM Zone: UTM Northing: UTM Easting: Accuracy: 60.73 
Datum: WGS84 
Scale: 24000 
Point/Line/Area: Point 1,334.0Vertical Measure(m): 0Vert Accuracy: UnknownVert Datum : Vert Method: Unknown 
Owning Agency: 1113 Utah Department Of Environmental Quality SITE COMMENTS SITE FOR OZONE, PM2.5, AND MET ACTIVE MONITOR TYPES Primary Monitor Periods # of Parameter Code Poc Begin Date End Date Monitor Type Monitors 42602 1 20180126 OTHER 2 44201 1 20010501 SLAMS 16 88101 1 20000819 20141231 88101 1 20160101 20161231 88101 1 20180101 88101 3 20170101 20171231 88101 4 20150101 20151231 TANGENT ROADS Road Traffic Traffic Compass Number Road Name Count Year Traffic Volume Source Road Type Sector 1 FISHBURN DRIVE 450 2000 LOCAL ST OR HY S Page 1 of 77
'''

例如,我希望列表中的第八项是

代码语言:javascript
复制
State: Utah Zip Code: 84302 County: Box Elder

但我得到的是

代码语言:javascript
复制
Utah Zip Code: 84302 State: Box ElderCounty:

这种混淆在整个文档中都会发生。

EN

回答 1

Stack Overflow用户

发布于 2019-05-10 15:36:04

这只是解释为什么会发生这种情况,而不是解决办法。但它太长了,不能发表评论,所以它得到了答案.

这个奇怪顺序的原因是文档中的文本块是按该顺序绘制的.

如果您深入了解PDF并查看内容流,您会发现这个片段负责您选择的示例行:

代码语言:javascript
复制
/TD <</MCID 12 >>BDC 
-47.25 -1.685 Td
(Utah )Tj
28.125 0 Td
[(Zip Code: )-190(84302)]TJ
-32.06 -0 Td
(State: )Tj
EMC 
/TD <</MCID 13 >>BDC 
56.81 0 Td
(Box Elder)Tj
-5.625 0 Td
(County: )Tj
EMC  

您可能不理解这些指令,但可以看到字符串(圆括号中的(.))与输出中所观察到的顺序完全一致

犹他州邮编: 84302州:方框ElderCounty:

而不是期望的

州:犹他州邮编: 84302县:盒子老人

中间的Td指令使文本插入点来回跳,以实现查看器中的不同外观。

显然,您的文本提取方法只是按绘制的顺序从内容流中检索字符串,而忽略了绘制字符串的实际位置。因此,对于适当的文本提取,您必须更改所使用的方法。因为我自己并不真正了解PyPDF2,所以我不能说这个库是否提供了不同的文本提取方法,或者您是否需要使用不同的库。

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

https://stackoverflow.com/questions/55872089

复制
相关文章

相似问题

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