
金融技術(shù)實(shí)施專家大衛(wèi)·摩爾
招聘人員正在使用越來越復(fù)雜的軟件和工具來掃描簡(jiǎn)歷,并將其與張貼的工作職位和工作規(guī)格進(jìn)行匹配。如果你的簡(jiǎn)歷是通用的,或者工作說明模糊和/或通用,這些工具將對(duì)你不利。AI真的在反對(duì)你的工作申請(qǐng),我不確定你是否知道或是否會(huì)接受它!但是讓我演示一些技巧,可以幫助您平衡困難。當(dāng)然,我們將使用NLP(自然語言處理)、Python和一些Altair可視化。準(zhǔn)備好反擊了嗎?
考慮到你對(duì)你在網(wǎng)上注意到的一個(gè)好職位感興趣。還有多少人會(huì)看到同樣的工作?和你有大致相同的經(jīng)驗(yàn)和資歷?你認(rèn)為可能有多少申請(qǐng)人提出申請(qǐng)?會(huì)不會(huì)少于10個(gè)或者少于1000個(gè)?
此外,考慮到面試小組可能只有5個(gè)強(qiáng)有力的候選人。那么,如何從995份申請(qǐng)中篩選出5個(gè)強(qiáng)有力的候選人呢?這就是為什么我說你需要平衡勝算,否則就會(huì)被扔出雜草!
我想,首先,你可以把這些簡(jiǎn)歷分成3或5份。把它們打印出來,分配給人類讀者。每個(gè)閱讀器從他們的堆中提供一個(gè)選擇。有5個(gè)讀者,這是一堆200份簡(jiǎn)歷--去挑選最好的一兩份。閱讀這些會(huì)花很長(zhǎng)時(shí)間,最終可能只會(huì)產(chǎn)生一個(gè)答案。我們可以用Python在幾分鐘內(nèi)閱讀所有那些簡(jiǎn)歷!
在Medium上閱讀這篇文章“我如何使用NLP(Spacy)篩選數(shù)據(jù)科學(xué)簡(jiǎn)歷”,發(fā)現(xiàn)只要兩行代碼就可以收集這1000份簡(jiǎn)歷的文件名。
#Function to read resumes from the folder one by one mypath='D:/NLP_Resume/Candidate Resume' onlyfiles = [os.path.join(mypath, f) for f in os.listdir(mypath) if os.path.isfile(os.path.join(mypath, f))]
變量'onlyfiles'是一個(gè)Python列表,其中包含使用Python os庫(kù)獲得的所有簡(jiǎn)歷的文件名。如果你研究了文章,你還會(huì)看到你的簡(jiǎn)歷是如何根據(jù)關(guān)鍵詞分析幾乎自動(dòng)地進(jìn)行排名和淘汰的。既然我們正在努力提高幾率,我們需要關(guān)注你想要的工作規(guī)格和你目前的簡(jiǎn)歷。他們匹配嗎?
為了提高勝算,我們需要掃描工作描述、簡(jiǎn)歷,并衡量匹配程度。理想情況下,我們這樣做,以便輸出是有用的調(diào)整在游戲中為您。
因?yàn)檫@是你的簡(jiǎn)歷,你可能有PDF或DOCX格式。Python模塊可用于讀取大多數(shù)數(shù)據(jù)格式。圖1演示了如何讀取已將內(nèi)容保存到文本文件中的文檔。
第一步總是打開文件并讀取行。下面的步驟是從字符串列表轉(zhuǎn)換為單個(gè)文本,并在此過程中進(jìn)行一些清理。圖1創(chuàng)建了變量'job content'和'cv content',它們表示一個(gè)包含所有文本的string對(duì)象。下一個(gè)代碼片段展示了如何直接讀取Word文檔。
import docx2txt resume = docx2txt.process("DAVID MOORE.docx") text_resume = str(resume)
變量'text_resume'是一個(gè)string對(duì)象,保存簡(jiǎn)歷中的所有文本,就像以前一樣。也可以使用PYPDF2。
import PyPDF2
只需說,從業(yè)者有一系列的選項(xiàng)來閱讀文檔,將它們轉(zhuǎn)換為干凈的處理過的文本。這些文件可能很廣泛,很難閱讀,坦率地說,也很枯燥。你可以從總結(jié)開始。
我喜歡Gensim并且經(jīng)常使用它。
from gensim.summarization.summarizer import summarize from gensim.summarization import keywords
我們通過讀取一個(gè)Word文件創(chuàng)建了變量'RESUME_TEXT'。讓我們對(duì)簡(jiǎn)歷和職位發(fā)布做一個(gè)總結(jié)。
print(summarize(text_resume, ratio=0.2))
Summarizer.summarizer.summary將為您創(chuàng)建一個(gè)簡(jiǎn)潔的摘要。
summarize(jobContent, ratio=0.2)
現(xiàn)在你可以閱讀工作角色和你現(xiàn)有簡(jiǎn)歷的總體摘要了!您是否遺漏了摘要中突出顯示的工作角色?細(xì)致入微的小細(xì)節(jié)可以幫助你推銷自己。你的總結(jié)文件是否有意義,并顯示出你的基本素質(zhì)?
也許僅僅一個(gè)簡(jiǎn)明的總結(jié)是不夠的。接下來,讓我們來衡量一下你的簡(jiǎn)歷和工作說明書有多相似。圖2提供了代碼。
廣義地說,我們創(chuàng)建一個(gè)文本對(duì)象列表,然后創(chuàng)建一個(gè)sklearn CountVectorizer()類的實(shí)例。我們還引入了cosine_similarity度量,它幫助我們度量?jī)蓚€(gè)文檔的相似性。'您的簡(jiǎn)歷符合工作描述的69.44%'。聽起來很棒,但我不會(huì)得意忘形。現(xiàn)在您可以閱讀文檔的摘要并獲得相似度度量。幾率在提高。
接下來,我們可以看看職位描述關(guān)鍵詞,看看簡(jiǎn)歷中哪些是匹配的。我們是否錯(cuò)過了幾個(gè)關(guān)鍵字,可以加強(qiáng)匹配接近100%?現(xiàn)在去斯帕西。到目前為止,這是一段相當(dāng)長(zhǎng)的旅程。Gensim,sklearn,現(xiàn)在是Spacy!我希望你沒有頭暈!
from spacy.matcher import PhraseMatcher matcher = PhraseMatcher(Spnlp.vocab) from collections import Counter from gensim.summarization import keywords
我們將使用spacy的PhraseMatcher特性來匹配工作描述和簡(jiǎn)歷中的關(guān)鍵短語。Gensim關(guān)鍵字可以幫助提供匹配的短語。圖3顯示了如何運(yùn)行匹配。
使用圖3中的代碼片段提供了一個(gè)匹配的關(guān)鍵字列表。圖4顯示了總結(jié)這些關(guān)鍵字匹配的方法。使用集合中的計(jì)數(shù)器字典。
“報(bào)告”一詞包含在工作描述中,簡(jiǎn)歷有3個(gè)點(diǎn)擊量。哪些短語或關(guān)鍵字在招聘啟事中,而不在簡(jiǎn)歷中?我們能再加點(diǎn)嗎?我使用Pandas來回答這個(gè)問題-您可以看到圖5中的輸出。
如果這是真的,那也很奇怪。文檔級(jí)別的匹配率為69.44%,但看看簡(jiǎn)歷上沒有提到的一長(zhǎng)串關(guān)鍵詞。圖6顯示了所提到的關(guān)鍵字。
在現(xiàn)實(shí)中,與工作規(guī)范匹配的關(guān)鍵字很少,這導(dǎo)致我對(duì)69.44%的余弦相似度度量持懷疑態(tài)度。盡管如此,這種可能性還是在提高,因?yàn)槲覀兛梢栽诤?jiǎn)歷中看到職位說明書中沒有的關(guān)鍵詞。更少的關(guān)鍵字匹配意味著你更有可能被淘汰。查看缺失的關(guān)鍵字,你可以繼續(xù),加強(qiáng)簡(jiǎn)歷,并重新運(yùn)行分析。不過,只是在簡(jiǎn)歷中加入關(guān)鍵詞會(huì)有負(fù)面影響,你必須非常小心你的藝術(shù)。你可能通過了最初的自動(dòng)篩選,但你會(huì)因?yàn)槿狈懽骷寄芏惶蕴?。我們確實(shí)需要對(duì)短語進(jìn)行排名,并專注于工作規(guī)范中的基本主題或詞匯。
接下來讓我們看看排名短語。對(duì)于這個(gè)練習(xí),我將使用我自己的NLP類和一些我以前使用過的方法。
from nlp import nlp as nlp LangProcessor = nlp() keywordsJob = LangProcessor.keywords(jobContent) keywordsCV = LangProcessor.keywords(cvContent)
使用我自己的類,我從前面創(chuàng)建的job和Resume對(duì)象中恢復(fù)了排序短語。下面的代碼片段為您提供了方法定義。我們現(xiàn)在使用rake模塊來提取ranked_prasses和分?jǐn)?shù)。
def keywords(self, text): keyword = {} self.rake.extract_keywords_from_text(text) keyword['ranked phrases'] = self.rake.get_ranked_phrases_with_scores() return keyword
圖7提供了方法調(diào)用輸出的說明。
“項(xiàng)目管理方法-項(xiàng)目管理”排在第31.2位,所以這是招聘中最關(guān)鍵的話題。簡(jiǎn)歷中的關(guān)鍵短語也可以稍加改動(dòng)就打印出來。
for item in keywordsCV['ranked phrases'][:10]: print (str(round(item[0],2)) + ' - ' + item[1] )
閱讀簡(jiǎn)歷和招聘啟事中最重要的短語,我們可以問自己是否有匹配或相似的程度?我們當(dāng)然可以運(yùn)行一個(gè)序列來找出答案!下面的代碼在職務(wù)公告和簡(jiǎn)歷中的排名短語之間創(chuàng)建交叉引用。
sims = [] phrases = [] for key in keywordsJob['ranked phrases']: rec={} rec['importance'] = key[0] texts = key[1] sims=[] avg_sim=0 for cvkey in keywordsCV['ranked phrases']: cvtext = cvkey[1] sims.append(fuzz.ratio(texts, cvtext)) #sims.append(lev.ratio(texts.lower(),cvtext.lower())) #sims.append(jaccard_similarity(texts,cvtext)) count=0 for s in sims: count=count+s avg_sim = count/len(sims) rec['similarity'] = avg_sim rec['text'] = texts phrases.append(rec)
注意,我們使用fuzzy-wuzzy作為匹配引擎。代碼還有一個(gè)Levenshtein比率和JACCARD_SIMAGILE函數(shù)。圖8展示了這可能是什么樣子。
“重要性”變量是簡(jiǎn)歷中的短語得分?!跋嗨菩浴弊兞渴荈uzzy-Wuzzy的比值得分?!绊?xiàng)目管理方法”一詞排在31.2位,但交叉引用被評(píng)分的簡(jiǎn)歷短語平均得分僅為22.5位。雖然項(xiàng)目管理是這份工作的首要任務(wù),但簡(jiǎn)歷在不同的技術(shù)項(xiàng)目上得分更明顯。通過執(zhí)行類似的練習(xí),您可以看到AI是如何對(duì)抗應(yīng)用程序的。
圖9顯示了另一個(gè)視角。使用標(biāo)記(單詞)顯示每個(gè)單詞在工作描述中的重要性,而不是在簡(jiǎn)歷中的點(diǎn)擊量--文檔中某個(gè)特定單詞出現(xiàn)的次數(shù)越多,影響就越大。財(cái)務(wù)這個(gè)詞在職位描述中的重要性不高,但在簡(jiǎn)歷中的影響力很大。這是一個(gè)財(cái)務(wù)人員在找IT工作嗎?文字可以出賣你與AI!
我敢肯定你現(xiàn)在已經(jīng)拿到那張照片了。使用NLP工具和庫(kù)可以幫助真正理解一個(gè)工作描述和衡量相對(duì)匹配。這當(dāng)然不是強(qiáng)健或福音,但它確實(shí)傾向于甚至幾率。你的話很重要,但你不能在簡(jiǎn)歷中胡亂添加關(guān)鍵詞。你真的得寫一份強(qiáng)有力的簡(jiǎn)歷,申請(qǐng)適合你的角色。文本處理和文本挖掘是一個(gè)很大的課題,我們只觸及到可以做什么的表面。我發(fā)現(xiàn)文本挖掘和基于文本的機(jī)器學(xué)習(xí)模型非常準(zhǔn)確。讓我們看看使用牛郎星的一些視覺效果,然后總結(jié)。
我最近經(jīng)常使用牽牛星,所以Seaborn或Matplotlib更多。牽牛星中的語法正好能讓我聽懂。我做了三個(gè)視覺效果來幫助討論--圖10顯示了關(guān)鍵字在簡(jiǎn)歷中的重要性和影響力。使用顏色比例,我們可以看到像收養(yǎng)這樣的詞在簡(jiǎn)歷中出現(xiàn)了兩次,但在招聘公告中的優(yōu)先級(jí)較低。
圖11顯示了在招聘公告和簡(jiǎn)歷中找到的排序主題的交叉引用。最重要的短語是“項(xiàng)目管理…”,但它在簡(jiǎn)歷中的排名中得分較低。
圖12描繪了類似的詞。財(cái)務(wù)在簡(jiǎn)歷上被用了10次,但在招聘啟事上卻只字不提。項(xiàng)目一詞會(huì)在簡(jiǎn)歷中提到,也會(huì)出現(xiàn)在招聘公告中。
看著圖表,在我看來簡(jiǎn)歷和工作描述似乎不太匹配。很少的共享關(guān)鍵詞和排名短語看起來很不一樣。這就是讓你的簡(jiǎn)歷被雜草洗掉的原因!
閱讀這篇文章可能更像是一部大預(yù)算的“拍攝他們死的CGI好萊塢”電影。所有的大牌演員一般都出現(xiàn)在那些大片中。大型NLP庫(kù)在本文中扮演了主要角色,我們甚至還客串了更多的名字,也許是更老、更成熟的名字,比如NLTK。我們使用了Gensim、Spacy、sklearn等庫(kù),并演示了它們的用法。我自己的類客串了一次,包裝了NLTK、rake、textblob和一堆其他模塊,所有這些都展示了對(duì)文本分析的見解,向您展示了如何與獲得夢(mèng)想工作的機(jī)會(huì)分開。
想要找到理想的工作,需要清晰而不懈地關(guān)注細(xì)節(jié),仔細(xì)準(zhǔn)備工作申請(qǐng)、簡(jiǎn)歷和求職信。使用自然語言處理不會(huì)把你變成最好的候選人。那取決于你!但它可以提高你擊敗AI驅(qū)動(dòng)的早期回合的機(jī)會(huì)。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10