• 利用 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))
  • 相关阅读:
    OpenERP Framework API存档
    OpenERP 7 picking order 继承需要注意的地方
    Unity战斗系统之AI自主决策
    简易2D横版RPG游戏制作
    UGUI之Canvas Group
    UGUI之Canvas和EventSystem
    NGUI之scroll view的制作和踩坑总结
    NGUI之Toggle实现单选框
    Unity中对象池的使用
    继承MonoBehaviour类的优缺点和相关报错
  • 原文地址:https://www.cnblogs.com/waterr/p/14457583.html
Copyright © 2020-2023  润新知