python
复制代码
import re
import sys
from utils.ocr_images_pdf import cno_ocr
# 发文日期
def extract_date(text):
date_pattern = r'\d{4}年\d{1,2}月\d{1,2}日'
match = re.search(date_pattern, text) #re.search 或 re.match 方法时,match 对象包含了匹配的结果。如果你没有使用任何捕获组(即圆括号 ()),那么 match.group(0) 就是整个匹配的字符串。
return match.group(0) if match else None
# 部门级别
def extract_department_level(text):
level_pattern = r'市民政局.*?为(.+?)。'
match = re.search(level_pattern, text)
return match.group(1) if match else None
# 部门职责
def extract_duties(text):
# 提取主要职责部分
''''''
'''
\s 匹配任何空白字符,包括空格、制表符(\t)、换行符(\n)、回车符(\r)、垂直制表符(\v)和换页符(\f)。
\S 是 \s 的否定形式,匹配任何非空白字符。
\d 匹配任何数字字符,等价于 [0-9]。
. 表示任意字符
* 表示0个或多个字符
+ 表示1个或多个字符
'''
duties_pattern = r'主要职责是:([\s\S]*?)第四条'
match = re.search(duties_pattern, text)
if match:
duties_text = match.group(1).strip()
# 统一文本中的括号类型
# 将所有中英文括号替换为中文括号
duties_text = duties_text.replace('(', '(').replace(')', ')')
# print("Duties Text:\n", duties_text) # 调试用,查看提取的职责文本
# 定义可能的职责项标记
delimiters = [
'(一)', '(二)', '(三)', '(四)', '(五)',
'(六)', '(七)', '(八)', '(九)', '(十)',
'(十一)', '(十二)', '(十三)', '(十四)',
'(十五)', '(十六)'
]
duties_list = []
start_idx = 0
for delimiter in delimiters:
# 查找下一个职责项的起始位置
next_idx = duties_text.find(delimiter, start_idx)
if next_idx == -1:
break
# 提取当前职责项的内容
duty_content = duties_text[start_idx:next_idx].strip()
if duty_content:
duties_list.append(duty_content)
# 更新开始位置
start_idx = next_idx
# 处理最后一个职责项
last_duty_content = duties_text[start_idx:].strip()
if last_duty_content:
duties_list.append(last_duty_content)
# 去除可能的多余空白字符
formatted_duties = [duty.strip() for duty in duties_list if duty.strip()]
# print("Duties List:\n", formatted_duties)
return formatted_duties
return []
# 内设机构职责
def extract_institutions(text):
# 提取内设机构部分
institutions_pattern = r'第四条市民政局设下列内设机构:([\s\S]*?)第五条'
match = re.search(institutions_pattern, text)
if match:
institutions_text = match.group(1).strip()
# 统一文本中的括号类型
# 将所有中英文括号替换为中文括号
institutions_text = institutions_text.replace('(', '(').replace(')', ')')
# 定义可能的机构项标记
delimiters = [
'(一)', '(二)', '(三)', '(四)', '(五)',
'(六)', '(七)', '(八)', '(九)', '(十)',
'(十一)', '(十二)', '(十三)', '(十四)',
'(十五)', '(十六)'
]
institutions_dict = {}
start_idx = 0
for delimiter in delimiters:
# 查找下一个机构项的起始位置
next_idx = institutions_text.find(delimiter, start_idx)
if next_idx == -1:
break
# 提取当前机构项的内容
institution_content = institutions_text[start_idx:next_idx].strip() # 在Python中,.strip() 是一个字符串方法,用于删除字符串两端的空白字符(包括空格、制表符、换行符等)。如果需要,也可以指定要删除的字符。
if institution_content:
# 分割机构名称和职责描述
parts = institution_content.split('。', 1)
if len(parts) == 2:
name, desc = parts
institutions_dict[name.strip()] = desc.strip()
else:
name = parts[0].strip()
institutions_dict[name] = ''
# 更新开始位置
start_idx = next_idx + len(delimiter)
# 处理最后一个机构项
last_institution_content = institutions_text[start_idx:].strip()
if last_institution_content:
# 分割机构名称和职责描述
parts = last_institution_content.split('。', 1)
if len(parts) == 2:
name, desc = parts
institutions_dict[name.strip()] = desc.strip()
else:
name = parts[0].strip()
institutions_dict[name] = ''
# 去除可能的多余空白字符
formatted_institutions = {k: v.strip() for k, v in institutions_dict.items() if k.strip()}
return formatted_institutions
return {}
class db_sql:
"""
SQL语句
'INSERT INTO "compare_department_duty_summary"(department_name,department_duty,act_id,\
instance_id,summary_text,score,type, create_time, id) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)'
"""
department_duty_insert_sql = 'INSERT INTO "department_duty"(department_name,department_duty) VALUES (%s,%s)'
def extract_department_duty():
# 1 从PDF中提取文字内容
filePath = ''
save_dir = '../data/tmp_check_data/tem_test/'
text = cno_ocr(filePath, save_dir)
# 2 从文本内容中提取部门及其职责
# text = ('')
# 调用函数
# 提取日期
date = extract_date(text)
# 提取部门级别
department_level = extract_department_level(text)
# 提前部门职责
duties = extract_duties(text)
# 提取内设机构职责
institutions = extract_institutions(text)
# 提取编制信息
compilation = extract_compilation(text)
if "__main__" == __name__:
extract_department_duty()