Neo4j圖資料庫構建職位領域知識圖譜

語言: CN / TW / HK

攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第13天,點選檢視活動詳情

資料採集

資料來源

本文調研了多家,包括“實習僧”、“Boss直聘”、“智聯招聘”、“拉勾網”等求職網站,職位知識圖譜的資料來源最終選擇了“Boss直聘”。“Boss直聘”作為行業領先的權威網站,成立七年以來已經服務過近1億的使用者和超過600萬的企業僱主,其中含有大量的職位資訊資料。下圖為網站資料頁展示圖:

image.png

image.png

資料爬取

由上一部分可知我們需要爬取的職位資訊在網頁上的表現形式,我們需要完整的職位資訊,就需要將所有相關的資訊都進行爬取,我們在進行資料爬取的同時還要對爬取的資料進行簡單的資料處理,獲取的資料中除了工作職責以及職位要求這兩項是非結構化的資料,其他資料都可作為半結構化資料來使用,我們只需要進行關係的建立便可轉化為三元組的格式,之後再對非結構化的兩項資料進行處理。本文使用Selenium搭建了一個自動化的爬蟲,再結合正則以及CSS選擇器對網頁中所需的資料進行獲取,得到我們想要的職位資訊資料。

頁面獲取

首先我們需要資料來源的網頁資訊,但是大部分網站是禁止爬蟲,設定了反爬蟲機制,用傳統的Request請求會得到亂碼並且限制訪問,會導致IP無法訪問該網站,所以最終選擇了採用Selenium對網站上的職位資訊進行爬取。Selenium最初是一個自動化測試的軟體,根據這一特性,它可以模擬真實使用者訪問瀏覽的操作,Selenium2.0甚至可以模擬滑鼠和鍵盤事件。所以在本專案中我使用Selenium來模擬人的操作,對網頁進行訪問、翻頁以及關閉等行為。

分析頁面

本專案選擇使用css_selector表示式定位所需要職位資訊,我們首先使用Selenium模組來模擬使用者使用瀏覽器對網頁進行訪問並且自動化的進行點選翻頁以及關閉頁面,在成功開啟網頁之後通過css_selector選擇器解析網頁資料,對職位各項資訊進行匹配捕捉,並進行儲存。

image.png

本專案爬取的資料儲存為CSV格式,以便於之後對資料進行處理。本文共爬取數千個職位的相關資料資訊,包括:地區、薪資、所需經驗、公司名稱以及職位要求等。

image.png

資料處理

招聘資訊中主要包括職位名稱、工作城市、薪資、職位要求等具體的資訊,其中最重要的職位要求資訊時非結構化的資訊,使用Jieba分詞實現TD-IDF演算法對職位要求資訊進行分詞提取,TD-IDF演算法的詞頻檔案使用了清華大學公開的IT詞庫。同時將分詞的結果與極客時間釋出的詞庫進行一個匹配,已得到最合適的資料資訊。

知識圖譜的構建

建立三元組資料

本專案通過對爬取的資訊進行分析處理,所得資料主要分為這幾個實體型別:職位名稱、薪資、工作地點、公司名稱、公司所屬領域、福利、職位要求等。下表3.1所示為職位三元組資料構建示例表。

| 實體 | 關係 | 實體 | | ---- | ---- | ---- | | 職位名稱 | 職位薪資 | 具體薪資 | | 職位名稱 | 職位地點 | 具體地址 | | 職位名稱 | 所屬公司 | 公司名稱 | | 公司名稱 | 所屬領域 | 領域名稱 | | 職位名稱 | 所需技術 | 職位要求 |

資料儲存與展示

經過上述過程構建出職位領域三元組資料模型後,接下來就是將這些資料存放到Neo4j資料庫中。py2neo是python中直接可以在Neo4j中進行增刪改查的模組,本文采用python語言的py2neo包將職位三元組資料匯入到圖資料庫中,如圖3-5展示了部分資料儲存的程式碼。為了構建不同實體之間的關聯,在建立實體前首先匹配有無相同實體,不要建立重複的實體,圖3-6中展示了本文構建的職位知識圖譜的區域性圖形。

image.png

image.png

本專案的資料來源主要是“Boss直聘”網站,經過資料爬取、資料處理、資料儲存等步驟最終搭建了職位領域的知識圖譜,這些資料為之後推薦系統的實現打下堅實的基礎。