美国在研新药_读取单个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 ...
随机推荐
- Git使用详细教程(一)
很久不发博客,最近有兴趣想写点东西,但 Live Writer 不支持从Word复制图片,疯狂吐槽下 Git使用详细教程(一) Git使用详细教程(二) 该教程主要是Git与IntelliJ IDEA ...
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系?
问 我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php ...
- Oracle工具类-生成数据库现有Job的创建脚本
生成Oracle数据库现有Job的创建脚本 -- 生成现有Job的创建脚本 create or replace procedure proc_generate_job_create_sql is be ...
- SQL Server 2012 新特性:其他
安装期间的设置 为了强化角色分离,不自动在 sysadmin 固定服务器角色中设置 BUILTIN\administrators 和 Local System (NT AUTHORITY\SYST ...
- IDEA 中scala 程序运行时的错误:报错 test is already defined as object test
解决办法:在 创建main文件夹和scala文件夹的时候,注意src与这两个文件夹不能同时设置为resources,否则就会产生报错,解决办法将src文件夹的resources取消,右键.
- MySQL 常用命令总结
http://blog.csdn.net/hanxin1987216/article/details/5976860 一.总结 1.Linux系统下启动MySQL的命令: mysqladmin sta ...
- Linux基础练习题
1.列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可. [root@bj-1-160-enzhi ~]# who|cut -d ' ' -f 1|uniq -c 2 ro ...
- Linux查看物理CPU个数、核数、逻辑CPU个数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...
- sql select 1-10的数字
SELECT V FROM ( VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) ) [1 to 10](V)
- maven 详解
Maven是基于项目对象模型(POM)的,可以通过一小段描述信息来管理项目构建,报告和文档的软件项目管理工具,是一种全新的项目构建方式,让我们的开发更加简单,高效.Maven主要做的是两件事: 开发规 ...

