likes
comments
collection
share

Neo4j图数据库构建职位领域知识图谱

作者站长头像
站长
· 阅读数 6

数据采集

数据来源

本文调研了多家,包括“实习僧”、“Boss直聘”、“智联招聘”、“拉勾网”等求职网站,职位知识图谱的数据来源最终选择了“Boss直聘”。“Boss直聘”作为行业领先的权威网站,成立七年以来已经服务过近1亿的用户和超过600万的企业雇主,其中含有大量的职位信息数据。下图为网站数据页展示图:

Neo4j图数据库构建职位领域知识图谱

Neo4j图数据库构建职位领域知识图谱

数据爬取

由上一部分可知我们需要爬取的职位信息在网页上的表现形式,我们需要完整的职位信息,就需要将所有相关的信息都进行爬取,我们在进行数据爬取的同时还要对爬取的数据进行简单的数据处理,获取的数据中除了工作职责以及职位要求这两项是非结构化的数据,其他数据都可作为半结构化数据来使用,我们只需要进行关系的建立便可转化为三元组的格式,之后再对非结构化的两项数据进行处理。本文使用Selenium搭建了一个自动化的爬虫,再结合正则以及CSS选择器对网页中所需的数据进行获取,得到我们想要的职位信息数据。

页面获取

首先我们需要数据源的网页信息,但是大部分网站是禁止爬虫,设置了反爬虫机制,用传统的Request请求会得到乱码并且限制访问,会导致IP无法访问该网站,所以最终选择了采用Selenium对网站上的职位信息进行爬取。Selenium最初是一个自动化测试的软件,根据这一特性,它可以模拟真实用户访问浏览的操作,Selenium2.0甚至可以模拟鼠标和键盘事件。所以在本项目中我使用Selenium来模拟人的操作,对网页进行访问、翻页以及关闭等行为。

分析页面

本项目选择使用css_selector表达式定位所需要职位信息,我们首先使用Selenium模块来模拟用户使用浏览器对网页进行访问并且自动化的进行点击翻页以及关闭页面,在成功打开网页之后通过css_selector选择器解析网页数据,对职位各项信息进行匹配捕捉,并进行存储。

Neo4j图数据库构建职位领域知识图谱

本项目爬取的数据保存为CSV格式,以便于之后对数据进行处理。本文共爬取数千个职位的相关数据信息,包括:地区、薪资、所需经验、公司名称以及职位要求等。

Neo4j图数据库构建职位领域知识图谱

数据处理

招聘信息中主要包括职位名称、工作城市、薪资、职位要求等具体的信息,其中最重要的职位要求信息时非结构化的信息,使用Jieba分词实现TD-IDF算法对职位要求信息进行分词提取,TD-IDF算法的词频文件使用了清华大学公开的IT词库。同时将分词的结果与极客时间发布的词库进行一个匹配,已得到最合适的数据信息。

知识图谱的构建

建立三元组数据

本项目通过对爬取的信息进行分析处理,所得数据主要分为这几个实体类型:职位名称、薪资、工作地点、公司名称、公司所属领域、福利、职位要求等。下表3.1所示为职位三元组数据构建示例表。

实体关系实体
职位名称职位薪资具体薪资
职位名称职位地点具体地址
职位名称所属公司公司名称
公司名称所属领域领域名称
职位名称所需技术职位要求

数据存储与展示

经过上述过程构建出职位领域三元组数据模型后,接下来就是将这些数据存放到Neo4j数据库中。py2neo是python中直接可以在Neo4j中进行增删改查的模块,本文采用python语言的py2neo包将职位三元组数据导入到图数据库中,如图3-5展示了部分数据存储的代码。为了构建不同实体之间的关联,在建立实体前首先匹配有无相同实体,不要创建重复的实体,图3-6中展示了本文构建的职位知识图谱的局部图形。

Neo4j图数据库构建职位领域知识图谱

Neo4j图数据库构建职位领域知识图谱

本项目的数据来源主要是“Boss直聘”网站,经过数据爬取、数据处理、数据存储等步骤最终搭建了职位领域的知识图谱,这些数据为之后推荐系统的实现打下坚实的基础。