我想使用Python和PYPDF软件包从pdf文件中提取文本。这是我的pdf格式 fie,这是我的代码:
import PyPDF2
opened_pdf = PyPDF2.PdfFileReader('test.pdf', 'rb')
p=opened_pdf.getPage(0)
p_text= p.extractText()
# extract data line by line
P_lines=p_text.splitlines()
print P_lines我的问题是P_lines不能逐行提取数据并导致一个巨大的字符串。我想逐行提取文本来分析它。对如何改进它有什么建议吗?谢谢!这是代码返回的字符串:
涉及29 CFR 1910.1200(i)和附录D的化学品的不方便信息来自供应商材料安全数据表*信息基于最大浓度潜力,因此总量可能超过100%*水资源总量可能包括淡水、产出水,和/或回收water0.01271%72.00%7732-18-5Water0.00071%4.00%1310-73-2Sodium Hydroxide0.00424%24.00%533-74-4DazomatBiocidePumpcoPlexcide 24L0.00828%75.00%有机膦酸盐0.00276%25.00%67-56-1甲醇AlcoholScale InhibitorPumpcoPlexaid 6730.00807%30.00%7732-18-5Water0.00188%7.00%Polyethoxylated醇类表面活性剂0.00753%28.00%9003-06-9Ammonium Salts0.00941%35.00%64742-47-8石油9210.05029%60.00%7732-18-5Water0.03353%40.00%7647-01-0Hydrogen AcidPumpcoHCL9.84261%100.00%14808-60-7Crystaline SilicaProppantPumpcoSand90.01799%100.00%7732-18-5WaterCommentsMaximumIngredientConcentrationin HF流体(按质量计)**极大值浓缩剂(按质量计)**化学AbstractService数(CAS #)IngredientsPurposeSupplierTrade NameHydraulic压裂液组成:2,608,032总水量(Gal)*:7,595真垂直深度(TVD):产气类型:NAD27Long/Lat投影:32.558525纬度-97.215242经度:Ole Gieser单元D 6井名称和编号:XTO EnergyOperator名称:42-439-35084API DateHydraulic压裂液产品成分信息披露
文件的截图:

发布于 2017-03-12 03:14:52
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
fp.close()
device.close()
retstr.close()
return text
print(convert_pdf_to_txt('test.pdf').strip().split('\n\n'))输出
水力压裂液产品组分信息披露 裂缝日期状态:县: API编号:操作人员名称:井名和编号:经度:纬度:长/拉投影:生产类型:真实垂直深度(TVD):总水量(gal)*: 2010年12月10日德克萨斯塔兰特42-439-35084 XTO能源Ole Gieser单元D 6H -97.215242 32.558525 NAD27燃气7,595,608,032 水力压裂液组成: 商号 供应商 目的 配料 化学文摘服务编号 (核证机关#) 最大成分 浓度 (按质量计)** 评论 最大成分 浓度 高频液体(按质量计)** 水砂HCL 南瓜南瓜 支撑剂盐酸 普列克斯利克921 蒲公英 减摩器 板673 蒲公英 阻垢剂 杀菌剂24L 蒲公英 杀生剂 结晶二氧化硅 氯化氢水 石油馏分油铵盐聚乙氧基醇表面活性剂水 甲醇有机膦酸盐 达唑马特氢氧化钠水 14808-60-7 7647-01-0 7732-18-5 64742-47-8 9003-06-9 7732-18-5 67-56-1 533-74-4 1310-73-2 7732-18-5 100.00 100.00 90.01799 9.84261 40.00 60.00 35.00 28.00 7.00 30.00 25.00 75.00 24.00 4时72.00 0.03353 0.05029 0.00941 0.00753 0.00188 0.00807 0.00276 0.00828 0.00424 0.00071 0.01271
受29 CFR 1910.1200(i)和附录D限制的化学品的成分信息来自供应商材料安全数据表(MSDS)
发布于 2019-03-26 02:25:04
textract在python3中工作得很好,使用tesseract方法。示例代码:
import textract
text = textract.process("pdfs/testpdf1.pdf", method='tesseract')
print(text)
with open('textract-results.txt', 'w+') as f:
f.write(str(text))发布于 2017-03-12 02:56:25
确保您正在导入的PDF中实际包含新行。如果没有,那么p_text.splitlines()就没有地方可以拆分字符串了!如果有特定字符,则可以使用p_text.split("the linebreak character")。
编辑:基于您的PDF,我不确定有一种方法来分割这个逐行,因为它似乎是静态格式,而不是线性。(文本按位置放置在PDF中,而不是逐行放置)。
https://stackoverflow.com/questions/42743061
复制相似问题