美国在研新药_读取单个PDF
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频)
QQ:231469242
读取下载美国在研新药PDF内数据:unii,分子式,分子重量,药品名,who,编码,。。。。
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="atesidorsen sodium.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,则提取下一个值
if 'WHO NUMBER' in the_list_data[count]:
value=the_list_data[count+1]
if type(eval(value)) == int:
return value
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=""

美国在研新药_读取单个PDF的更多相关文章
- rsyslog 读取单个文件测试
rsyslog 测试(rsyslog 必须yum 安装uat-web02:/root# rpm -qa | grep rsyslog rsyslog-8.21.0-1.el6.x86_64) //读取 ...
- python读取单个文件操作
python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...
- Python打印到屏幕_读取键盘输入
Python打印到屏幕_读取键盘输入: print( ): 打印输出括号中的值 print("hello") # hello strs = 'hello' print(" ...
- 单个pdf提取测试
# -*- coding: utf-8 -*- """ Created on Wed Feb 3 09:32:22 2016 pdf单个文件提取测试 @author: A ...
- java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx
环境准备txt利用common-iopdf利用pdfbox剩下的用POI关于POI,读取xls没啥特别的,主要是读取doc和ppt,需要下载poi源代码,然后将poi-src-3.7-20101029 ...
- day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告
一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...
- python文件_读取
1.文件的读取和显示 方法1: f=open(r'G:\2.txt') print f.read() f.close() 方法2: try: t=open(r'G:\2.txt') print t.r ...
- php_常用操作_读取文件_数据库操作
作为php新手 ,把经常用到的phpcode,做个备份 1: 文件处理 //读取配置 启动是指定文件 $filepath=$argv[1]; if(null==$filepath){ echo&quo ...
- js_ajax模拟form表单提交_多文件上传_支持单个删除
需求场景: 用一个input type="file"按钮上传多张图片,可多次上传,可单独删除,最后使用ajax模拟form表单提交功能提交到指定方法中: 问题:由于只有一个file ...
随机推荐
- React Native知识9-ScrollView组件
一个包装了平台的ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统. 记住ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组 ...
- Spring下如何配置bean
本次讲述项目背景: 创建Service类,Service下用到dao类.通过在Spring中配置bean,实现在项目启动时,自动加载这个类 本次只讲述配置bean的注意事项,故只给出简单实例: 创建S ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- 手机app软件开发有什么需要注意的细节?
在做手机产品设计的过程中,遇到很多看似很小,且很容易被忽略的问题,正是这些手机应用软件开发小问题,一次次的撩拨用户的耐心,让用户对你的产品心生怨念.刚出道的朋友没有经过实战,对细节注意不多,往往都会遇 ...
- web前端(实习生)之“百度二面”
2016.3.18,星期五.我经历了我的第一次面试. 在面完一面之后,面试官说“我对你的考核到这里结束了,我去看一下公司是决定现在就安排二面还是只有再做安排,你先在这里等一下.”我当时就蒙圈了:一是在 ...
- linux-虚拟机centos6.5安装tools
1.在VMWare选VM -> Install VMWare Tools-,就会在桌面出现VMWare Tools图示让你安裝 2.进入CentOS桌面后,将光盘打开,看到了VMWareTool ...
- 2015最流行的Android组件、工具、框架大全
Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...
- BZOJ 1415 【NOI2005】 聪聪和可可
题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...
- [LeetCode] 4Sum II 四数之和之二
Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...

