巧妙得对复杂的pdf数据进行提取划分整理至excel
对文档的数据进行提取划分整理
观察数据
首先我们对需要整理的数据进行一个观察分析,了解哪些是我们需要提取出来的数据,本文以JT/T697.3-2013或JT/T697.5-2013为例
可见每一数据元均含有不同大量且少部分不同信息
将数据提取放进表格中
使用python自动化提取到表格中
方法1.python利用pdfplumber库提取PDF文字到表格中
import PyPDF2
import pdfplumber
import pandas as pd
import csv
def extract_content(pdf_path):
# 内容提取,使用 pdfplumber 打开 PDF,用于提取文本
with pdfplumber.open(pdf_path) as pdf_file:
# 使用 PyPDF2 打开 PDF 用于提取图片
# pdf_image_reader = PyPDF2.PdfFileReader(open(pdf_path, "rb"))
# print(pdf_image_reader.getNumPages())
content = ''
# len(pdf.pages)为PDF文档页数,一页页解析
for i in range(len(pdf_file.pages)):
# print("当前第 %s 页" % i)
# pdf.pages[i] 是读取PDF文档第i+1页
page_text = pdf_file.pages[i]
# page.extract_text()函数即读取文本内容
page_content = page_text.extract_text()
if page_content:
content = content + page_content + "\n"
print(page_content)
# with open("1.csv",'w',encoding='utf_8_sig',newline='') as t:
# writer=csv.writer(t)
# writer.writerows(page_content)
extract_content('JTT697.7-2014.pdf')
# # # 写入到文件
# df = pd.DataFrame()
# df.to_csv("1.csv", index=False, header=True, encoding='utf_8_sig')
若此可使用Ctrl+G,使用对象定位来删除掉额外的图片
数据划分的预处理
对数据删除无关项空白项
筛选出无关项(例:页眉‘JT/ T 697.5—2013’,页码等)以及空白项并且删除!
对数据划分的替换、分列
1.将我们最终需要提取的字段标题插入进去,便于观察。
2.对A列进行替换操作,“计量单位:“修改为"计量单位:计量单位:”;“值域:“修改为"值域:值域:”。3.对A列进行数据分列操作,分隔符号为”;”.
对数据进行划分提取
1.使用IF函数,提取数据,在F2单元格输入=IF(A1="数据元名称",B1,"")
,然后下拉。
2.后续字段与第一步类似
3.因要求描述字段是填写,值域:xxx;计量单位:xxxx,故前面使用了替换内容操作。且描述字段中使用OR函数嵌套IF。
4.所有字段下拉后,可能部分记录并不是在同一列上,对此笔者目前还没有想到更好的解决方法,估计是因为A列有干扰项未去除,目前笔者是使用剪切/粘贴,插入/删除行灵活手动地进行调整,使它们位于同一列中。例这种是下移了两个单元的字段则对K,L列进行删除下方单元格上移操作
对于这种偏移严重的可能无法判断是属于哪一行的,则根据它所在的行数来确认,例P1438,属于红框区域,应属于P1427
检查与核对
检查
完成以上后就是对其中列筛选出空白项,看其它列是否有遗漏偏移项未调整。
核对
最后一步就是,将我们整理出的数据,随机挑选几条至文档中进行核对验证。
结语
笔者认为还是有很多地方是需要改善的,当然如大家有更好的方法欢迎留言提出
补充
如遇到描述项不止,值域、数量单位则,老方法使用IF函数提取出相关环境、关键字、同义名称、备注、关系等
再使用&合起来