我正在尝试从pdf文件中读取文本。此文件是生成的报表的一部分。我很容易读到文件中的文字,但它的出来非常混乱。我想要的是将pdf文件中的每一行作为列表中的一个条目,但是您可以看到字段名和条目都被混淆了。一个我试图重要的pdf的例子可以找到这里,下面是我试图用来获取行的代码。
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)这里是我得到的输出:
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
'''例如,我希望列表中的第八项是
State: Utah Zip Code: 84302 County: Box Elder但我得到的是
Utah Zip Code: 84302 State: Box ElderCounty:这种混淆在整个文档中都会发生。
发布于 2019-05-10 15:36:04
这只是解释为什么会发生这种情况,而不是解决办法。但它太长了,不能发表评论,所以它得到了答案.
这个奇怪顺序的原因是文档中的文本块是按该顺序绘制的.
如果您深入了解PDF并查看内容流,您会发现这个片段负责您选择的示例行:
/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,所以我不能说这个库是否提供了不同的文本提取方法,或者您是否需要使用不同的库。
https://stackoverflow.com/questions/55872089
复制相似问题