用win+python+pycharm 开发一个项目,负责档案审核

用win+python+pycharm 开发一个项目,负责档案审核,对已有的档案jpg格式,进行读取,提取图片中的信息,并建立关联性。对这些信息(三龄、二历、一身份)即 1.三龄:年龄、工龄、党龄,具体指出生日期、参加工作时间、入党时间。

  1. 二历:学历、工作经历。

  2. 一身份:干部身份。核对校验。

为了实现一个基于Win+Python+PyCharm的档案审核项目,我们需要完成以下步骤:

1. 环境准备

  • 操作系统:Windows
  • 开发工具:PyCharm
  • 编程语言:Python
  • Python库
    • Pillow:用于处理图像文件。
    • pytesseract:用于从图像中提取文本(OCR)。
    • pandas:用于数据处理和分析。
    • datetime:用于日期时间处理。
    • re:用于正则表达式匹配。

2. 项目结构

project_directory/
│
├── main.py               # 主程序入口
├── requirements.txt      # 项目依赖
├── data/                 # 存放档案图片
│   ├── archive1.jpg
│   ├── archive2.jpg
│   └── ...
├── output/               # 存放审核结果
│   ├── results.csv
│   └── ...
└── utils/                # 工具函数
    ├── image_processing.py
    ├── data_extraction.py
    └── validation.py

3. 安装依赖

在PyCharm中打开项目后,创建一个requirements.txt文件,内容如下:

Pillow
pytesseract
pandas

然后在终端中运行:

bash 复制代码
pip install -r requirements.txt

4. 编写代码

4.1 image_processing.py
python 复制代码
from PIL import Image
import pytesseract

def extract_text_from_image(image_path):
    """从图像中提取文本"""
    image = Image.open(image_path)
    text = pytesseract.image_to_string(image, lang='chi_sim')  # 使用中文简体OCR
    return text
4.2 data_extraction.py
python 复制代码
import re
from datetime import datetime

def extract_personal_info(text):
    """从文本中提取个人信息"""
    info = {}
    
    # 提取出生日期
    birth_date_match = re.search(r'(\d{4})年(\d{1,2})月(\d{1,2})日', text)
    if birth_date_match:
        info['birth_date'] = datetime(int(birth_date_match.group(1)), int(birth_date_match.group(2)), int(birth_date_match.group(3)))
    
    # 提取参加工作时间
    work_start_match = re.search(r'参加工作时间:(\d{4})年(\d{1,2})月(\d{1,2})日', text)
    if work_start_match:
        info['work_start_date'] = datetime(int(work_start_match.group(1)), int(work_start_match.group(2)), int(work_start_match.group(3)))
    
    # 提取入党时间
    join_party_match = re.search(r'入党时间:(\d{4})年(\d{1,2})月(\d{1,2})日', text)
    if join_party_match:
        info['join_party_date'] = datetime(int(join_party_match.group(1)), int(join_party_match.group(2)), int(join_party_match.group(3)))
    
    # 提取学历
    education_match = re.search(r'学历:(\w+)', text)
    if education_match:
        info['education'] = education_match.group(1)
    
    # 提取工作经历
    work_experience_match = re.findall(r'(\d{4})年(\d{1,2})月至(\d{4})年(\d{1,2})月:(.+)', text)
    if work_experience_match:
        info['work_experience'] = [
            {
                'start_date': datetime(int(start_year), int(start_month), 1),
                'end_date': datetime(int(end_year), int(end_month), 1),
                'position': position
            } for start_year, start_month, end_year, end_month, position in work_experience_match
        ]
    
    # 提取干部身份
    cadre_status_match = re.search(r'干部身份:(\w+)', text)
    if cadre_status_match:
        info['cadre_status'] = cadre_status_match.group(1)
    
    return info
4.3 validation.py
python 复制代码
from datetime import datetime

def validate_personal_info(info):
    """验证个人信息是否合理"""
    errors = []
    
    # 验证年龄
    if 'birth_date' in info:
        age = (datetime.now() - info['birth_date']).days // 365
        if age < 18:
            errors.append("年龄不符合逻辑,可能未满18岁。")
    
    # 验证工龄
    if 'work_start_date' in info:
        work_years = (datetime.now() - info['work_start_date']).days // 365
        if work_years < 0:
            errors.append("工龄不符合逻辑,可能参加工作时间晚于当前日期。")
    
    # 验证党龄
    if 'join_party_date' in info:
        party_years = (datetime.now() - info['join_party_date']).days // 365
        if party_years < 0:
            errors.append("党龄不符合逻辑,可能入党时间晚于当前日期。")
    
    # 验证学历和工作经历
    if 'education' in info and 'work_experience' in info:
        for experience in info['work_experience']:
            if experience['start_date'] > experience['end_date']:
                errors.append(f"工作经历时间段不符合逻辑:{experience['start_date']} 至 {experience['end_date']}")
    
    return errors
4.4 main.py
python 复制代码
import os
import pandas as pd
from utils.image_processing import extract_text_from_image
from utils.data_extraction import extract_personal_info
from utils.validation import validate_personal_info

def main():
    data_folder = 'data'
    output_folder = 'output'
    results = []
    
    # 遍历数据文件夹中的所有档案图片
    for filename in os.listdir(data_folder):
        if filename.endswith('.jpg'):
            image_path = os.path.join(data_folder, filename)
            
            # 提取文本
            text = extract_text_from_image(image_path)
            
            # 提取个人信息
            info = extract_personal_info(text)
            
            # 验证个人信息
            errors = validate_personal_info(info)
            
            # 保存结果
            results.append({
                'filename': filename,
                'info': info,
                'errors': errors
            })
    
    # 将结果保存到CSV文件
    df = pd.DataFrame(results)
    df.to_csv(os.path.join(output_folder, 'results.csv'), index=False)

if __name__ == "__main__":
    main()

5. 运行项目

在PyCharm中运行main.py,程序将自动读取data文件夹中的所有档案图片,提取信息并进行验证,最后将结果保存到output/results.csv文件中。

6. 结果分析

打开output/results.csv文件,查看审核结果。每一行对应一个档案图片,info列包含提取的个人信息,errors列包含验证过程中发现的错误信息。

7. 扩展与优化

  • OCR优化:可以尝试使用更高级的OCR引擎(如Tesseract的深度学习模型)或外部API(如Google Cloud Vision)来提高文本提取的准确性。
  • 界面化 :可以使用TkinterPyQt等库为项目添加图形用户界面(GUI)。
  • 数据库支持:可以将审核结果存储到数据库中,以便后续查询和管理。

通过以上步骤,你可以实现一个基本的档案审核系统,自动化处理档案图片并进行信息提取和验证。

相关推荐
洁洁!32 分钟前
利用 Python 爬虫进行跨境电商数据采集
开发语言·爬虫·python
TU^37 分钟前
数据结构~哈希
开发语言·数据结构·c++·散列表
小蟹dal42 分钟前
爬取网易云歌单信息并分析
大数据·python·数据挖掘·数据分析
卜及中1 小时前
【Go语言快速上手】第一部分:函数与错误处理
开发语言·后端·算法·golang
大猫会长1 小时前
.bash_profile一些笔记
开发语言·bash
eqwaak01 小时前
2025年2月28日全球科技信息差:技术革新、市场震荡与认知重构
开发语言·人工智能·科技·学习·重构
一匹电信狗2 小时前
C/C++内存管理:深入理解new和delete
c语言·开发语言·c++·ide·算法·visualstudio
白白糖2 小时前
Day 52 卡玛笔记
python·算法·力扣
zhongpz2 小时前
数据结构--队列(C语言实现)
c语言·开发语言·数据结构
MYX_3092 小时前
Python 编程题 第四节:斐波那契数列、列表的复制、暂停后输出、成绩评级、统计字符
开发语言·python·学习