当前位置: 首页 > article >正文

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

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

为了实现一个基于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

然后在终端中运行:

pip install -r requirements.txt

4. 编写代码

4.1 image_processing.py
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
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
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
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)。
  • 数据库支持:可以将审核结果存储到数据库中,以便后续查询和管理。

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


http://www.kler.cn/a/567268.html

相关文章:

  • Qt常用控件之微调框QSpinBox
  • Web自动化之Selenium添加网站Cookies实现免登录
  • 金融支付行业技术侧重点
  • 解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨
  • 梯度下降法(Gradient Descent) -- 现代机器学习的血液
  • 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)后续部分代码优化
  • readline模块详解!!【Node.js】
  • Github 2025-03-01 开源项目月报 Top19
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump
  • 分布式数据存储:提升系统弹性与性能的技术之路
  • 使用vLLM部署DeepSeek-R1-Distill-Qwen-7B模型:从环境配置到高效推理
  • 在 SQLite 中使用 SpatiaLite 实现地理空间数据自动化读写
  • 考虑复杂遭遇场景下的COLREG,基于模型预测人工势场的船舶运动规划方法附Matlab代码
  • 【NLP面试八股-NLP常见面试问题详细回答】
  • 前端关于Cursor编辑器的了解与深度使用及对工作的便利
  • Spring Boot3+Vue3极速整合: 10分钟搭建DeepSeek AI对话系统(进阶)
  • MySQL锁分类
  • Oracle Enterprise Manager (OEM)安装部署
  • LeetCode热题100JS(20/100)第四天|​41. 缺失的第一个正数​|​73. 矩阵置零​|​54. 螺旋矩阵​|​48. 旋转图像​
  • Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存