作者|Low Wei Hong
編譯|VK
來源|Medium

當我還是一名大學生的時候,我很好奇自動提取簡歷信息是如何工作的。我將准備各種格式的簡歷,並上傳到招聘網站,以測試背后的算法是如何工作的。我想自己嘗試建一個。因此,在最近幾周的空閑時間里,我決定構建一個簡歷解析器。
一開始,我覺得很簡單。只是用一些模式來挖掘信息,結果發現我錯了!構建簡歷解析器很困難,簡歷的布局有很多種,你可以想象。
例如,有些人會把日期放在簡歷的標題前面,有些人不把工作經歷的期限寫在簡歷上,有些人不會在簡歷上列出公司。這使得簡歷解析器更難構建,因為沒有要捕獲的固定模式。
經過一個月的工作,根據我的經驗,我想和大家分享哪些方法工作得很好,在開始構建自己的簡歷分析器之前,你應該注意哪些事情。
在詳細介紹之前,這里有一段視頻短片,它顯示了我的簡歷分析器的最終結果(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/
