利用 Python 处理PDF文件,进行关键词的识别与提取
【项目目标】
对大量的公司年报(PDF文件)进行关键词的识别与提取,判断文件是否含有“增值税留抵税额:XXXX”,并将这份文件的名字和此内容写入表格
【项目实现】
1.导入处理PDF的python库
1 import pdfplumber 2 import PyPDF2 3 import re 4 import os 5 import csv 6 import json
2.定义函数,得到PDF文件的页数
def get_pages(filename): with open(filename, 'rb', ) as fb: pages = PyPDF2.PdfFileReader(fb).getNumPages() return pages
3.因为增值税留抵税额这条信息一般出现在文件的后半部分,所以循环查找从100页开始,利用正则表达式查找关键词,并提取
def get_text(filename, pages): with pdfplumber.open(filename) as pdf: for i in range(100, pages-10): find = re.findall('增值税留抵税额(.*)', pdf.pages[i].extract_text()) if find: return find[0].strip().split(" ")
4.保存表格
def save(company_name, report_date, end_balance, start_balance): with open('annual_report.csv', 'a', newline="", encoding='utf-8') as f_csv: writer = csv.writer(f_csv) writer.writerow([company_name, report_date, end_balance, start_balance])
5.运行代码
if __name__ == '__main__': file_list = os.listdir() file_list.remove('.idea') file_list.remove('pdf6.py') file_list.remove('annual_report.csv') file_list_copy = file_list[::] for file in file_list_copy: name = re.findall(r'\d+(.*?):', file)[0] date = re.findall(r'(\d+年)年度报告', file)[0] pages_num = get_pages(file) if get_text(file, pages_num) is not None: try: end, start = get_text(file, pages_num) save(name, date, end, start) file_list.remove(file) except Exception as e: print(e) with open('rest.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(file_list, ensure_ascii=False))