|
@@ -7,7 +7,7 @@ import subprocess
|
|
|
from pprint import pprint
|
|
|
|
|
|
import logging
|
|
|
-logging.basicConfig(format='%(asctime)s: %(name)s: %(levelname)s: %(filename)s: %(funcName)s: %(message)s', level=logging.INFO)
|
|
|
+logging.basicConfig(format='%(asctime)s: %(name)s: %(levelname)s: %(filename)s: %(funcName)s: %(lineno)d: %(message)s', level=logging.INFO)
|
|
|
|
|
|
import pandas as pd
|
|
|
from docx import Document
|
|
@@ -58,7 +58,7 @@ block_rev = {1:"基本信息", 2:"求职意向", 3:"教育经历", 4:"工作经
|
|
|
|
|
|
# 基本信息(已完成)
|
|
|
def get_base_info(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
schema = {
|
|
|
'姓名': None,
|
|
|
}
|
|
@@ -103,7 +103,7 @@ def get_base_info(lines):
|
|
|
|
|
|
# 求职意向(已完成)
|
|
|
def get_job_intention(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
schema = {}
|
|
|
for line in lines:
|
|
|
regex = re.compile(r'\W{0,3}[::]\s+')
|
|
@@ -121,7 +121,7 @@ def get_job_intention(lines):
|
|
|
# 教育经历 (已停用)
|
|
|
# ner + 分词 (判断学校,时间,学历) 专业需要单独处理。
|
|
|
def get_edu_list_old(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
job_dict = {'edu_time_beg':'', 'edu_time_end':'', 'edu_name':'','edu_leval':'','edu_domain':'', 'edu_statue':0}
|
|
@@ -179,8 +179,8 @@ def get_edu_list_old(lines):
|
|
|
top_level = 18
|
|
|
remove_list = []
|
|
|
|
|
|
- logging.debug(_list_data)
|
|
|
- logging.debug(time_list)
|
|
|
+ logging.info(_list_data)
|
|
|
+ logging.info(time_list)
|
|
|
|
|
|
for ii in range(len(_list_data)):
|
|
|
for t in time_list:
|
|
@@ -201,7 +201,7 @@ def get_edu_list_old(lines):
|
|
|
break
|
|
|
#remove_list.append(i)
|
|
|
|
|
|
- logging.debug(_list_data)
|
|
|
+ logging.info(_list_data)
|
|
|
|
|
|
job_time = re.findall(re_txt_1, data_list[0])
|
|
|
if job_time:
|
|
@@ -340,7 +340,7 @@ def get_edu_list_old(lines):
|
|
|
|
|
|
# 教育经历改 (已完成)
|
|
|
def get_edu_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
edu_list = [{"Time":None, "startTime":None, "endTime":None, "edu_name":None, "edu_domain":None, "edu_level":None}]
|
|
|
regex_time = re.compile(r'((\d{4})[年\W]{1,2}(\d{1,2})[月\W]?[\d]{0,2})[至到\W]+((\d{4})[年\W]{1,2}(\d{1,2})[月\W]?)?([今])?|(\d{4})[至\W]+([\d今]{4})')
|
|
@@ -426,7 +426,7 @@ def get_edu_list(lines):
|
|
|
# 其中,时间是判断是否下一份工作情况的主要标识符之一。字符数量
|
|
|
# 时间类 数量词
|
|
|
def get_job_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
re_txt = '\d{4,4}\040{0,2}.\d+\040{0,2}.?\040{0,2}[\-–至-\—~]{1,2}\040{0,2}\d{4,4}\040{0,2}.\040{0,2}\d+.?|\d{4,4}.\d+.?\040{0,2}[\-–-—]{0,2}\040{0,2}至?今|\d{4,4}.\d+.?\040{0,2}[\-–-]{1,2}\040{0,2}现在|\d{4,4}年\d+月\-\d{4,4}年\d+月|\d{4,4}年\d+月\-\~|\d{4,4}年\d+月[\-\~-]至今|\d{4,4}-\d+\040{0,2}[-\~至]\040{0,2}\d{4,4}-\d+|\d{4,4}-\d+\~|\d{4,4}-\d+\[~-]至今|\d{4,4}-\d+\040{0,2}至今'
|
|
@@ -450,8 +450,8 @@ def get_job_list(lines):
|
|
|
elif len(year_list) == 1 and '至今' in lines[i]:
|
|
|
nums.append(i)
|
|
|
nums.append(len(lines))
|
|
|
- # logging.debug(nums)
|
|
|
- logging.debug('get_job_list :{}'.format(nums))
|
|
|
+ # logging.info(nums)
|
|
|
+ logging.info('get_job_list :{}'.format(nums))
|
|
|
for i in range(1, len(nums[:])):
|
|
|
job_dict = {'job_time':'', 'job_leval':'','job_company':'','job_content':''}
|
|
|
data_list = lines[nums[i-1]:nums[i]]
|
|
@@ -609,7 +609,7 @@ def get_job_list(lines):
|
|
|
# 项目经历 (已完成)
|
|
|
# 项目名称未知
|
|
|
def get_pro_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
pro_list = [{"Time":None,"startTime":None,"endTime":None,"pro_name":None,"job_leval":None,"job_company":None,"content":None,},]
|
|
|
regex = re.compile(r'((\d{4})[年\W]+(\d{1,2})[\W]?[\w]?)[至到\W]+((\d{4})[年\W]+(\d{1,2})[\W]?[\w]?)?([今])?')
|
|
@@ -651,7 +651,7 @@ def get_pro_list(lines):
|
|
|
# 培训经历 (已完成)
|
|
|
# ner + 分词 (机构名) 培训项目 时间
|
|
|
def get_cultivate_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
re_txt = '\d{4,4}.\d{1,2}.?\040{0,2}[\-–至-\—~]\040{0,2}\d{4,4}.\d{1,2}[月]?|\d+\.\d+\-至今|\d+年\d+月\-\d+年\d+月|\d+年\d+月\-\~|\d+年\d+月[\-\~]至今|\d+-\d+\040{0,2}[\~至]\040{0,2}\d+-\d+|\d+-\d+\~|\d+-\d+\~至今|\d+-\d+\040{0,2}至今|^\d{4,4}.\d{1,2}|\d{4,4}.'
|
|
@@ -682,7 +682,7 @@ def get_cultivate_list(lines):
|
|
|
elif _[1] == 'TIME' and len(_[1]) >= 4:
|
|
|
time_list.append(_[0])
|
|
|
#TIME
|
|
|
- logging.debug(data_line)
|
|
|
+ logging.info(data_line)
|
|
|
_list_data = re.split('\040+', data_line)
|
|
|
top_level = 22
|
|
|
end_index = 0
|
|
@@ -744,7 +744,7 @@ def get_cultivate_list(lines):
|
|
|
job_dict['cultivate_content'] = re.sub('培培训训内内容容::|培培训训内内容容::|培培训训内内容容', '培训内容:', ''.join(data_list[end_index:]))
|
|
|
if not job_dict['cultivate_name']:
|
|
|
job_dict['cultivate_name'] = org
|
|
|
- logging.debug(job_dict)
|
|
|
+ logging.info(job_dict)
|
|
|
job_list.append(job_dict)
|
|
|
continue
|
|
|
'''
|
|
@@ -779,7 +779,7 @@ def get_cultivate_list(lines):
|
|
|
|
|
|
# 语言能力
|
|
|
def get_lag_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
re_lan = re.compile(r'(\w+[语话])')
|
|
@@ -821,7 +821,7 @@ def get_fam_list(lines):
|
|
|
|
|
|
# 证书情况 时间+证书名称 (已完成)
|
|
|
def get_cet_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
re_txt = '\d+年\d+月|\d+-\d+|\d+\.\d+'
|
|
@@ -844,7 +844,7 @@ def get_cet_list(lines):
|
|
|
else:
|
|
|
continue
|
|
|
ls = re.split('\||\040+|\t+', l)
|
|
|
- logging.debug(ls)
|
|
|
+ logging.info(ls)
|
|
|
for l in ls:
|
|
|
if len(l) <= 3:
|
|
|
continue
|
|
@@ -856,7 +856,7 @@ def get_cet_list(lines):
|
|
|
|
|
|
# 获奖情况 时间+获奖名称 (已完成)
|
|
|
def get_prize_list(lines):
|
|
|
- logging.debug(lines)
|
|
|
+ logging.info(lines)
|
|
|
|
|
|
job_list = []
|
|
|
re_txt = '\d+年\d+月|\d+-\d+|\d{4,4}.\d{1,2}'
|
|
@@ -878,13 +878,13 @@ def get_prize_list(lines):
|
|
|
else:
|
|
|
continue
|
|
|
ls = re.split('\||\040+|\t+', l)
|
|
|
- logging.debug(ls)
|
|
|
+ logging.info(ls)
|
|
|
for l in ls:
|
|
|
if len(l) <= 3:
|
|
|
continue
|
|
|
cet_dict['prize_name'] = l.strip()
|
|
|
break
|
|
|
- logging.debug(cet_dict)
|
|
|
+ logging.info(cet_dict)
|
|
|
job_list.append(cet_dict)
|
|
|
return job_list
|
|
|
|
|
@@ -985,9 +985,9 @@ def check_word(path):
|
|
|
tables = doc.tables
|
|
|
|
|
|
if not tables:
|
|
|
- logging.debug("this is raw text")
|
|
|
+ logging.info("this is raw text")
|
|
|
read_from_word(doc)
|
|
|
- logging.debug("this is a Table")
|
|
|
+ logging.info("this is a Table")
|
|
|
|
|
|
prk = {"姓名":1, "性别":1, "出生年月":1, "民族":1, "籍贯":1, "户籍地":1, "政治面貌":1, "参加工作时间":1, "健康状况":1, "专业技术资格":1, "外语水平":9, "熟悉专业有何专长":8, "学历学位":1, "工作单位":1, "现任职务":1, "任职时间":1, "提职时间":1, "联系电话":1, "邮箱地址":1, "称谓":13, "工作单位及职务":1, "毕业时间、院校及专业":3,}
|
|
|
block = {
|
|
@@ -1107,7 +1107,7 @@ def read_from_pdf(path):
|
|
|
# 循环遍历列表,每次处理一个page的内容
|
|
|
# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,
|
|
|
for page in PDFPage.create_pages(doc):
|
|
|
- logging.debug('================ 新页面 ================')
|
|
|
+ logging.info('================ 新页面 ================')
|
|
|
interpreter.process_page(page)
|
|
|
layout = device.get_result()
|
|
|
r = parse_line_layout(layout)
|
|
@@ -1143,7 +1143,7 @@ def parse_table_from_pdf(path):
|
|
|
key = None
|
|
|
for key in block.keys():
|
|
|
if result.get(key):
|
|
|
- logging.debug({key: result[key]})
|
|
|
+ logging.info({key: result[key]})
|
|
|
console.print(result)
|
|
|
# for key in result.keys():
|
|
|
# for index, func in zip([1, 2, 3, 4, 5, 10, 11, 12], [get_base_info, get_job_intention, get_edu_list, get_job_list, get_pro_list, get_cet_list, get_prize_list, get_cultivate_list]):
|