因为这个功能实现在第五部分,所以标题是5开头,比较多就懒得改了,大家明白就好
注意:本资源仅共学习参考,任何人切勿以任何形式商用!!!尊重信息版权
然后开头申明,本文包含的情感分类及公司排序不涉及真实排序,请勿当真,纯粹随机选的评论= =,但是都是大厂这没毛病。
温馨提示,本文虽然涉及到爬虫,但是因为博主可以说非常不喜欢爬虫,并且只是出入门户就懒得理解了,不过代码注释都非常详细,大家想要注重理解爬虫的还是找专业的吧,我这里爬虫都是一笔带过而已。当然也可以结合代码注释来理解,毕竟流程都一样。
还是老规矩,如果对大家有所帮助希望可以点赞,收藏,关注,但是这次代码不可以放上来了(害怕)
这里涉及的情感分类在我前面的博客有细致的讲解,大家最好结合前面的一起食用,我做的东西一般都是贯穿性的,因为可以加深理解,并且高效。
Bert细致讲解
5.1 核心功能实现流程描述;
首先是信息的筛选,通过爬取lp和某直聘的Python相关职位所有信息(北京和上海两个城市),将所爬取的信息作为形成数据库的基石。这里我共实现了两个,一个是lp,满足所有验收要求,一个是某直聘,满足搜索引擎(上述app)的功能要求。
1.网站1
爬取两个城市共400个职位链接->爬取详情信息->分词->数据清洗->去停->词频统计->去除无意义词汇与信息(例如单个的字)->通过TD-IDF提取关键词并生成词云
2.网站2
爬取两个城市近4K的职位数据(包括薪资,地点,所需技能,工作经验要求,学历要求以及岗位名称)->城市平均薪资,经验要求,技能需求以及学历需求的统计->技能词云
Top10公司评价统计(自己找的)->公司介绍爬取->公司总技能统计->信息树搭建->通过bert预训练的情感分析任务在评价上作zero-shot测评->根据评价得分rank公司并构建简单的关系图->搭建简易网页,实现本地搜索功能
其中Top10公司评价是自己找的原因是没有地方可以爬取,因为只有在专业求职app下面一定是夸这个公司的,不真实,但又没办法大规模爬,因为无法判别是不是评判公司的信息,所以只能我自己去找一个公司10个评价,根据predictions累计分数得到公司对应总分。
5.2 爬取流程分析;
其实感觉这个部分没有什么好讲的,我是直接套的网上的流程,然后找的对应的代码进行网页的爬取:
lp用的是request,首先在网站上输python,把网址复制下来,并且获取地区编号,找到规律一个地区爬了200个就换一个。然后用在代理池里面得到的ip作为user-agent去爬具体信息(不怕封就直接一直爬不用sleep)并存入job.txt文件待用。
直聘用的是webdriver,这个有些不一样,因为我不需要具体信息,所以爬的是python页面中的一些基本信息以及tag(技能),可以通过正则式获取,这一页爬完了就下一页,但是防封爬一页sleep 5s,一个城市爬够了就换下一个即可,request要url代号,这个只需要把对应的标签记下来就行了,爬取的信息放入数据.csv待用。
注:Boss的这个爬虫是我在网上找的改的,且只是微调,但太多一样的都标原创,我也没办法给出链接,大家一找就可以找到了,这里我只使用了他的数据做分析。
5.3 解析流程分析;
5.3.1 网站1数据:
其实这个就跟上面的流程差不多,要求的数据分析太简单了都不知道要讲什么,就大致把我写的代码过一下吧:
5.3.1.1 首先把刚才的job.txt文件读入,字符串除特殊符号相信大家都会:
说起来这个代码还是我刚自学python的时候写的。
5.3.1.2 然后分词去停,用jieba自带的lcut函数就可以了,去停对着停用词标筛就ok了,至于一些无意义词的筛选,特殊的也可以仍停用词表里去,单个或者超长的词直接删就行了。
5.3.1.3 最后就是提取关键词生成词语咯,这个也非常简单,只是我发现普通的tf-idf并不适我们爬取的文档,首先因为我忘记分类了(全存一个文件里去了…),其次就是用了之后发现rerank差别不大,所以为了更显著,我们要拉高idf的重要性。不过其实每个文档的信息差不多,所以我们把job文件等分为400份就行了(爬了400个工作),一共8w个词,所以我们200个词仍一个文档就好,然后统计逆词频
可以看到就是一个文档里面多个词只统计一次咯,不过注意我们说了要提高权重,所以与普通的idf比,我们把计算的分母乘2:
5.3.1.4 然后就可以rerank得到我们想要的结果了(并生成词云)
生成词云更可以直接套了,先根据词频对应随机颜色(温度和词频还是要有关更好)
可以看到左边和右边不一样,左边的是用寻常idf,右边是加大idf权重的结果,可以看到右边的一些技能就出来了
5.3.2 Boss
接下来算是重头戏了,这一部分是为了实现我搜索引擎的功能:
上面说了我们爬取到的信息已经存入数据.csv,如图所示:
然后我们通过预训练好的Bert情感分类模型对top10公司评价进行得分计算:
这个就不贴代码了,也没必要,把我预训练的精度图贴上来吧:
zero-shot的结果排名:
然后结合我们爬取的top10公司的介绍就可以建造如下的存储字典:
如图,这个存储结构就可以非常方便我们对应索引(虽然都是某些类别的问题)
首先我们识别的一个功能就是判断公司的好坏,我们通过每个公司对应的score来排序,实现关系,比如你问:有什么比阿里好的公司?
然后就可以在output中显示score比他高的公司简介
这里我们统一同类词,只写了几个,其他相统一都是类似的。
如上所示,统一同样的词,方便判断(其实也可以直接判断是否在列表里面)
具体实现方式其实比较简单,就是把查询的内容先分词,
然后关键词对应问题。
还有一个就是找还不错的公司,也是一样的:
前5认为好,后面的认为不好,然后返回的都是这些公司的简介
还有的功能就是对于职位需求的检索,包括对于地点,公司,具体职位,具体技能的识别与检索,代码如下:
其他的还可以实现很多功能,都是类似的,基于词语本身的,就不多写了。
然后我还实现了一个简单的网页:
这里方便起见,读文件是通过下载搜索框内的文本,然后运行我们的py脚本,就会生成output,通过文件选取和显示就可以在网页中显示了。
可以看到就在网页上显示咯,因为我不怎么会html,没办法切网页显示,所以就把所有返回的结果全扔到output里面一起显示啦。
还可以推荐工作哦,反正上面所提到过的问题基本都可以实现检索返回。
完整代码:
1.网站1内容分析:
import jieba
import matplotlib.pyplot as plt
import wordcloud
import random
import math
# 获得去除标点的文本
def get_text(file_name):
with open(file_name, 'r', encoding='utf-8') as fr:
text = fr.read()
# 要删除的标点
for ch in '|
}
ul{
padding-left:0;
list-style:none;
}
textarea{
display:block;
width:640px;
height:30px;
margin:100px auto 0;
font-size: 25px;
}
.btn{
width:500px;
margin:10px auto;
text-align:center;
font-size: 25px;
}
.msg{
margin:0 auto;
width:500px;
}
.msglist{
line-height:50px;
border-bottom:1px dashed #ccc;
text-indent: 2em;
}


