美国usan数据库——PDF提取
QQ:231469242 原创
单个PDF内容提取
# -*- coding: utf-8 -*- """ io.open() is the preferred, higher-level interface to file I/O. It wraps the OS-level file descriptor in an object that you can use to access the file in a Pythonic manner. os.open() is just a wrapper for the lower-level POSIX syscall. It takes less symbolic (and more POSIX-y) arguments, and returns the file descriptor (a number) that represents the opened file. It does not return a file object; the returned value will not have read() or write() methods. """ import re from pdfminer.pdfinterp import PDFResourceManager, process_pdf from pdfminer.converter import TextConverter from pdfminer.layout import LAParams # pip3 install pdfminer3k from io import StringIO from io import open #pdf文件名 pdfFilename="avelumab.pdf" #文件名前缀 frontName="usan/2016/" #商标文件名 trademark_filename="trademarks.txt" #赞助商文件名 sponsor_filename="sponsor.txt" #读取PDF数据 def readPDF(pdfFile): rsrcmgr = PDFResourceManager() retstr = StringIO() laparams = LAParams() device = TextConverter(rsrcmgr, retstr, laparams=laparams) process_pdf(rsrcmgr, device, pdfFile) device.close() content = retstr.getvalue() retstr.close() return content #规范PDF数据 def Format(str1): list2=[] #分割成列表 list1=str1.split("\n") for i in list1: #if i=="/n": if i=='' or i==' 'or i==' ': continue list2.append(i) return list2 #提取me_usan,药品名 def Get_me_usan(the_list_data): return the_list_data[0] #提取me_therapeutic def Get_me_therapeutic(the_list_data): for i in the_list_data: if "Treatment of" in i: return i #提取me_chemical1 分子式1 def Get_me_chemical1(the_list_data): for i in the_list_data: if "1. " in i: return i return "" #提取me_chemical2 分子式2 def Get_me_chemical2(the_list_data): for i in the_list_data: if "2. " in i: return i return "" #匹配分子式 def Re_formula(str1): #匹配正在表达式 re_formula=re.compile(r'C(\d)+H(\d)+') mo1=re_formula.search(str1) if mo1!=None: return True return False #提取me_mo_formula,特征包含碳氢CH元素 def Get_me_mo_formula(the_list_data): for i in the_list_data: #转换为大写 i=i.upper() value=Re_formula(i) if value==True: return i return "" #提取分子质量me_mo_weight,如果出现MOLECULAR WEIGHT,且下一个值是数字或浮点数,就提取下一个值 def Get_me_mo_weight(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 if 'MOLECULAR WEIGHT' in the_list_data[count]: value=the_list_data[count+1] if type(eval(value)) == int or type(eval(value)) == float: return value return "" #从trademarks.txt搜索数据 def Get_txt_contents(filename): file=open(filename) content=file.readlines() content1=[i.replace("\n","") for i in content] return content1 #提取me_trademark,从trademarks.txt搜索数据 def Get_me_trademark(the_list_data): for i in the_list_data: i=i.strip(" ") for k in list_trademarks: if k in i: return i return "" #提取me_sponsor,从sponsor.txt搜索数据 def Get_me_sponsor(the_list_data): for i in the_list_data: i=i.strip(" ") for k in list_sponsors: if k in i: return i return "" #匹配CAS正则表达式 def Re_CAS(str1): re_CAS=re.compile(r'(\d)+-(\d)+-(\d)+') mo1=re_CAS.search(str1) if mo1!=None: return True return False #提取CAS def Get_CAS(the_list_data): for i in the_list_data: value=Re_CAS(i) if value==True: return i return "" #匹配WHO正则表达式 def Re_WHO(str1): re_WHO=re.compile(r'(\d)+') mo1=re_WHO.search(str1) if mo1!=None: return True return False #提取WHO def Get_WHO(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 try: if 'WHO NUMBER' in the_list_data[count]: value=the_list_data[count+1] if type(eval(value)) == int: return value except: return "" return "" #匹配UNII正则表达式 def Re_UNII(str1): #{10}表示出现10次 re_UNII=re.compile(r'[A-Za-z0-9]{10}') mo1=re_UNII.search(str1) if mo1!=None: return True return False #提取UNII def Get_UNII(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 if 'UNII' in the_list_data[count]: value=the_list_data[count+1] if Re_UNII(value)==True: return value return "" #获取me_down数据 def Get_me_down(the_list_data): name=frontName+pdfFilename return name pdfFile = open(pdfFilename, 'rb') outputString = readPDF(pdfFile) list_data=Format(outputString) me_source=2016 #提取me_usan,药品名 me_usan=Get_me_usan(list_data) #提取me_therapeutic 治疗疾病 me_therapeutic=Get_me_therapeutic(list_data) #提取me_therapeutic me_chemical1=Get_me_chemical1(list_data) #提取me_chemical2 分子式2 me_chemical2=Get_me_chemical2(list_data) #提取me_mo_formula,特征包含碳氢CH元素 me_mo_formula=Get_me_mo_formula(list_data) #提取分子质量me_mo_weight #me_mo_weight=Get_me_mo_weight(list_data) #商标名数据库 list_trademarks=Get_txt_contents(trademark_filename) #提取商标名 me_trademark=Get_me_trademark(list_data) #赞助商数据库 list_sponsors=Get_txt_contents(sponsor_filename) #提取赞助商,新公司则找不到 me_sponsor=Get_me_sponsor(list_data) #提取CAS me_CAS=Get_CAS(list_data) #提取WHO me_WHO=Get_WHO(list_data) #提取UNII me_UNII=Get_UNII(list_data) #获取me_down me_down=Get_me_down(list_data) #me_bianma数据默认为空 me_bianma="" #me_ylbm数据默认为空 me_ylbm="" me_mo_weight=""
多个PDF内容提取
# -*- coding: utf-8 -*- """ Created on Tue Dec 27 11:37:54 2016 批量提取PDF数据到excel内 """ import re import os import pandas,csv from pdfminer.pdfinterp import PDFResourceManager, process_pdf from pdfminer.converter import TextConverter from pdfminer.layout import LAParams # pip3 install pdfminer3k from io import StringIO from io import open #获取目录内文件名 list_filenames=os.listdir() #获取所有PDF文件名 list_pdfFilename=[i for i in list_filenames if ".pdf" in i] #pdf文件名,测试用 #pdfFilename="cenobamate.pdf" #参数设置 #文件名前缀 frontName="usan/2016/" #me_sorce字段 me_source=2016 #me_bianma数据默认为空 me_bianma="" #me_ylbm数据默认为空 me_ylbm="" me_code="" me_en="" #me_mo_weight="" #疾病诊断文件名 therapeutic_filename="therapeutic.txt" #商标文件名 trademark_filename="trademarks.txt" #赞助商文件名 sponsor_filename="sponsor.txt" #读取PDF数据 def readPDF(pdfFile): rsrcmgr = PDFResourceManager() retstr = StringIO() laparams = LAParams() device = TextConverter(rsrcmgr, retstr, laparams=laparams) process_pdf(rsrcmgr, device, pdfFile) device.close() content = retstr.getvalue() retstr.close() return content #规范PDF数据 def Format(str1): list2=[] re_blank=re.compile(r'\s') #分割成列表 list1=str1.split("\n") for i in list1: m=re_blank.search(i) #遇到空格 if m==None: continue list2.append(i) return list2 #提取me_usan,药品名,并非百分百准确 def Get_me_usan(pdfFilename): me_usan=pdfFilename.replace(".pdf","") return me_usan #提取me_therapeutic def Get_me_therapeutic(the_list_data): for i in the_list_data: #小写 i=i.lower() for k in list_therapeutic: if k in i: return i return "" #提取me_chemical1 分子式1 def Get_me_chemical1(the_list_data): for i in the_list_data: if "1. " in i: return i return "" #提取me_chemical2 分子式2 def Get_me_chemical2(the_list_data): for i in the_list_data: if "2. " in i: return i return "" #匹配分子式 def Re_formula(str1): #匹配正在表达式 re_formula=re.compile(r'C(\d)+H(\d)+') mo1=re_formula.search(str1) if mo1!=None: return True return False #提取me_mo_formula,特征包含碳氢CH元素 def Get_me_mo_formula(the_list_data): for i in the_list_data: #转换为大写 i=i.upper() value=Re_formula(i) if value==True: return i return "" #提取分子质量me_mo_weight,如果出现MOLECULAR WEIGHT,且下一个值是数字或浮点数,就提取下一个值 def Get_me_mo_weight(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 if 'MOLECULAR WEIGHT' in the_list_data[count]: value=the_list_data[count+1] if "kDa" in value: return value try: if type(eval(value)) == int or type(eval(value)) == float: return value except: return "" return "" #从trademarks.txt搜索数据 def Get_txt_contents(filename): file=open(filename) content=file.readlines() content1=[i.replace("\n","") for i in content] #转换为小写 content2=[i.lower() for i in content1] return content2 #提取me_trademark,从trademarks.txt搜索数据 def Get_me_trademark(the_list_data): for i in the_list_data: i=i.strip(" ") for k in list_trademarks: if k in i: return i return "" #提取me_sponsor,从sponsor.txt搜索数据 def Get_me_sponsor(the_list_data): for i in the_list_data: i=i.strip(" ") for k in list_sponsors: if k in i: return i return "" #匹配CAS正则表达式 def Re_CAS(str1): re_CAS=re.compile(r'(\d)+-(\d)+-(\d)+') mo1=re_CAS.search(str1) if mo1!=None: return True return False #提取CAS def Get_CAS(the_list_data): for i in the_list_data: value=Re_CAS(i) if value==True: return i return "" #匹配WHO正则表达式 def Re_WHO(str1): re_WHO=re.compile(r'(\d)+') mo1=re_WHO.search(str1) if mo1!=None: return True return False #提取WHO #提取WHO def Get_WHO(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 try: if 'WHO NUMBER' in the_list_data[count]: value=the_list_data[count+1] if type(eval(value)) == int: return value except: return "" return "" #匹配UNII正则表达式 def Re_UNII(str1): #{10}表示出现10次 re_UNII=re.compile(r'[A-Za-z0-9]{10}') mo1=re_UNII.search(str1) if mo1!=None: return True return False #提取UNII def Get_UNII(the_list_data): for count in range(len(the_list_data)): #如果出现MOLECULAR WEIGHT,则提取下一个值 if 'UNII' in the_list_data[count]: value=the_list_data[count+1] if Re_UNII(value)==True: return value return "" #获取me_down数据 def Get_me_down(pdfFilename): name=frontName+pdfFilename return name #获取单个PDF的药品名称,编码,who,unii,分子式等内容 def Get_one_pdf_content(pdfFilename,count): list_one_pdf_content=[] pdfFile = open(pdfFilename, 'rb') outputString = readPDF(pdfFile) list_data=Format(outputString) #me_uid me_uid=count #提取me_usan,药品名 me_usan=Get_me_usan(pdfFilename) #提取me_therapeutic 治疗疾病,用字典方法改写 me_therapeutic=Get_me_therapeutic(list_data) #提取me_therapeutic me_chemical1=Get_me_chemical1(list_data) #提取me_chemical2 分子式2 me_chemical2=Get_me_chemical2(list_data) #提取me_mo_formula,特征包含碳氢CH元素 me_mo_formula=Get_me_mo_formula(list_data) #提取分子质量me_mo_weight,有问题需要改进 me_mo_weight=Get_me_mo_weight(list_data) #提取商标名 me_trademark=Get_me_trademark(list_data) #提取赞助商,新公司则找不到 me_sponsor=Get_me_sponsor(list_data) #提取CAS me_CAS=Get_CAS(list_data) #提取WHO me_WHO=Get_WHO(list_data) #提取UNII me_UNII=Get_UNII(list_data) #获取me_down me_down=Get_me_down(pdfFilename) #把所有内容添加进去 list_one_pdf_content.append(me_uid) list_one_pdf_content.append(me_source) list_one_pdf_content.append(me_usan) list_one_pdf_content.append(me_therapeutic) list_one_pdf_content.append(me_chemical1) list_one_pdf_content.append(me_chemical2) list_one_pdf_content.append(me_mo_formula) list_one_pdf_content.append(me_mo_weight) list_one_pdf_content.append(me_trademark) list_one_pdf_content.append(me_sponsor) list_one_pdf_content.append(me_code) list_one_pdf_content.append(me_CAS) list_one_pdf_content.append(me_WHO) list_one_pdf_content.append(me_UNII) list_one_pdf_content.append(me_en) list_one_pdf_content.append(me_down) list_one_pdf_content.append(me_bianma) list_one_pdf_content.append(me_ylbm) return list_one_pdf_content #获取所有PDF的药品名称,编码,who,unii,分子式等内容 def Get_all_pdf_content(list_pdfFilename): #添加首行 list_all_pdfContent.append(list_firstRow) for count in range(len(list_pdfFilename)): filename=list_pdfFilename[count] try: list_one_pdf_content=Get_one_pdf_content(filename,count) except: list_one_pdf_content="" list_all_pdfContent.append(list_one_pdf_content) return list_all_pdfContent #首行信息 list_firstRow=["me_uid","me_source","me_usan","me_therapeutic","me_chemical1","me_chemical2","me_mo_formula","me_mo_weight","me_trademark","me_sponsor", "me_codename","me_cas","me_who","me_unii","me_en","me_down","me_bianma","me_ylbm"] #治疗疾病数据库 list_therapeutic=Get_txt_contents(therapeutic_filename) #商标名数据库 list_trademarks=Get_txt_contents(trademark_filename) #赞助商数据库 list_sponsors=Get_txt_contents(sponsor_filename) #获取所有PDF的药品名称,编码,who,unii,分子式等内容 list_all_pdfContent=[] list_all_pdfContent=Get_all_pdf_content(list_pdfFilename) csvObj=open("output.csv",'w',newline='') csvWriter=csv.writer(csvObj) for rowData in list_all_pdfContent: csvWriter.writerow(rowData) csvObj.close()
需要数据库
自动输出结果
美国usan数据库——PDF提取的更多相关文章
- 单个pdf提取测试
# -*- coding: utf-8 -*- """ Created on Wed Feb 3 09:32:22 2016 pdf单个文件提取测试 @author: A ...
- 转载-SQL中的where条件,在数据库中提取与应用浅析
1 问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...
- python操作MONGODB数据库,提取部分数据再存储
目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...
- SQL中的where条件,在数据库中提取与应用浅析
1. 问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语法解析.权限 ...
- django之创建第8-3个项目-数据库数据提取之高级操作
1.配置test2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 转: SQL中的where条件,在数据库中提取与应用浅析
SQL中的where条件,在数据库中提取与应用浅析 http://hedengcheng.com/?p=577 1问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当 ...
- 0320SQL中的where条件,在数据库中提取与应用浅析
转自 何登成的技术博客 追求技术的道路上,10年如一日 首页 关于我 RSS 订阅 © 2012-2017 何登成的技术博客 SQL中的where条件,在数据库中提取与应用浅析 3月 3r ...
- Kettle实现从数据库中提取数据到Excel
因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以邮件的形式发给用户. 刚好近期同事在研究使用kettle自动提数且完成邮件的发送,觉得很实用又挺有意思的就学了一下这个技能~ ...
- 二十五、sql中where条件在数据库中提取与应用浅析
问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语法解析.权限检查. ...
随机推荐
- Android 防止多次点击事件
恐怕大家都会遇到这样的问题,一个点击事件多次触发,导致,同样的内容提交了多次,或者说弹出多个页面... 下面是简单的方案,大家可以试一试 原理很简单,当我们第一次点击的时候,把按钮变成不可点击状态. ...
- C#使用ADO.NET访问数据库(一)
博主好久没更新博客了,最近有点忙(打麻将0.0..),今天更新一篇C#的,我还是想坚持更新博客,分享一下自己的心得,闲话少说,开始正题~~ ADO.NET概述:ADO.NET的作用在于他是客户端访问服 ...
- MYSQL基础操作之数据约束与关联查询
一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...
- 由用友NC刷新功能得到启示
在做NC刷新界面数据的功能,就是 点刷新按钮然后刷新当前 list 中的数据,犯了一个错误. 我之前的做法是记录每次查询数据的sql条件语句,然后在点刷新的时候去调用这个条件语句,哈哈,错误就在这个逻 ...
- 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra
问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...
- mongodb 性能篇
一. 索引及其优化 索引的概述 数据库的索引好比是一本书前面的目录,能加快数据查询的速度. 适当的地方增加索引,不合理的地方删除次优索引,能优化性能较差的应用. 索引的操作 基础索引:db.ken. ...
- SQL Server 修改表结构后无法保存的老问题
在修改表结构后无法保存,这是每次重装SQL Server后都会遇到的问题,好记性不如烂笔头,在这里记一下吧. 保存修改了的表结构时会提示“不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法 ...
- MongoDB数据库的CURD的一些基本语句
from:http://www.data321.com/shujuku/20160514417/addToSetQianMianBuXuYaoJinXing 插入文档: SQL语句: INSERT I ...
- Basic EEG waves 四种常见EEG波形
Source: https://www.medicine.mcgill.ca/physio/vlab/biomed_signals/eeg_n.htm The electroencephalogram ...
- ActiveMQ笔记(5):JMX监控
系统上线运行后,及时监控报警是很必要的手段,对于ActiveMQ而言,主要监控的指标有:MQ本身的健康状况.每个队列的生产者数量.消费者数量.队列的当前消息数等. ActiveMQ支持JMX监控,使用 ...