# -*- coding: utf-8 -*-
import sys
import os
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice, TagExtractor
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams
import time
from multiprocessing.dummy import Pool as ThreadPool
import re
import os
from os.path import join, getsize
import sys
# from pyspark import SparkContext
# sc = SparkContext("local[*]","First Spark App")
# from pdfminer.image import ImageWriter
# sys.stdout=open(r'F:\output.txt','w') #将打印信息输出在相应的位置下
def pdfTotxt(root,names):
args=map(lambda y:os.path.join(root,names[y]),range(len(names)))
# debug option
debug = 0
# input option
password = ''
pagenos = set()
maxpages = 0
# output option
imagewriter = None
rotation = 0
layoutmode = 'normal'
codec = 'utf-8'
pageno = 1
scale = 1
caching = False
showpageno = True
laparams = LAParams()
output_paths=sys.argv[3]
for fname in args:
try:
fp = file(fname, 'rb')
outfile = output_paths+'\\'+fname.split('\\')[-1].replace('.pdf','').replace('.PDF','')+'.txt'
outfp = file(outfile, 'w')
rsrcmgr = PDFResourceManager(caching=caching)
device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams,
imagewriter=imagewriter)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.get_pages(fp, pagenos,
maxpages=maxpages, password=password,
caching=caching, check_extractable=True):
page.rotate = (page.rotate+rotation) % 360
interpreter.process_page(page)
fp.close()
device.close()
outfp.close()
except Exception, e:
print "Exception:%s",e
return
def title_for_split_first(data,file_name):
'''
:param data: 这里为寻找对文本进行切割的关键标题信息,第一个。
:param file_name:文件名
:return:bad_file_name 如果存在问题,则返回。
:return:data_with_split为第一个关键信息切分后的文件
'''
bad_file_name=''
Mode={}
data_with_split=[]
good_match=0
Mode[0]='公司基本情况简介'
if len(re.findall(re.compile(Mode[0]),data))>=2:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[:2]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
elif len(re.findall(re.compile(Mode[0]),data))==1:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
else:
Mode[0]='公司基本情况介绍|公司情况简介|公司基本情況|公司基本情况|公司基本情況簡介|公褖司基本情况简介'
if len(re.findall(re.compile(Mode[0]),data))>=2:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[:2]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
elif len(re.findall(re.compile(Mode[0]),data))==1:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
else:
Mode[0]='公司简况|集团简介和基本信息|公司基本本情况|公司简介|基本情况简介'
if len(re.findall(re.compile(Mode[0]),data))>=2:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[:2]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
if len(re.findall(re.compile(Mode[0]),data))==1:
good_match=1
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
if good_match==0:
bad_file_name=file_name
data_with_split.append('')
data_with_split.append(data)
return bad_file_name,data_with_split
def title_for_split_second(data,file_name):
bad_file_name=''
data_with_split=[]
Mode={}
good_match=0
Mode[0]='会计数据和业务数据摘要|会计数据与业务数据摘要|会计数据和财务指标摘要|会计数据及业务数据摘要|会计数据和财务数据摘要'
if len(re.findall(re.compile(Mode[0]),data))>=1:
good_match=1
if len(re.split(re.compile(Mode[0]),data)[0])<=150:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
else:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
else:
Mode[0]='会计数据及业务数据摘要|会计数据和业务务数据摘要|会计数据摘要及业务数据摘要|财务摘要|财务数据和业务数据摘要|财务数据与业务数据摘要|会计数据和业务数据|主要财务数据与指标|会计资料和业务资料摘要|会计数据和财务指标'
if len(re.findall(re.compile(Mode[0]),data))>=1:
good_match=1
if len(re.split(re.compile(Mode[0]),data)[0])<=150:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
else:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
else:
Mode[0]='財務概要|会计数据和視业惄务数据摘要悹|主要會計數據和財務指標|會計數據和業務數據摘要|财务和经营数据摘要|会计数据与业务资料|会计数据和业务摘要|主要财务数据和指标|会计数据和和业务务数据摘要'
if len(re.findall(re.compile(Mode[0]),data))>=1:
good_match=1
if len(re.split(re.compile(Mode[0]),data)[0])<=150:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[2:]))
else:
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[0]))
data_with_split.append(''.join(re.split(re.compile(Mode[0]),data)[1:]))
if good_match==0:
data_with_split.append('')
data_with_split.append(data)
bad_file_name=file_name
return bad_file_name,data_with_split
def title_for_split_other(data,file_name,mode):
bad_file_name=''
good_match=0
data_with_split=[]
if len(re.findall(re.compile(mode),data))>=1:
good_match=1
data_with_split.append(''.join(re.split(re.compile(mode),data)[0]))
data_with_split.append(''.join(re.split(re.compile(mode),data)[1:]))
if good_match==0:
data_with_split.append('')
data_with_split.append(data)
bad_file_name=file_name
return bad_file_name,data_with_split
# ''.join(re.split(re.compile(mode),data)[1:])
def main():
PDF2TXT=False
Split_txt=True
pdf2txt=sys.argv[1]
if int(pdf2txt)==1:
PDF2TXT=True
评论0