构建简历解析工具

做者|Low Wei Hong
编译|VK
来源|Mediumgit

当我仍是一名大学生的时候,我很好奇自动提取简历信息是如何工做的。我将准备各类格式的简历,并上传到招聘网站,以测试背后的算法是如何工做的。我想本身尝试建一个。所以,在最近几周的空闲时间里,我决定构建一个简历解析器。github

一开始,我以为很简单。只是用一些模式来挖掘信息,结果发现我错了!构建简历解析器很困难,简历的布局有不少种,你能够想象。算法

例如,有些人会把日期放在简历的标题前面,有些人不把工做经历的期限写在简历上,有些人不会在简历上列出公司。这使得简历解析器更难构建,由于没有要捕获的固定模式。服务器

通过一个月的工做,根据个人经验,我想和你们分享哪些方法工做得很好,在开始构建本身的简历分析器以前,你应该注意哪些事情。机器学习

在详细介绍以前,这里有一段视频短片,它显示了个人简历分析器的最终结果(https://youtu.be/E-yMeqjXzEA)工具


数据收集

我在多个网站上搜了800份简历。简历能够是PDF格式,也能够是doc格式。布局

我使用的工具是Google的Puppeter(Javascript)从几个网站收集简历。性能

数据收集的一个问题是寻找一个好的来源来获取简历。在你可以发现它以后,只要你不频繁地访问服务器,抓取一部分就能够了。学习

以后,我选择了一些简历,并手动将数据标记到每一个字段。标记工做的完成是为了比较不一样解析方法的性能。测试


预处理数据

剩下的部分,我使用Python。有几个包可用于将PDF格式解析为文本,如PDF Miner、Apache Tika、pdftotree等。让我比较一下不一样的文本提取方法。

使用PDF Miner的一个缺点是,在处理简历时,简历的格式相似于Linkedin的简历,以下所示。

PDF Miner阅读PDF的方式是逐行的。所以,若是发现左右两部分的文本位于同一行,则将它们组合在一块儿。所以,正如你能够想象的那样,在随后的步骤中提取信息将更加困难。

另外一方面,pdftree将省略全部的'\n'字符,所以提取的文本将相似于文本块。所以,很难将它们分红多个部分。

所以,我使用的工具是Apache Tika,它彷佛是解析PDF文件的更好选择,而对于docx文件,我使用docx包来解析。


数据提取流程概述

这是棘手的部分。有几种方法能够解决这个问题,但我将与你分享我发现的最佳方法和Baseline方法。

Baseline方法

咱们先来谈谈Baseline方法。我使用的Baseline方法是首先为每一个部分(这里我指的是经验、教育、我的细节和其余部分)抽取关键字,而后使用regex匹配它们。

例如,我想提取大学的名称。所以,我首先找到一个包含大多数大学的网站,并将其删除。而后,我使用regex检查是否能够在特定的简历中找到这个大学名称。若是找到了,这条信息将从简历中提取出来。

这样,我就能够构建一个Baseline方法,用来比较其余解析方法的性能。

最佳方法

这是我发现的最好的方法。

首先,我将把纯文本分红几个主要部分。例如,经验、教育、我的细节和其余。我要作的是为每一个主要部分的标题设置一组关键字,例如工做经验、教育、总结、其余技能等等。

固然,你能够尝试创建一个机器学习模型来实现分离,但我选择了最简单的方法。

以后,将有一个单独的脚原本分别处理每一个主要部分。每一个脚本都将定义本身的规则,这些规则来提取每一个字段的信息。每一个脚本中的规则实际上都至关复杂。因为我但愿这篇文章尽量简单,因此我如今不会透露。

我使用的机器学习方法之一是区分公司名称和职务。我在这里使用机器学习模型的缘由是,我发现有一些明显的模式能够区分公司名称和职务,例如,当你看到关键字“Private Limited”或“Pte Ltd”时,你确定它是一个公司名称。

我在哪里能获得训练数据?

我从greenbook中搜集数据以获取公司名称,并从这个Github仓库中下载了职位列表(https://github.com/fluquid/find_job_titles)。

在获得数据后,我只训练了一个很是简单的朴素贝叶斯模型,它能够将职称分类的准确率提升至少10%。

总之,我解析简历解析器的策略是分而治之。

评估

我使用的评估方法是fuzzy-wuzzy方法(去重子集匹配)。好比说

  • s=共同单词的数量
  • s1=单词列表的交集
  • s2=单词列表的交集+str1的剩余单词
  • s3=单词列表的交集+str2的剩余单词

接下来的计算公式

token_set_ratio = max(fuzz.ratio(s, s1), fuzz.ratio(s, s2), fuzz.ratio(s, s3))

我使用token_set_ratio的缘由是,若是解析的结果与标记的结果具备更多的公共标记,则意味着解析器的性能更好。

原文连接:https://towardsdatascience.com/how-to-build-a-简历-parsing-tool-ae19c062e377

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

相关文章
相关标签/搜索