由于上篇中的一个模块要求是将pdf中的文本内容给读取出来,因为大部分的毕设文档都是pdf格式的,而python自带的file I/O是没法实现从pdf格式的文件中读取内容的,因此需要导入第三方的package来完成。
另外,有个想法,但是还没实现,因为用处不大,可以先用pyPdf将一篇pdf中的某几页截取出来存到一个新的pdf文件,然后再用pdfminer进行转换,这样就可以弥补pdfminer不能只读取某一部分的pdf的缺陷。
pyPdf转换效率极低!!!
起初,google出来的结果是用pyPdf的,但是看了官方文档后,另外通过实验,发现效果不佳,主要原因是其对pdf文件的操作主要还是停留在page阶段。
后来,继续google,发现有人用pdfminer,看了后效果不错,不过那篇blog的代码实现部分有点小问题,就是转换完成后得到的txt文件未保留原来pdf中的格式,导致阅读效果不佳,但是,pdfminer本身有个小工具是pdf2txt,通过其实现的效果却是很理想的。想了很久,最后看了下pdf2txt的源代码,加上官方文档的说明,总算是得到较好的效果,具体实现如下:
'''
Created on 2011-12-27
@author: zhufeng
'''
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
def convert(filename):
outfile = filename+'.txt'
args = [filename]
rsrcmgr = PDFResourceManager()
outfp = file(outfile,'w')
device = TextConverter(rsrcmgr,outfp,codec='utf-8',laparams=LAParams())
for fname in args:
fp = file(fname, 'rb')
process_pdf(rsrcmgr, device, fp, pagenos = set(), maxpages = 0, password = '', check_extractable=True)
fp.close()
device.close()
outfp.close()
if __name__ == '__main__':
convert('g:/a.pdf')
ps.
希望继续深入,争取把图片也给抠出来,当然这样就得转换成doc文件,这里就需要涉及到编码问题,昨晚将出来的设置为doc格式,结果word识别就出现警告,好在用的是utf-8,没有影响最后的结果,但是毕竟还是出了个警告。
有兴趣的可以去pdfminer的官网瞧瞧哈,http://www.unixuser.org/~euske/python/pdfminer/index.html