用win+python+pycharm 开发一个项目,负责档案审核,对已有的档案jpg格式,进行读取,提取图片中的信息,并建立关联性。对这些信息(三龄、二历、一身份)即 1.三龄:年龄、工龄、党龄,具体指出生日期、参加工作时间、入党时间。
-
二历:学历、工作经历。
-
一身份:干部身份。核对校验。
为了实现一个基于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)来提高文本提取的准确性。
- 界面化 :可以使用
Tkinter
或PyQt
等库为项目添加图形用户界面(GUI)。 - 数据库支持:可以将审核结果存储到数据库中,以便后续查询和管理。
通过以上步骤,你可以实现一个基本的档案审核系统,自动化处理档案图片并进行信息提取和验证。