前几天接到的一个需求,处理一堆doc和pdf,提取相应内容输出到xls里。经过一天的努力,正常的文件都顺利解决。还有一部分pdf是解决不了的,原因是pdf内部文字所使用的编码在本机没有。从pdf中提取出来的内容都会变成!@#$之类的符号(很明显是编码问题)。
试了很多方法,最后无奈选择OCR。
每一页的pdf是这个样子的:
首先使用了acrobat和pitstop插件把所有的图片都处理掉,这样做ocr的结果会精确。导出成图片:
测试了百度的API,一整页丢进去效果不是很好,所以拆分一下再丢。拆成这样:
1 #-*- coding: utf-8 -*- 2 import cv2 3 import os 4 5 6 def rename(path): 7 """ 8 批量改名,因为opencv不能传中文path 9 :param path: 10 :return: 11 """ 12 files = os.listdir(path) 13 for file in files: 14 tmp = file[7:] 15 os.rename(path+file, path+tmp) 16 17 18 TOTAL_PAGE_NUM = 200 19 ROOT_PATH = '../input/bug/2008_o/' 20 SAVE_PATH = '../input/bug/2008/' 21 22 def _cut_pic(id, from_path, save_path): 23 """ 24 切分成3部分,便于识别 25 :param from_path: 26 :param save_path: 27 :return: 28 """ 29 img = cv2.imread(from_path) 30 head = img[300:650, 1:2000] 31 body = img[660:1750, 1:2000] 32 tail = img[1760:2200, 1:2000] 33 cv2.imwrite(save_path+id+'_head.jpg', head) 34 cv2.imwrite(save_path+id+'_body.jpg', body) 35 cv2.imwrite(save_path+id+'_tail.jpg', tail) 36 37 def cut_pic(): 38 for i in range(10, TOTAL_PAGE_NUM): 39 file_path = ROOT_PATH + str(i).zfill(3) + '.jpg' 40 try: 41 with open(file_path, 'r') as fp: 42 fp.close() 43 _cut_pic(str(i).zfill(3), file_path, SAVE_PATH) 44 except IOError: 45 print 'No such file: ', file_path 46 47 if __name__ == '__main__': 48 cut_pic()