#!/usr/bin/python # coding:utf-8 from LAC import LAC import re import copy import pdfplumber lac = LAC(mode='lac') def getText_pdf(filename): """将pdf读成text""" with pdfplumber.open(filename) as pdf_file: content = '' for i in range(len(pdf_file.pages)): page_text = pdf_file.pages[i] page_content = page_text.extract_text() if page_content: content = content + page_content + "\n" return content def fmt_txt(chk_str): true_chkStr = chk_str regex = re.compile(r":\n*") regex1 = re.compile(r":\n*") true_chkStr = regex.sub(':', true_chkStr) true_chkStr = regex1.sub(':', true_chkStr) dict_chk = { "interview_name": "", "interview_type": 1, "interview_sign": 0, "hope_money": "", "feedback": 0, "interview_round": 0, "name": "", "phone": "", "job_name": "", "hr_name": "", "work_exp": 0, "interview_stage": 0, "owner_name": 2, "education": 1, "work_undergo": [], "project_undergo": [], "work_list": [], "school": "", "at_school": "", "specialty": "", "specialty_do": [], "mmended_state": 0, "mail": "", "account": "", "id_card": "", "gender": "", "age": 0, "gam": "", "interview_state": 1, "counts": 1, "nation": "汉", "review": "", "upgrade": [], "come_time": "", "now_money": "", "men_state": 1, "teacher_state": 1, "teacher_back": 1, "offer_state": 1, "offer_exam_state": 1, "notice_state": 1, "pass_why": 0, "pass_text": "", "file_url": '', "now_address": '', "birthday": '', } # 姓名 chk_name = r'[赵|钱|孙|李|周|吴|郑|王|冯|陈|褚|卫|蒋|沈|韩|杨|朱|秦|尤|许|何|吕|施|张|孔|曹|严|华|金|魏|陶|姜|戚|谢|邹|喻|柏|水|窦|章|云|苏|潘|葛|奚|范|彭|郎|鲁|韦|昌|马|苗|凤|花|方|俞|任|袁|柳|酆|鲍|史|唐|费|廉|岑|薛|雷|贺|倪|汤|滕|殷|罗|毕|郝|邬|安|常|乐|于|时|傅|皮|卞|齐|康|伍|余|元|卜|顾|孟|平|黄|和|穆|萧|尹|姚|邵|湛|汪|祁|毛|禹|狄|米|贝|明|臧|计|伏|成|戴|谈|宋|茅|庞|熊|纪|舒|屈|项|祝|董|梁|杜|阮|蓝|闵|席|季|麻|强|贾|路|娄|危|江|童|颜|郭|梅|盛|林|刁|锺|徐|邱|骆|高|夏|蔡|田|樊|胡|凌|霍|虞|万|支|柯|昝|管|卢|莫|经|房|裘|缪|干|解|应|宗|丁|宣|贲|邓|郁|单|杭|洪|包|诸|左|石|崔|吉|钮|龚|程|嵇|邢|滑|裴|陆|荣|翁|荀|羊|於|惠|甄|麴|家|封|芮|羿|储|靳|汲|邴|糜|松|井|段|富|巫|乌|焦|巴|弓|牧|隗|山|谷|车|侯|宓|蓬|全|郗|班|仰|秋|仲|伊|宫|宁|仇|栾|暴|甘|钭|历|戎|祖|武|符|刘|景|詹|束|龙|叶|幸|司|韶|郜|黎|溥|印|宿|白|怀|蒲|邰|从|鄂|索|咸|籍|卓|蔺|屠|蒙|池|乔|阳|郁|胥|能|苍|双|闻|莘|党|翟|谭|贡|劳|逄|姬|申|扶|堵|冉|宰|郦|雍|却|桑|桂|濮|牛|寿|通|边|扈|燕|冀|浦|尚|农|温|别|庄|晏|柴|瞿|充|慕|连|茹|习|宦|艾|鱼|容|向|古|易|慎|戈|廖|庾|终|暨|居|衡|步|都|耿|满|弘|匡|国|文|寇|广|禄|阙|东|欧|沃|利|蔚|越|夔|隆|师|巩|厍|聂|晁|勾|敖|融|冷|訾|辛|阚|那|简|饶|空|曾|毋|沙|乜|养|鞠|须|丰|巢|关|蒯|相|荆|红|游|竺|权|司马|上官|欧阳|夏侯|诸葛|闻人|东方|赫连|皇甫|尉迟|公羊|澹台|公冶宗政|濮阳|淳于|单于|太叔|申屠|公孙|仲孙|轩辕|令狐|钟离|宇文|长孙|慕容|司徒|司空|召|有|舜|岳|黄辰|寸|贰|皇|侨|彤|竭|端|赫|实|甫|集|象|翠|狂|辟|典|良|函|芒|苦|其|京|中|夕|乌孙|完颜|富察|费莫|蹇|称|诺|来|多|繁|戊|朴|回|毓|鉏|税|荤|靖|绪|愈|硕|牢|买|但|巧|枚|撒|泰|秘|亥|绍|以|壬|森|斋|释|奕|姒|朋|求|羽|用|占|真|穰|翦|闾|漆|贵|代|贯|旁|崇|栋|告|休|褒|谏|锐|皋|闳|在|歧|禾|示|是|委|钊|频|嬴|呼|大|威|昂|律|冒|保|系|抄|定|化|莱|校|么|抗|祢|綦|悟|宏|功|庚|务|敏|捷|拱|兆|丑|丙|畅|苟|随|类|卯|俟|友|答|乙|允|甲|留|尾|佼|玄|乘|裔|延|植|环|矫|赛|昔|侍|度|旷|遇|偶|前|由|咎|塞|敛|受|泷|袭|衅|叔|圣|御|夫|仆|镇|藩|邸|府|掌|首|员|焉|戏|可|智|尔|凭|悉|进|笃|厚|仁|业|肇|资|合|仍|九|衷|哀|刑|俎|仵|圭|夷|徭|蛮|汗|孛|乾|帖|罕|洛|淦|洋|邶|郸|郯|邗|邛|剑|虢|隋|蒿|茆|菅|苌|树|桐|锁|钟|机|盘|铎|斛|玉|线|针|箕|庹|绳|磨|蒉|瓮|弭|刀|疏|牵|浑|恽|势|世|仝|同|蚁|止|戢|睢|冼|种|涂|肖|己|泣|潜|卷|脱|谬|蹉|赧|浮|顿|说|次|错|念|夙|斯|完|丹|表|聊|源|姓|吾|寻|展|出|不|户|闭|才|无|书|学|愚|本|性|雪|霜|烟|寒|少|字|桥|板|斐|独|千|诗|嘉|扬|善|揭|祈|析|赤|紫|青|柔|刚|奇|拜|佛|陀|弥|阿|素|长|僧|隐|仙|隽|宇|祭|酒|淡|塔|琦|闪|始|星|南|天|接|波|碧|速|禚|腾|潮|镜|似|澄|潭|謇|纵|渠|奈|风|春|濯|沐|茂|英|兰|檀|藤|枝|检|生|折|登|驹|骑|貊|虎|肥|鹿|雀|野|禽|飞|节|宜|鲜|粟|栗|豆|帛|官|布|衣|藏|宝|钞|银|门|盈|庆|喜|及|普|建|营|巨|望|希|道|载|声|漫|犁|力|贸|勤|革|改|兴|亓|睦|修|信|闽|北|守|坚|勇|汉|练|尉|士|旅|五|令|将|旗|军|行|奉|敬|恭|仪|母|堂|丘|义|礼|慈|孝|理|伦|卿|问|永|辉|位|让|尧|依|犹|介|承|市|所|苑|杞|剧|第|零|谌|招|续|达|忻|六|鄞|战|迟|候|宛|励|粘|萨|邝|覃|辜|初|楼|城|区|局|台|原|考|妫|纳|泉|老|清|德|卑|过|麦|曲|竹|百|福|言|第五|佟|爱|年|笪|谯|哈|墨|连|南宫|赏|伯|佴|佘|牟|商|西门|东门|左丘|梁丘|琴|后|况|亢|缑|帅|微生|羊舌|海|归|呼延|南门|东郭|百里|钦|鄢|汝|法|闫|楚|晋|谷梁|宰父|夹谷|拓跋|壤驷|乐正|漆雕|公西|巫马|端木|颛孙|子车|督|仉|司寇|亓官|三小|鲜于|锺离|盖|逯|库|郏|逢|阴|薄|厉|稽|闾丘|公良|段干|开|光|操|瑞|眭|泥|运|摩|伟|铁|迮][\u4e00-\u9fa5]{1,2}' name = re.findall(chk_name, true_chkStr, re.M) if name: name_txt = ','.join(name) rank_result = lac.run(name_txt) for index, i in enumerate(rank_result[1]): if i == 'PER': dict_chk['name'] = rank_result[0][index] break # 性别 gender = re.findall(r'男|女', true_chkStr, re.M) if gender: dict_chk['gender'] = gender[0] # 电话 phone = re.findall(r"(?<=\D)1\d{10}", true_chkStr, re.M) if phone: dict_chk['phone'] = phone[0] # 邮箱 email = re.findall(r'[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?com', true_chkStr, re.M) if email: dict_chk['mail'] = email[0] else: email1 = re.findall(r'<[a-zA-Z]+\s[a-zA-Z]+>\s[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?org', true_chkStr, re.M) # mail if email1: dict_chk['mail'] = email1[0] # 应聘职位 job = re.findall(r'职位.*?\n', true_chkStr, re.M) if job: job_str = job[0] if '/' in job_str: job_list = job_str.split('/') job_str = job_list[0] job_name = job_str.split(':')[-1] job_name = job_name.replace('\n', '') job_name.strip() dict_chk['job_name'] = job_name # 学历 education_list = ['大专', '本科', '博士', '硕士'] for education in education_list: if education in true_chkStr: dict_chk['education'] = education break # 工作经历 work_exp = re.findall(r'.*?工作经验.*?\n', true_chkStr, re.M) if work_exp: work_exp_str = work_exp[0].replace('\n', '') if '|' in work_exp_str: work_exp_list = work_exp_str.split('|') else: work_exp_list = work_exp_str.split(' ') for i in work_exp_list: if '工作经验' in i: true_work_exp_str = i.strip().replace('?', '') dict_chk['work_exp'] = int(true_work_exp_str.split('年工作经验')[0]) break else: work_exp = re.findall(r'.*?工作年限.*?\n', true_chkStr, re.M) # 工作经验 if work_exp: work_exp_str = work_exp[0].replace('\n', '') if ':' in work_exp_str: dict_chk['work_exp'] = int(work_exp_str.split(':')[-1].strip().split('年')[0]) else: dict_chk['work_exp'] = 0 # 毕业学校, 专业, 毕业时间, 学历 school = re.findall(r'.*?学院.*?\n', true_chkStr, re.M) if school: school_str = school[0].replace('\n', '').strip() if ' ' in school_str and ':' not in school_str: school_list = school_str.split(' ') else: if ':' in school_str: school_list1 = school_str.split(':') for index, i in enumerate(school_list1): if i.endswith('院校'): school_list = [school_list1[index + 1], school_list1[index + 1]] else: school_list = [school_str] else: school = re.findall(r'.*?大学.*?\n', true_chkStr, re.M) if school: school_str = school[0].replace('\n', '').strip() if ':' in school_str: school_list = school_str.split(':') else: school_list = [school_str] else: school_list = [] if len(school_list) <= 1: new_chk_str = true_chkStr.split('教育经历')[-1] if new_chk_str: bold = re.compile(r'\n') true_chk = bold.sub(' ', new_chk_str, count=3) school_str1 = re.findall(r'.*?学院.*?\n', true_chk, re.M)[0].replace('\n', '') school_list = school_str1.split(' ') if school_list: time_index = -1 for index, i in enumerate(school_list): chk_i = i.strip() if chk_i in ['/', '|']: continue if time_index != -1 and index <= time_index: continue if '学院' in chk_i or '大学' in chk_i: dict_chk['school'] = chk_i.strip().replace('?', '') continue if chk_i.replace('?', '').strip() in education_list: dict_chk['education'] = chk_i.replace('?', '').strip() continue # 包含数字 if bool(re.search(r'\d', chk_i)): if '-' in chk_i: dict_chk['at_school'] = chk_i time_index = index continue if '年' in chk_i: continue time_index = index + 2 dict_chk['at_school'] = (school_list[index] + school_list[index + 1] + school_list[index + 2]).replace( '.', '/') continue if chk_i: dict_chk['specialty'] = chk_i.replace('?', '').strip() continue else: dict_chk.update({ 'school': '', 'graduate_time': '', 'at_school': '', 'specialty': '', }) if dict_chk.get('at_school', ''): dict_chk['graduate_time'] = dict_chk['at_school'].split('-')[-1].strip() # 期望薪资 hope_money = re.findall(r'.*?薪资.*?\n', true_chkStr, re.M) if hope_money: hope_list = hope_money[0].split('薪资:') dict_chk['hope_money'] = hope_list[-1].replace('\n', '').strip() else: dict_chk['hope_money'] = '' # 身份证号r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]" # ^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$ # ^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$ id_card = re.findall( r"[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]", true_chkStr, re.M) if id_card: dict_chk['id_card'] = id_card[0] else: dict_chk['hope_money'] = '' # 所在地 account = re.findall(r'.*?地:.*?\n', true_chkStr, re.M) if account: account_str = account[0] if '|' in account_str: account_list = account_str.split('|') dict_chk['account'] = account_list[0].split(':')[-1].strip('\n') dict_chk['accounts'] = account_list[1].split(':')[-1].strip('\n') else: dict_chk['account'] = account_str.split(':')[-1].strip('\n') dict_chk['accounts'] = '' else: dict_chk.update({ 'account': '', 'accounts': '' }) # 年龄 age = re.findall(r'.*?龄:.*?\n', true_chkStr, re.M) if age: age_str = age[0].replace(' ', '').replace('\n', '') dict_chk['age'] = int(age_str.split(':')[-1]) else: age1 = re.findall(r'[0-9]{2}.*?岁', true_chkStr, re.M) if age1: age1_s = age1[0].replace(' ', '') dict_chk['age'] = int(age1_s.split('岁')[0]) else: dict_chk['age'] = 20 # 民族 nation = re.findall(r'.*?族:.*?\n', true_chkStr, re.M) if nation: nation_str = nation[0].replace(' ', '').replace('\n', '') dict_chk['nation'] = int(nation_str.split(':')[-1]) else: dict_chk['nation'] = '汉' if '工作经历' not in true_chkStr: work_undergo_str = true_chkStr.split('工作经验')[-1] else: work_undergo_str = true_chkStr.split('工作经历')[-1] work_undergo_str1 = work_undergo_str.split('教育经历')[0] work_str2 = work_undergo_str1.strip().strip('\n') project_undergo = '' if '项目经历' in work_str2: project_undergo = work_str2.split('项目经历')[1] work_str2 = work_str2.split('项目经历')[0] else: if '项目名称' in work_str2: project_undergo = ''.join(i for i in work_str2.split('项目名称')[1:]) work_str2 = work_str2.split('项目名称')[0] project_undergo2 = project_undergo.strip().strip('\n') str_2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', work_str2) project_list = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_undergo2) work_list = [] project_undergo_list = [] if project_list[0] == '': project_list = project_list[1:] # 数字开头 if project_list[0][0].isdigit() and project_list[0][1] != '、': index2 = -1 new_str_list1 = [] for index, i in enumerate(project_list): if index <= index2: continue if not i: continue if i.strip() == '-': index2 = index + 2 new_str = project_list[index - 1] + i + project_list[index + 1] + project_list[index + 2] new_str_list1.append(new_str) continue if i.strip() != '-' and '-' in i: index2 = index new_str = project_list[index - 1] + i new_str_list1.append(new_str) continue if new_str_list1: for project_str in new_str_list1: project_name_time_str = project_str.split('\n')[0] dict_project = { 'name': '', 'time': '', 'comment': '', 'work': '', 'duty': '', } project_name_time_str2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_name_time_str) if project_name_time_str2: for index, p_str in enumerate(project_name_time_str2): if not p_str: continue if p_str[0].isdigit(): dict_project['time'] = (p_str + project_name_time_str2[index + 1] + project_name_time_str2[ index + 2]).replace('.', '/') dict_project['name'] = project_name_time_str2[index + 3] break project_chk_str2 = project_str.split(project_name_time_str)[-1] project_chk_str2_list = re.split('(:|:)', project_chk_str2) if project_chk_str2_list: index3 = -1 start_name = '' new_p_chk_list = [] for index, p_str3 in enumerate(project_chk_str2_list): if index <= index3: continue if p_str3 in [':', ':']: if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( project_chk_str2_list[index + 1]) <= 5: continue start_name = project_chk_str2_list[index + 1].split('\n')[-1] if start_name: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1].split(start_name)[0] else: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1] new_p_chk_list.append(new_p_str) if new_p_chk_list: for p_str_true in new_p_chk_list: if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: dict_project['work'] += re.split('[:|:]', p_str_true)[-1] continue if '项目描述' in p_str_true or '功能介绍' in p_str_true: dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] continue if '职责' in p_str_true: dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] continue project_undergo_list.append(dict_project) # 项目名开头 else: if project_undergo2.startswith(':') or project_undergo2.startswith(':'): dict_project = { 'name': '', 'time': '', 'comment': '', 'work': '', 'duty': '', } new_str_list1 = [] index2 = -1 for index, i in enumerate(project_list): if not i[0].isdigit() and i != '-': if index <= index2: continue index2 = index + 3 if len(project_list) < index2 + 1: break else: new_str = i + project_list[index + 1] + project_list[index + 2] + project_list[index + 3] new_str_list1.append(new_str) if new_str_list1: for project_chk_str2 in new_str_list1: project_chk_str2_list = re.split('(:|:)', project_chk_str2) if project_chk_str2_list: index3 = -1 new_p_chk_list = [] for index, p_str3 in enumerate(project_chk_str2_list): if index <= index3: continue if p_str3 in [':', ':']: if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( project_chk_str2_list[index + 1]) <= 10: continue start_name = project_chk_str2_list[index + 1].split('\n')[-1] if start_name: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1].split(start_name)[0] else: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1] new_p_chk_list.append(new_p_str) if new_p_chk_list: dict_project['name'] = re.split('[:|:]', new_p_chk_list[0])[-1] for p_str_true in new_p_chk_list: if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: dict_project['work'] += re.split('[:|:]', p_str_true)[-1] continue if '项目描述' in p_str_true or '功能介绍' in p_str_true: dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] continue if '职责' in p_str_true: dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] continue project_undergo_list.append(dict_project) else: index2 = -1 name2 = '' new_str_list1 = [] for index, i in enumerate(project_list): if index <= index2: continue if not i: continue if i.strip() == '-': index2 = index + 2 if not name2: name3 = project_list[index + 2].split('\n')[-1] new_str = project_list[index - 2] + project_list[index - 1] + i + project_list[index + 1] + \ project_list[index + 2].split(name3)[0] name2 = name3 else: name3 = project_list[index + 2].split('\n')[-1] if name2: new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ project_list[index + 2].split(name3)[0] else: new_str = name2 + project_list[index - 1] + i + project_list[index + 1] + \ project_list[index + 2] name2 = name3 new_str_list1.append(new_str) continue if i.strip() != '-' and '-' in i: index2 = index if not name2: name3 = i.split('\n')[-1] new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] name2 = name3 else: name3 = i.split('\n')[-1] new_str = str_2[index - 2] + str_2[index - 1] + i.split(name3)[0] name2 = name3 new_str_list1.append(new_str) continue if new_str_list1: for project_str in new_str_list1: project_name_time_str = project_str.split('\n')[0] dict_project = { 'name': '', 'time': '', 'comment': '', 'work': '', 'duty': '', } project_name_time_str2 = re.split('([0-9]{4}[/|.][0-9]{1,2})', project_name_time_str) if project_name_time_str2: for index, p_str in enumerate(project_name_time_str2): if not p_str: continue if p_str[0].isdigit(): if u'\u4e00' <= project_name_time_str2[index + 1].strip()[0] <= u'\u9fff': dict_project['time'] = p_str.replace('.', '/') dict_project['name'] = project_name_time_str2[index + 1].split(' ')[-2] dict_project['work'] = project_name_time_str2[index + 1].split(' ')[-1] break else: dict_project['time'] = ( p_str + project_name_time_str2[index + 1] + project_name_time_str2[ index + 2]).replace('.', '/') dict_project['name'] = project_name_time_str2[index - 1] break project_chk_str2 = project_str.split(project_name_time_str)[-1] project_chk_str2_list = re.split('(:|:)', project_chk_str2) if project_chk_str2_list: index3 = -1 start_name = '' new_p_chk_list = [] for index, p_str3 in enumerate(project_chk_str2_list): if index <= index3: continue if p_str3 in [':', ':']: if not re.split('[\n|\t]', project_chk_str2_list[index + 1])[0].strip() and len( project_chk_str2_list[index + 1]) <= 10: continue start_name = project_chk_str2_list[index + 1].split('\n')[-1] if start_name: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1].split(start_name)[0] else: new_p_str = project_chk_str2_list[index - 1].split('\n')[-1] + p_str3 + \ project_chk_str2_list[index + 1] new_p_chk_list.append(new_p_str) if new_p_chk_list: for p_str_true in new_p_chk_list: if '开发环境' in p_str_true or '开发工具' in p_str_true or '开发技术' in p_str_true or '模块' in p_str_true: dict_project['work'] += re.split('[:|:]', p_str_true)[-1] continue if '项目描述' in p_str_true or '功能介绍' in p_str_true: dict_project['comment'] += re.split('[:|:]', p_str_true)[-1] continue if '职责' in p_str_true: dict_project['duty'] += re.split('[:|:]', p_str_true)[-1] continue project_undergo_list.append(dict_project) dict_chk['project_undergo'] = project_undergo_list # 数字开头 if work_str2[0].isdigit(): index1 = -1 new_str_list = [] for index, i in enumerate(str_2): if index <= index1: continue if not i: continue if i.strip() == '-': index1 = index + 2 new_str = str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2] new_str_list.append(new_str) continue if i.strip() != '-' and '-' in i: index1 = index new_str = str_2[index - 1] + i new_str_list.append(new_str) continue if new_str_list: dict_chk['work_undergo'] = new_str_list for work_str in new_str_list: new_str_list1 = work_str.split('工作描述') work_dict = { 'company_name': '', 'time': '', 'position_name': '', 'duty': new_str_list1[-1], } new_str_list2 = new_str_list1[0].split('\n') if '?' in new_str_list1[0]: work_dict['time'] = new_str_list2[0].split('??')[0].replace('.', '/') work_dict['company_name'] = new_str_list2[0].split('??')[1] work_dict['position_name'] = new_str_list2[1].split('|')[0] else: work_dict['time'] = new_str_list2[0].split(' ')[0].replace('.', '/') work_dict['company_name'] = new_str_list2[0].split(' ')[1] work_dict['position_name'] = new_str_list2[1].split('|')[0] work_list.append(work_dict) # 公司名开头 else: index1 = -1 name = '' new_str_list = [] for index, i in enumerate(str_2): if index <= index1: continue if not i: continue if i.strip() == '-': index1 = index + 2 if not name: name1 = str_2[index + 2].split('\n')[-1] new_str = str_2[index - 2] + str_2[index - 1] + i + str_2[index + 1] + \ str_2[index + 2].split(name1)[0] name = name1 else: name1 = str_2[index + 2].split('\n')[-1] if name1: new_str = name + str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2].split(name1)[0] else: new_str = name + str_2[index - 1] + i + str_2[index + 1] + str_2[index + 2] name = name1 new_str_list.append(new_str) continue if i.strip() != '-' and '-' in i: index1 = index if not name: name1 = i.split('\n')[-1] new_str = str_2[index - 2] + str_2[index - 1] + i.split(name1)[0] name = name1 else: name1 = i.split('\n')[-1] new_str = str_2[index - 2] + str_2[index - 1] + i.split(name1)[0] name = name1 new_str_list.append(new_str) continue if new_str_list: dict_chk['work_undergo'] = new_str_list for work_str in new_str_list: new_str_list1 = work_str.split('\n') work_dict = { 'company_name': '', 'time': '', 'position_name': '', 'duty': '', } new_str_list2 = new_str_list1[0].split(' ', 1) work_dict['company_name'] = new_str_list2[0] work_dict['time'] = new_str_list2[1] work_dict['position_name'] = new_str_list1[1].split(':')[-1] work_duty = new_str_list1[3:] duty1 = new_str_list1[2].split('职责')[-1] duty = duty1.join((x for x in work_duty)) work_dict['duty'] = duty work_list.append(work_dict) dict_chk['work_list'] = work_list review = '' upgrade = true_chkStr.split('教育经历')[-1] if '自我评价' in upgrade or '自我描述' in upgrade: if '自我评价' in upgrade: review = upgrade.split('自我评价')[-1].split('技能特长')[0] else: if '自我描述' in upgrade: review = upgrade.split('自我描述')[-1].split('技能特长')[0] else: review_chk = true_chkStr.split('工作经历')[0] if '自我评价' in review_chk: review = review_chk.split('自我评价')[-1] if '自我描述' in review_chk: review = review_chk.split('自我描述')[-1] dict_chk['review'] = review if '教育经历' in true_chkStr: upgrade = true_chkStr.split('教育经历')[-1] upgrade = upgrade.strip().strip('\n') upgrade_chk_list = upgrade.split('\n') upgrade_list = [] if upgrade_chk_list: for index, i in enumerate(upgrade_chk_list): if index == 0: if sum([1 if u'\u4e00' <= x <= u'\u9fff' else 0 for x in i]) <= 0: upgrade_list.append(i + upgrade_chk_list[index + 1] + upgrade_chk_list[index + 2]) break else: upgrade_list.append(i) break dict_chk['upgrade'] = upgrade_list else: dict_chk['upgrade'] = [] if '教育经历' in true_chkStr: upgrade = true_chkStr.split('教育经历')[-1] else: upgrade = true_chkStr language = [] remembrance = [] specialty_do = [] if '证书' in upgrade: chk_upgrade_str1 = upgrade.split('证书')[-1] if '专业技能' in chk_upgrade_str1: specialty_do = chk_upgrade_str1.split('专业技能')[-1].strip().strip('\n').split('\n') remembrance_list_str = chk_upgrade_str1.split('专业技能')[0].strip().strip('\n') for i in remembrance_list_str.split('\n'): dict_rem = { "prize_name": '', "prize_time": '' } if '??' in i: dict_rem = { "prize_name": i.split('??')[1], "prize_time": i.split('??')[0] } else: re_list = re.split('([0-9]{4}[.|/][0-9]{1,2})', i) re_list = [i for i in re_list if i.strip()] for str in re_list: if str[0].isdigit(): dict_rem['prize_time'] = str continue dict_rem['prize_name'] = str str_rem = copy.deepcopy(dict_rem) remembrance.append(str_rem) elif '语言能力' in chk_upgrade_str1: remembrance_list_str = chk_upgrade_str1.split('语言能力')[0].strip().strip('\n') for i in remembrance_list_str.split('\n'): dict_rem = { "prize_name": '', "prize_time": '' } if '??' in i: dict_rem = { "prize_name": i.split('??')[1], "prize_time": i.split('??')[0] } else: re_list = re.split('([0-9]{4}[.|/][0-9]{1,2})', i) re_list = [i for i in re_list if i.strip()] for str in re_list: if str[0].isdigit(): dict_rem['prize_time'] = str continue dict_rem['prize_name'] = str str_rem = copy.deepcopy(dict_rem) remembrance.append(str_rem) language_list = chk_upgrade_str1.split('语言能力')[-1].strip().strip('\n') language_dict = { 'language_name': '', 'has_sleep': '', 'reading': '', 'writing': '' } for i in language_list.split('/n'): language_dict1 = copy.deepcopy(language_dict) language_dict1['language_name'] = i.split(':')[0] for i1 in i.split(':')[1].split('|'): if '听说' in i1: stage_str = '初级' if '良好' in i1 or '中极' in i1: stage_str = '中级' if '熟练' in i1 or '精通' in i1 or '高级' in i1: stage_str = '高级' language_dict1['reading'] = stage_str continue if '读写' in i1: stage_str = '初级' if '良好' in i1 or '中极' in i1: stage_str = '中级' if '熟练' in i1 or '精通' in i1 or '高级' in i1: stage_str = '高级' language_dict1['writing'] = stage_str language.append(language_dict1) elif '培训经历' in chk_upgrade_str1: remembrance_list_str = chk_upgrade_str1.split('培训经历')[0].strip().strip('\n') remembrance_list_chk = remembrance_list_str.split('\n') for index, i in enumerate(remembrance_list_chk): if i[0].isdigit(): time = i name = remembrance_list_chk[index + 1] if ',' in name: for name1 in name.split(','): dict_rem = { "prize_name": name1, "prize_time": time.replace('.', '/') } str_rem = copy.deepcopy(dict_rem) remembrance.append(str_rem) else: remembrance.append({"prize_name": name, "prize_time": time}) dict_chk['remembrance'] = remembrance dict_chk['specialty_do'] = specialty_do dict_chk['language'] = language return dict_chk if __name__ == '__main__': # txt = getText_pdf('D:\wokerplay\面试简历1\Android高级开发工程师-方明洋-拉勾招聘.pdf') # 拉勾 chk_str1 = """ 方明洋 5年工作经验 | 本科 | 27岁 | 男 期望职位: Android / 期望薪资:17k-18k 联系电话: 13100622896 电子邮箱: 727527762@qq.com 自我描述 综合能力: 责任心 本人4年工作经验,意向智能物联网方向,喜欢钻研,热爱技术。 工作经历 武汉中软国际科技服务有限公司 2018.03 - 至今 职位:Android中级开发工程师 我任职于武汉中软国际华为业务线软件工具部。主要职责为开发华为相机自动化流水线测试防护系统。该系统 基于Jenkins,结合Python,dos,shell脚本,自动化监控指定代码仓,自动集成测试插件至工程源码,自 动编译,安装,静态代码检查,unit测试,Androidtest,monkey测试,内存检测,自动实时呈现版本测试 结果。实现应用层全流程自动化,相较于人工测试效率提升300%,上线试运行四周,累计发现应用 crash,oom,anr,内存泄漏(Java,native层)各类问题总计90多处。后期准备推广至全apk业务流水线使 用。 武汉漫维智能科技有限公司 2017.09 - 2018.04 职位:安卓研发工程师 我任职于武汉漫维智能科技有限公司研发部,工作职责为开发Honeypad系统,该系统是面向家庭和商业级 的智能物联网平台,分为餐桌系统,和茶几系统两大块。Honeypad系统本质是替换Android原生 launcher,通过自定义基类view,并扩展出各个功能组件模块,在此基础上插件化添加私有模块或者有条件 接入第三方平台来集成整合各种资源,其中智能茶几系统包括自己开发天气模块,新闻模块,亲自互动模块, 定制桌面小游戏 ,第三方影视,音乐,APP市场等。智能餐桌系统包括:第三方点餐,小游戏等。 通过后台 socket主动推送配置文件控制两子种系统切功能切换。 1.负责项目基础框架搭建; 2.项目功能模块代码编辑; 3.代码粗测试; 4.版本维护迭代。 广州中道电子科技有限公司 2015.11 - 2017.09 职位:android应用开发工程师 我任职于广州中道电子科技有限公司。工作职责为,开发中道进销存系统Android客户端应用。该系统主要 用于管理商户进货销售存储。 工作描述: 1.开发中道批发APP各模块功能; 2.开发中道批发后台服务端功能模块; 3. Android客户端粗 测。4.客户端功能迭代开发,5,开发蓝牙打印插件。 项目经历 漫维智能餐桌 2017.10 - 2018.03 项目描述: 开发环境:Windows 开发工具:Androidstudio,MySQL,Androidtools ,固件工厂, 项目名称:Honeylauncher 项目描述:漫维智能餐桌/茶几,HoneyPAD致力于打造基于互联网技术的高端智能平台, 提供以智能餐桌, 智能茶几,广告交互机为主体的一站式商业解决方案。 1.漫维智能餐桌/茶几系统是基于honeylauncher平台,honeylauncher实质为Android launcher替换系统 开机launcher,该框架采用HTTP2.0通信协议,保证通信安全,同时也可以在服务端主动像客户端推送信息 或者跟新版本。 2.项目主页分为三四大区域,天气新闻插件区,主功能区,我的功能,快捷管理, 你的成就: 项目框架开发功能代码实现 中道打印插件(蓝牙打印机) 2017.05 - 2017.07 项目描述: 软件环境:Windows 开发工具:Eclipse 责任描述: 1.项目基础框架,实现功能流程图; 2.功能模块编码,UI界面; 3.测试项目代码,兼容测试; 项目简介:中道打印插件,手机app蓝牙连接打印机基础插件服务,在手机app需要打印功能时候,调用该 插件服务,搜寻范围内可用的蓝牙设备,标识当前所有已搜寻到的蓝牙设备状态并分类显示;点击设备列表弹 框提示绑定设备连接设备成功后,调用系统打印api 插件置打印中设置默认打印属性以及预设打印属性;连 接打印设备后预览打印页面生成pdf文件,传送至打印设备,并设置打印命令更改打印动作; 1.该插件可以匹配所有可搜索的蓝牙设备; 2.该插件适配所有支持蓝牙功能的打印机(无需下载官方打印插件); 3.该打印插件实质上实现系统的打印接口,重写自己需要的方法; 你的成就: app开发 中道批发 2016.11 - 2017.04 项目描述: 项目简介:软件环境:windows 开发工具:Eclipse NetBeans MySql 5.0,NavicatForMySQl 项目简介: 中道批发是一款适用于中小企业商铺的进销存管理软件,该系统拥有完整的店铺销售管理权限体系,订单 流程控制跟踪体系,商品进货,销售,存储管理信息体系;从客户下单到产品生产完毕交货整个流程的控制, 管理,并兼容各种不同终端(平板,手机);该项目通信基于PPP+TLV报文协议,8组RESKey加密报文传 输。同时对于服务端拓展性更强,适用于多种数据库; 责任描述: 1.1.客户端编写项目下单模块,款式生产计划,工厂订单,工厂订单跟踪,我的模块中APP更新,切换云主 机与指定i地址模块; 2.服务端 编写各个项目功能模块中Action类解析通信报文以及操作数据库,生成响应数据到客户端; 3.服务端代码测试,客户模块化各个功能,作为lib库加入到主项目中去,解耦项目各个模块,便于后期维 护; 4.客户端功能代码压力测试,逻辑测试,UI测试,IO测试;1.店铺下单模块功能; 5.总部款式生产计划模块,工厂计划模块,采购任务指派,采购过程记录,裁床跟踪模块; 6.fragment中模块功能分类(类似支付包分组功能界面) 2.项目描述: 1.使用第三方stickyheaderlistview分类各fragment中功能模块。 2. 使用第三方ObservablescrollowView实现下拉弹性空间文字渐变。 3.使用XListview实现下拉刷新列表上拉加载更多。 4.自定义控件MyHorizontalScrollowView实现复杂表格横向,纵向滑动(解决小屏幕表格显示不全问题) 5合并表格行; 6.模块化项目功能; 7.自定义输入框InputDialog; 8.服务端定义Action类处理客户端不同界面的不同数据库操作请求; 9服务端service类定义各个对应模块中CRUD操作数据库方法; 你的成就: 客户端app开发 焦点新闻 2016.08 - 2016.08 项目描述: ● 项目名称:焦点新闻 ● 开发周期:2015.04—2015.07 ● 开发工具:AndroidStudio2.0+SVN ● 项目描述:此项目为一个新闻资讯类手机客户端,主要包括以下几个模块首页、新闻,创意、家居、军 事、 娱乐等功能模块,用户可以自由订阅添加自己喜欢和关系的内容,使用起来非常方便。 ● 1.项目基本框架 应用结构采用的是SlidingMenu开源框架,整体分为侧滑菜单界面和内容界面两个部分。 内容界面采用ViewPager加上ViewPagerIndicator的设计模式。为了实现各个界面的统一管理,抽取出一 个基类BasePager,对外暴露initView()和initData()两个方法,供每个模块使用。这样每个模块只需要实现 这两个方法就可以了,从而达到代码的复用。 ● 2.头条热点,读图的开发 ListView用于展示从网络上获取的数据,并在ListView的头部添加一个可以轮播 的ViewPager热点新闻图片,在ListView的尾部添加一个加载更多的布局。 界面采用 Fragment+ViewPager的框架模式,自定义ViewPager的懒加载(去除预加载),当用 户切换ViewPager是 才进行数据请求,节约用户流量. 你的成就: 安卓端app开发 一元秒杀 2016.07 - 2016.07 项目描述: ● 项目描述: 天猫百里挑一,特惠商品折上折,每日精选最划算的天猫商品,正 品 给力不加价,选择我 们不 需要理由!!!分类齐全,数码, 女装,男 装,家居,母婴,鞋包,配饰等栏目,淘宝独家 商 品 优惠选择。 1.对项目进行分析,对视图层框架搭建,界面统一。主界面采用RadioGroup+ViewPager的设 计模式,并且要自定义一个ViewPager重写ViewPager的事件处理机制,让ViewPager不 能处理滑动事件,通过点击RadioGroup来实现页面的切换。为了实现界面的统一管理,抽 取一个基类BasePager,对外暴露initView()和initData()两个方法,共每个模板使用。这样 每个模块只需要实现这两个方法就可以了,从而达到代码的复用。 2.主页、逛街、主题的开发 ListView用于展示从网络上获取的数据,并在ListView的头部添 加一个布局文件,这个布局文件包括了信息显示的轮播图,分类信息男装、数码、创意等,这 样就可以达到让头布局和ListView进行联动的效果。在主页使用一个帧布局,点击可以实现 ListView和GridView视图切换的效果。 3.在分类信息中,每个分类信息布局基本相同,通过 抽取一个布局文件,通过include进入布局文 件的复用。 你的成就: 负责安卓端app开发任务 美食天下 2015.04 - 2015.07 项目描述: ● 软件环境:windows ● 开发工具:Androidstudio +svn ● 责任描述:首页Tween Animation, 登录界面通过Json解析Xml实现登录服务器交互 我的个人界面 ● 项目简介:全球美食精品荟萃,发掘各类美食菜谱,蒸煮焖烩炒煎炸,从家常菜到人气料 理,从正餐到甜点,从养生汤到减肥餐,搜集美食智慧,品评美食文化,体会美食乐趣。美食 菜谱,简单的名字,幸福的滋味!海量不同菜系菜谱,满足您的个性化需求! 你的成就: 通信模块编码 教育经历 汉口学院 本科 / 电子信息工程 2011 - 2015 """ # 前程无忧 chk_str2 = """ 基本信息 李立宏 男 | 30 岁 (1990/01/12) | 174cm 未婚 | 9年工作经验 手机号码:15827401448 QQ号:761193190 求职状态:目前正在找工作 邮箱:hong199012@qq.com 居住地:武汉-洪山区 工作经验 2017/3―至今 [3年6个月] C++服务器主程 | 研发 武汉多游科技有限公司 网络游戏 | 民营公司 | 50-150人 工作描述: 1.独立负责棋牌游戏 “黔友贵州麻将”的研发,上线及运营,更新 2.帮助客户端搭建底层跨平台通讯库 3.配合管理后台开发人员建表并生成数据,提升运营能力 4.服务器采用windows下c++开发,使用mssql Server 数据库,客户端采用cocos lua 5.游戏每日最大3千多人同时在线,在线运营时间两年多,非常稳定! 6.移植服务器到linux下稳定运营,数据库用mysql, linux下使用qt! 7.精通cocos2dx c++开发,完整的cocos开发上线经验。 熟练掌握: 1.熟悉mysql,redis和cocos c++ 2.熟悉游戏服务器大用户量同时在线的架构设计 3.熟悉格斗,捕鱼,手游类游戏的帧同步设计 2016/6―2017/3 [9个月] C++服务器主程 | 技术 武汉百达富嘉网络科技有限公司 网络游戏 | 民营公司 | 少于50人 工作描述: 1.独立负责德州游戏"人人德州”服务器的网络,数据库,业务等模块的开发以及整体框架的搭建,“人人德州” 这款游戏已在苹果商店上线。 2.完成癞子麻将创建房间,加入房间,准备游戏,听牌,胡牌,正常的玩多盘麻将,每盘的战绩统计,房间结束,房间战绩统计等主要功 能。 3.实现斗地主的AI算法,可以进行一般水平的打扑克。 熟练掌握: 1.精通linux c++ qt开发,开发了一个linux版本的麻将服务器 2.熟悉Cocos2d-X C++开发 来自前程无忧简历 2014/5―2016/5 [2年] 手游GM工具开发工程师,APP服务器开发工程师 | 研发 上海晟旗网络科技有限公司 网络游戏 | 民营公司 | 少于50人 工作描述: 这是一家手游公司,公司推出的手游有"来自仙剑的你"和"死神"(Q版来自仙剑的你),我负责公司手游GM 运营工具的开发和游戏服务器的功能开发。 项目经验: 1.QT版游戏GM工具 项目模块: a,玩家log, b,玩家数据, c,gm log, d,玩家投诉, e,发布公告(全服公告), f,充值补偿, g,奖励补偿(全服奖励), h,cdkey查询,玩家禁言等 项目基于C/S架构,采用C++语言开发,使用windows api和QT界面库,stl,boost标准库,mongodb数据库。 2.Web版游戏GM工具, 项目基于B/S架构,使用C#语言, asp.net mvc框架, mongodb数据库。 3.大厅服务器业务功能的开发。 4.游戏的第三方登录模块和第三方支付模块。 熟练掌握: 1, 用C++ boost开发Tcp server和Http Server,以及linux下的Epoll Server。 2, 了解负载均衡和分布式, a,负载均衡使用虚拟ip技术实现.即链路层的负载。 b,难点在于数据库的扩展,玩家数据一直增加,io查询所花的时间就越长.数据库的优化在于1,页面缓存 2,表的分割 3,索引等。页面缓存就是操作系统的缓存机制,对于单台数据库而言,增加内存即可.表的分割我个人觉得只能适当分割,分割太 细维护难度太大.索引很好,通过B+树数据结构,就像字典的目录那样,大大的加快了的数据的查询速度.搜索引擎的索引就是 key和postion的结构. c,公司的服务器结构就是一个区一台服务器,每个服务器对应的有两台数据库服务器,一个master,一个slave 3, DirectX C++音乐播放器,视频播放及vmr9视频播放,mongodb下载服务,Lucene .net(C#开源搜素引擎),ActiveMQ等。 2013/3―2014/5 [1年2个月] C# ArcGIS研发工程师 | 软件研发 武汉聪源科技有限责任公司 计算机软件 | 民营公司 | 少于50人 工作描述: 这是一家地球空间信息相关行业的软件公司。我负责广东省电力设计研究院前期选址选线系统的开发。 来自前程无忧简历 项目名称: 广东省电力设计研究院前期选址选线系统 项目职责: 1, 负责广东省电力设计研究院前期选址选线系统的选线部分。 2, 选线部分最难的:最优路径算法的实现。 (这个系统主要由两个部分组成,即选址和选线。选址就是选择变电站的站址,共有起点和终点两个站址。选线就是在这两 个站址之间规划出一条线路,用于布置电缆和电线。 选线线路要符合:(1) 路径最短,在要避让障碍物的前提下,生成出一条距离最短的线路。 (2) 经济最优化,也即线路的转角塔数量要最少,线路所跨越区域天气情况要好,以及线路与障碍物之间的距离要最短,大于 避让范围 等。(3) 线路精度最精确,客户方要求的精度是100米,而一开始生成的线路精度只有500米,为了优化这个算法花了很长时间。(4) 指定线路必过点和线,在线路生成模块里,指定必过点和线,那么生成的线路就必须要经过这些点和线。) 3, 完成模块:a.系统配置模块,b.线路配置模块,c.线路导入模块,d.线路生成模块,e.线路编辑模块,f.数据上传模块,g .选线工程结构树状图模块,h.线路分段模块,i.协议配置模块 等。 (选线工程结构图的结构是:项目下有起点,终点和多个方案,每个方案下有多个线路版本和多个线路分段,每个分段对应一 个分段协议,这些协议是客户方与线路所经过的每个地方政府所签订的,每个线路版本包含这些分段。) 4, 选线部分涉及很多的算法,在线路导入,线路生成,线路优化,线路分段等模块中都有体现。算法是选线部分最难的点。 5, 编写选线工程结构管理设计文档和测试用例。 熟练掌握: 1, 对游戏比较感兴趣, 实现一个有客户端和服务器的五子棋。五子棋的算法是自己实现的。 2, 精通C++ MFC开发。 2011/4―2013/3 [1年11个月] 软件工程师 | 技术研发 武汉家事易农业科技有限公司 互联网/电子商务 | 民营公司 | 150-500人 工作描述: 这是一家日用品电商公司。我负责流水线PDA系统及其他管理系统的开发。 工作职责: 1,一期PDA服务器端的流水的记录以及客户端的修改。 2,二期PDA项目整个PDA客户端的开发以及PDA服务器端的修改和并发的处理。 (客户端加入了自己很多的想法,比如和服务器中断连接后能够自动连接服务器,当连接上服务器之后会有相应的提示, 让工作人员继续做集货,验货等任务) 3,用WCF搭建公司整个系统的框架(WCF端提供三个服务,分别服务于公司的三个系统)。 4,,会员注册模块的开发。 5,质量追溯系统的开发。 熟练掌握: 1, 熟悉MFC开发,Windows消息机制, QT 开发。 来自前程无忧简历 2, 熟悉XNA,Cocos2d-X引擎,用XNA做过一个类似于捕鱼达人的2D游戏和一个3D模型。 教育经历 2008/9-2011/7 武汉工业职业学院 大专 | 设计 求职意向 职能:后端开发 职位:服务器工程师 工作地点:武汉, 上海 行业: 计算机软件,互联网/电子商务,计算机硬件,网络游戏,通信/电信/网络设备 期望薪资:20000-40000元/月 到岗时间:随时 工作类型:全职 自我评价: 1.我是一个非常专注的人,对于我要做的事情我会做的很深,花大部分时间去钻研。专业化 能使你获得很大的财富,这是美国的一位 牛逼的期货交易员说的话。 2.熟练掌握C++,C#语言 3.精通服务器程序开发,熟悉pc端,cocos c++程序开发 技能特长 证书/成绩 2009/4 c1驾驶执照 , 英语三级 培训经历 2010/8-2011/4 .Net 培训机构: 北大青鸟 来自前程无忧简历 """ # 智联1 chk_str3 = """应聘职位: Web开发工程师 应聘机构: 武汉乐谷在线科技有限公司 智联招聘 工作地点: 武汉 ID:dKwLUJmFEUKjMy4LHsfzudiXdMlnCO9K 最近活跃时间:6 月 8 日 张双琪 女 22岁 (1998年1月) 大专 考虑机会 现居住地:武汉 | 户口:孝感 手机:18727456476 E-mail:2576444306@qq.com 求职意向 web前端 武汉 4001-6000元/月| 互联网、IT服务、计算机软件| 全职 自我评价 1.对于研究新技术有浓厚的兴趣,善于分析总结 2.自学能力强,在疫情期间自学了node.js和vue.js 3.对工作认真负责,有较强的责任心,性格开朗,有较强的心3.理素质和抗压能力,在逆境时会对自身负情绪进行自我调节 4.有上进心,对团队协调能力强,有较强的团队意识 工作经历 2019.07-2020.01 武汉筑梦科技有限公司 (7个月) web前端 |2001-4000元/月 计算机软件 工作描述: 主要从事自己负责Web前端开发。根据需求说明和设计文档,完成所分模块的开发及负责模块的单元测试工作。 协助UI设计师完成也是设计工作,提出技术实现条件。负责前端页面的开发和前端交互的设计,以及网站前端 性能的优化和提升 项目经历 2019.11-2020.01 仿小米商城 项目描述: 项目描述:该项目包括首页,商品列表页,商品详情页,购物车页,注册页,登录页 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Vue.js 具体模块 : 包括注册页、登录页、首页、商品展示页、购物车页 功能介绍:1. 主要运用HTML5+CSS3来布局页面,用JavaScript使得页面更加生动灵活 2. 分别运用了路由的调转来进行页面的切换调转的功能 3. 在首页的购买操作会记录在购物车的信息 岗位职责: 注册页:对用户输入的内容进行正则验证,随机验证码的验证 登录页:对用户提交的数据进行后台请求返回不同的页面,登陆成功改变登录状态 购物车:ajax请求用户的数据,并同步页面与数据库中的数据首页:采用vue.js通过数据来驱动视图,实现首页 的完美布局。 项目心得: 1.对vue.js用数据驱动试图更加的深刻,对页面的整体布局有较深的理解 2.更加了解结构逻辑,更加提升了自己的编程能力 2019.10-2019.11 家装无忧 项目描述: 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Bootstrap 项目描述:这是一个具特色的装饰公司的线上宣传网站,利用当下比较流行的 HTML5+CSS3对网页元素的渲染有着耳目一新的特点,利用Bootstrap框架JavaScript使得网页的展示效果更具潮 流且生动,使得网页具有响应式布局的特点,用户在浏览时更能清楚快速的理解设计理念。 具体模块:包括首页、装修案例展示、设计师团队页、在线咨询、装修选材页面、招聘六大模块。 责任描述: 装修案例展示页面的开发:将具有优秀代表的装修案例工程项目展示。 装修知识的分类展示的开发:利用特色吸引用户的关注。 家装案例中部分家装风格模块的开发:把案例具体化。 了解家装无忧部分模块的开发:将企业风格,企业宗旨,企业理念以及业务具体展现。 项目心得: 1.在完成项目的过程中,让我更加熟练的掌握了JavaScript的知识,锻炼了自己的编程能力 2.让我对网页的布局动画等有了更深的理解,能够轻松简单的操作HTML5+CSS3渲染动态网页效果 3.运用Bootstrap实现网页的响应式布局,适用不同的窗口展示区域的页面展示。 教育经历 2018.09 - 2020.06 湖北科技职业学院 移动应用开发 大专 培训经历 2019.10 - 2020.01 ajax,bootstrap,php,vue.js 培训机构: 百里半 证书 2019.12 1+x中级证书 2018.03 学院二等奖学金 专业技能 html+css:熟练 php和nodejs:一般 bootstrap:熟练 HTML5+CSS3:熟练 JavaScript:熟练 jquery:熟练 ajax:一般 vue.js:良好 """ # 智联2 chk_str4 = """ 应聘职位: Web开发工程师 应聘机构: 武汉乐谷在线科技有限公司 智联招聘 工作地点: 武汉 ID:dKwLUJmFEUKjMy4LHsfzueVqNyJnCO9K 最近活跃时间:6 月 10 日 聂礼旺 男 23岁 (1997年2月) 3年工作经验 大专 离职,随时到岗 现居住地:黄冈 红安县 | 户口:黄冈 手机:15771198025 E-mail:nie_fairy@163.com 求职意向 web前端 武汉 4001-6000元/月| 计算机软件| 全职 工作经历 2018.04-2019.10 湖北国网华中科技开发有限责任公司 (1年 7个月) web前端开发 |4001-6000元/月 计算机软件 工作描述: 1、百分百还原UI设计页面 2、与后端沟通交流完成页面的交互作用 3、用vue,原生JS,bootstrap,mui等框架完成项目 4、有独立项目开发经验,会APP开发、能熟练处理兼容问题 项目经历 2019.09-2019.10 武汉市配网规划资料管理系统(移动端) 项目描述: 项目是一公司为国网武汉供电公司设计的一款用于各个区之间文件管理的app,采用vue和mui框架构建。 2019.08-2019.09 湖北省汉江崔家营航电枢纽管理系统(已上线) 项目描述: 该项目是为湖北省汉江崔家营航电枢纽管理处设计的官网,项目整体采用原生JS,是崔家营航电管理处和湖北省 运输交通厅连接的公众平台 2018.08-2019.10 浙江浙能集团能源综合系统 项目描述: 主要功能是入设计领导首页和数据展示页面,通过canvas和echarts实现数据可视化操作,更加生动形象的来展 示数据。 2018.01-2018.05 医疗器械销售平台开发(移动端) 项目描述: 项目是一款医院和医疗器械公司内部使用的手机端APP,采用vue框架构建,其 中涉及mui触控滑动模块,slide 子页之间采用了懒加载技术保证用户体验。 教育经历 2016.09 - 2019.07 武汉软件工程职业学院 软件工程 大专 证书 2018.06 大学英语四级 语言能力 英语: 读写能力良好 | 听说能力熟练 """ # 自制简历 chk_str5 = """应聘职位: Web开发工程师 应聘机构: 武汉乐谷在线科技有限公司 智联招聘 工作地点: 武汉 ID:dKwLUJmFEUKjMy4LHsfzudiXdMlnCO9K 最近活跃时间:6 月 8 日 张双琪 女 22岁 (1998年1月) 大专 考虑机会 现居住地:武汉 | 户口:孝感 手机:18727456476 E-mail:2576444306@qq.com 求职意向 web前端 武汉 4001-6000元/月| 互联网、IT服务、计算机软件| 全职 自我评价 1.对于研究新技术有浓厚的兴趣,善于分析总结 2.自学能力强,在疫情期间自学了node.js和vue.js 3.对工作认真负责,有较强的责任心,性格开朗,有较强的心3.理素质和抗压能力,在逆境时会对自身负情绪进行自我调节 4.有上进心,对团队协调能力强,有较强的团队意识 工作经历 2019.07-2020.01 武汉筑梦科技有限公司 (7个月) web前端 |2001-4000元/月 计算机软件 工作描述: 主要从事自己负责Web前端开发。根据需求说明和设计文档,完成所分模块的开发及负责模块的单元测试工作。 协助UI设计师完成也是设计工作,提出技术实现条件。负责前端页面的开发和前端交互的设计,以及网站前端 性能的优化和提升 项目经历 2019.11-2020.01 仿小米商城 项目描述: 项目描述:该项目包括首页,商品列表页,商品详情页,购物车页,注册页,登录页 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Vue.js 具体模块 : 包括注册页、登录页、首页、商品展示页、购物车页 功能介绍:1. 主要运用HTML5+CSS3来布局页面,用JavaScript使得页面更加生动灵活 2. 分别运用了路由的调转来进行页面的切换调转的功能 3. 在首页的购买操作会记录在购物车的信息 岗位职责: 注册页:对用户输入的内容进行正则验证,随机验证码的验证 登录页:对用户提交的数据进行后台请求返回不同的页面,登陆成功改变登录状态 购物车:ajax请求用户的数据,并同步页面与数据库中的数据首页:采用vue.js通过数据来驱动视图,实现首页 的完美布局。 项目心得: 1.对vue.js用数据驱动试图更加的深刻,对页面的整体布局有较深的理解 2.更加了解结构逻辑,更加提升了自己的编程能力 2019.10-2019.11 家装无忧 项目描述: 开发技术:HTML+CSS,JavaScript,HTML5+CSS3,Bootstrap 项目描述:这是一个具特色的装饰公司的线上宣传网站,利用当下比较流行的 HTML5+CSS3对网页元素的渲染有着耳目一新的特点,利用Bootstrap框架JavaScript使得网页的展示效果更具潮 流且生动,使得网页具有响应式布局的特点,用户在浏览时更能清楚快速的理解设计理念。 具体模块:包括首页、装修案例展示、设计师团队页、在线咨询、装修选材页面、招聘六大模块。 责任描述: 装修案例展示页面的开发:将具有优秀代表的装修案例工程项目展示。 装修知识的分类展示的开发:利用特色吸引用户的关注。 家装案例中部分家装风格模块的开发:把案例具体化。 了解家装无忧部分模块的开发:将企业风格,企业宗旨,企业理念以及业务具体展现。 项目心得: 1.在完成项目的过程中,让我更加熟练的掌握了JavaScript的知识,锻炼了自己的编程能力 2.让我对网页的布局动画等有了更深的理解,能够轻松简单的操作HTML5+CSS3渲染动态网页效果 3.运用Bootstrap实现网页的响应式布局,适用不同的窗口展示区域的页面展示。 教育经历 2018.09 - 2020.06 湖北科技职业学院 移动应用开发 大专 培训经历 2019.10 - 2020.01 ajax,bootstrap,php,vue.js 培训机构: 百里半 证书 2019.12 1+x中级证书 2018.03 学院二等奖学金 专业技能 html+css:熟练 php和nodejs:一般 bootstrap:熟练 HTML5+CSS3:熟练 JavaScript:熟练 jquery:熟练 ajax:一般 vue.js:良好 """ # boss直聘 chk_str6 = """ ` 个人资料__ 姓 名:吴操 出生年月:1998.04 专 业:计算机网络 电子邮箱:2787668634@qq.com 性 别:男 学 历:专科 手 机:15007265224 毕业院校:武汉信息传播职业技术学院 __专业技能__ 精通 Word、Photoshop、AutoCAD、Adobe Dreamweaver、Xshell等软件; 熟练CDH大数据平台的部署和系统故障的检测; 熟练操作linux系统常用命令; 熟练部署grafana监控系统; 熟练操作挖矿病毒的检测与查杀; 熟悉windows、windows server各版本、linux操作系统的安装; 熟悉TCP/IP的四层/七层协议; 熟悉mysql、pgsql数据库搭建,及数据库的数据备份和恢复; 熟悉计算机硬件搭配及故障处理; 熟悉浪潮服务器、飞塔、深信服、三层交换机的搭建 参与H3C-f1000-AK115防火墙的搭建; 工作经历 2020.08-2021.06 深圳市蓝泰源信息技术股份有限公司 运维工程师 1、 负责在linux和windows server上部署saas、mysql、pgsql、CDH、ERP以及vms视频服务,并安装 grafana监控系统; 2、 防火墙配置更新及日常网络查询,三层交换机vlan划分,二层交换机网口检测; 3、 网络问题处理,以及机房服务器、防火墙和交换机的软硬件故障处理; 4、 负责与合作公交公司、中铁二院等三个项目主管进行技术对接的协调与沟通,以及公司10个旧项目 的故障处理; 5、 桌面运维故障处理,以及员工入职/离职电脑资产分配,为新员工分配IP,划分网段; 6、 负责服务器日常巡检、软件更新、数据备份、故障查询、安全防护等; 2019.10-2020.08 北京优海网络科技有限公司 运维工程师 1、 负责 Linux/Windows、mysql、华为华三、深信服、飞塔、专用点餐软件等软硬件维护; 2、 负责10家门店的软硬件故障检测与维护,及时处理各门店的故障反馈,并定期给所有门店进行日常 巡检; 3、 负责搭建新门店内部网络、服务器、交换机、防火墙、路由器等设备,录入餐厅内各种布局数据, 修改APP内UI界面信息等,最后进行数据打版,完成门店信息建设; 4、 保证各门店网络正常运行,配置飞塔内网,确保VPN运行正常,确保总部随时可以远程查看数据; 5、 协助各门店更新paid上专用APP,处理电脑上OA系统的故障; 项目经历 1、 项目名称:办公机房防火墙和三层交换机设备升级 硬件环境:H3C-F1000-AK115、H3C-S5560 项目简介:公司防火墙和三层交换机设备老化,导致公司网络偶尔接触不良 职责描述:1.借此机会给公司重新规划IP,划分vlan; 2.将IP确定到个人,并监控每个人流量速率,保证办公网络正常运行; 3.更换光纤网络; 2、 项目名称:达州机房建设 硬件环境:9台宝德服务器,一台数据存储服务器,一台防火墙、一台路由器,一台三层交换机,一 台二层交换机 项目简介:出差到四川达州搭建机房,划分机房服务器作用,备份数据库数据,更新老旧软件,协 助部署虚拟化平台 职责描述:1.重新规划整理机房服务器,确保服务器按IP顺序排列; 2.升级服务器硬件配置,普通服务器内存由8G升级到16G,磁盘由2G变为4G,并做Raid 1, 数据库服务器内存由16G升级到32G,磁盘由2G升级到8G; 3.协助宝德工程师将服务器资源整合,制作虚拟平台; 4.在虚拟平台上搭建ERP、saas、mysql、pgsql、nginx、tmp、CDH、redis、odoo 11、 vms视频和grafana监控系统; 5.搭建完成后,测试运营数据是否正常,软件功能是否正常启用; 3、 项目名称:新门店建设 硬件环境:光纤一条、戴尔R730服务器两台,飞塔防火墙一台,路由器一台,三层交换机一台,审 计一台,二次交换机5台,海康威视监控一台,9台AP设备,13台打印机,5台戴尔电脑 项目简介:新门店建设,按照配置文档将门店建设起来 职责描述:1.使用自己电脑测试网络是否符合标准; 2.网线直插飞塔防火墙进行配置,确保VPN正常使用; 3.配置三层交换机进行vlan划分; 4.部署服务器,制作RAID 5,部署mysql数据库,保证网络通畅; 5.部署审计,并让AP设备连接审计,测试AP设备网络,保证网速; 6.录入门店详细参数; 7.测试验证录入效果,以及到门店各处测试网络和各处打印机是否正常联网打印; 8.确定无问题后,试营业进行最后测试; 9.后台删除所有数据,重新上传门店信息,进行数据打版,正式开始运营; 自我评价 优点 1、为人踏实肯干,原意积极主动解决工作生活中遇到的各种问题; 2、待人真诚,能很好的和同事领导相处,提高工作效率; 3、做事认真负责,有较强的责任心,具有较强的适应能力、抗压能力和团队协作能力; 缺点 专业能力有些欠缺,不太善于表达。但我原意好好学习,也一定会好好学习,希望贵公司能给我个机会, 我一定好好珍惜,认真工作,努力提升自己的专业能力,为公司创造更大的价值。 """ fmt_txt(chk_str1)