python 简历解析初探 (NLP)

python 利用jieba库,解析路径下的简历文件(XML文件)

关键库

  • os库:文件读取和输出
  • re库:文本替换
  • parse库:XML文件读取库
  • csv库:csv文件处理库
  • jieba库:NLP文本解析 分词库

思路

  • 1 获取某一路径下所有简历数据(文件)
  • 2 将所有简历文件进行依次遍历,解析XML数据内容
  • 3 对复杂内容:履职经历,利用NLP 语言识别,进行分词。
  • 4 对分词后结果按照需求情况进行处理和存储
  • 5 将处理后的数据按照CSV文件进行输出和保存,便于后续分析

上代码

import os
import re
from xml.dom.minidom import parse
import csv
import jieba

filePath = r"E:\python-true\myprj\2021test"  # 简历文件所在文件夹

allpath = []
filename = []
ids = []
data = []  # 最终输出数据结构

allfilelist = os.listdir(filePath)
# 遍历该文件夹下的所有目录或者文件
for file in allfilelist:
    filepath = os.path.join(filePath, file)
    # 如果是文件,筛选doc
    if os.path.isfile(filepath):
        if ((filepath.find(".lrmx") != -1) and (filepath.find("$") == -1)):
            # 对路径进行处理
            allpath.append(filepath)
            ids.append(file[:6])
            filename.append(file)
# print("文件路径列表为:")
# print(allpath)
# print("员工id列表为:")
# print(ids)
print("-----开始抽取数据-----")
# 文件列表获取完毕,进入文件循环
for id_one in range(0, len(ids)):

    document_tree = parse(allpath[id_one])
    data_list = []

    jianli_node = document_tree.getElementsByTagName("JianLi")[0]  # 获取第一个标签名为JianLi的节点
    jianli = jianli_node.childNodes[0].data  # 获取第一个标签名为JianLi的节点的第一个子节点的数据(节点的子节点也可能是多个)
    data_list.append(jianli)

    # print("简历数据为")
    # print(data_list)
    # 处理逻辑,可用将XML解析数据整体存储,用于数据校对用,校对姓名,籍贯等各类数据  但暂不考虑
    # 对简历数据进行拆分
    jianli = re.sub("\n", "", jianli)
    tempstr = jianli.split(";")
    print("简历拆分后:")
    print(tempstr)

    date_begin = []  # 开始日期
    date_end = []  # 结束日期
    jobhistory = []  # 工作经历
    for strtemp in tempstr:
        # 对每行简历进行语义识别,区分时间字段与简历部分
        strtemp = re.sub(" ", "", strtemp)
        seg_list = jieba.lcut(strtemp, cut_all=False, HMM=True)
        date_begin.append(seg_list[0])
        if (seg_list[2].find(".") != -1):  # 元素3是日期
            date_end.append(seg_list[2])
            # 拼接任职历史
            job_little = ""
            for i_little in range(3, len(seg_list)):
                job_little = job_little + seg_list[i_little]
            jobhistory.append(job_little.strip())
        else:
            date_end.append(" ")
            # 拼接任职历史
            job_little = ""
            for i_little in range(2, len(seg_list)):
                job_little = job_little + seg_list[i_little]
            jobhistory.append(job_little.strip())

    # 获取姓名
    xingming_node = document_tree.getElementsByTagName("XingMing")[0]
    xingming = xingming_node.childNodes[0].data

    # 构建csv文件内数据体
    for i in range(0, len(date_begin)):
        data.append((ids[id_one], xingming, date_begin[i], date_end[i], jobhistory[i]))

# print(data)
csvfile = open('xml_change_ok.csv', 'w', encoding='utf-8')
writer = csv.writer(csvfile)
writer.writerow(["id", "XingMing", "date_begin", "date_end", "jobhistory"])
writer.writerows(data)
csvfile.close()
print("----输出完毕-----")

Enjoy it!

  • 欢迎点赞交流,留言沟通。
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值