python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集

简介

信息检索小组项目,队友已同意上传

用spider爬拉钩网站
排序文档基于tfidf和cosine相似性
从搜索历史和用户标记的相关和不相关的结果中学习IDE规则方法,优化结果
基于Tkinter的UI
标准登录模块
主搜索窗口与页面切换

这里我只放出我贡献相关的部分,原文为英文,懒得翻译就机翻一下,文末给出文件链接

正文

数据处理搜索引擎

我们遵循基本的管道,并实现了排名搜索引擎与一些经典的算法,我们已经研究过。

首先,我们将每个记录中的元素组合成字符串,并将这些字符串作为文档。 然后我们标记它们。 中文文本需要通过分词来获得单个单词,所以我们导入jieba库来对我们从抓取数据的结果中得到的中文数据进行标记。 杰巴库是一个优秀的中文分词第三方库。 解巴库分词原理:用一个汉语词库来确定汉字之间的相关概率,汉字之间概率较高的单词形成短语形成分词结果。

杰巴库提供了三种分割模式:1)精确模式,返回没有冗余的列表式分词结果。 2)Full模式,返回具有冗余的列表类型分词结果。 3)搜索引擎模式返回一个列表类型的分词结果与冗余,细分较长的单词。 在这里我们选择精确的模式。 此外,我们还使用nltk来标记英语数据,如果有的话。 然后用nltk删除英文的stopword,哈尔滨工业大学中文的stopword列表。 为了将具有相同含义的单词结合起来,对于英语,我们在nltk中使用porterstemmer;对于汉语,HITIR-LabTongyiciCilin(Extended)可以在未来使用,但在这里我们不做汉语同义词合并。 然后,我们将每个文档中单词的频率计数成一个频率矩阵。 接下来,我们用归一化计算tfidf矩阵。 tfidf矩阵是tf矩阵和idf矩阵的乘法结果。 计算tf矩阵为,其中f为频率矩阵。 以国防军是关于整个语料库的,计算为,其中N是所有文档的数量,分母是包含这个术语的文档数量。在这里插入图片描述
在这里插入图片描述

我们为数据库存储tfidf矩阵,并读取我们的搜索引擎每次启动,所以除了第一次,我们不必计算它。 计算需要时间。 以色列国防军也储存起来进行后续计算。

用户标记为相关或无关的查询和记录首先与记录相同,计算tfidf,但对整个语料库使用存储的IDF。 然后用标准rocchio公式:
在这里插入图片描述
a为1 b为0.75 y为0.25
新query=第一条query+b标记的所有相关记录的和-y标记的所有不相关记录和
,生成一个带有权重的新查询,对查询和标记的记录列表进行处理。 如果选择无历史记录的简单搜索模式,则跳过此步骤,直接使用查询频率向量。

最后,计算了数据库的加权查询与TFIDF矩阵之间的余弦相似度。 然后执行快速排序。 快速排序主要是利用分治思想。 也就是说,首先将原问题划分或缩小为较小的子问题,然后递归或迭代求解子问题,最后合成子问题,得到原问题的解。 最后,我们得到了具有文档索引及其相似性分数的排序列表。然后我们回去,通过索引找到文档并显示它们。

python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集_第1张图片

图4。 我们系统的管道

UI和运行

我们在python中使用tkinter来构建我们的用户界面。 我们使用pickle来序列化用户信息。 我们做了一个标准登录系统的完整功能,我们有登录和注册功能,我们有验证,处理任何无效的操作。

python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集_第2张图片

图5.6。 登录窗口

主窗口上方是输入框和按钮,左边是记录用户标记的按钮,右边是显示结果的表格。 在左侧底部,我们还提供了页面快速显示更多的结果。、

python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集_第3张图片

图7。 简单的搜索与“阿里巴巴杭州2000人以上”

我们的用户可以通过点击左边的按钮将文档标记为相关和无关的,我们的系统可以从记录中学习。 例如,如果我们选择第11条记录作为相关的记录,那么我们使用学习搜索时的结果如图8所示。 请注意,我们的学习搜索没有考虑到当前的输入。

python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集_第4张图片

图8。 学习了搜索例子

注意事项:

数字,例如5到10年,小行将被消除,因为停止词和两个数字将成为一起。 所以,我们必须确保数字之间至少有一个空格,我基本上在标记之前用一个空格替换这些空格。

识别信息的重复性可能会影响我们的结果。 例如,每个公司都有一个独特的名称和一个独特的公司ID,所以当我们的系统从标记的文档中学习时,它会从中学到更多的东西,这意味着重复的识别在学习时会有更高的权重,从其他角度来看,同一公司比同一信息更有可能上升排名。

评价:

我们缺乏政府标准。 当我们试图在我们的系统和拉古网站上使用一些示例查询并进行比较以评估我们的结果时,由于我们的数据集相对于整个拉古数据库来说相对较小,它显示出问题,许多相关记录出现在我们的数据库中。 当我们的数据库接近拉古数据库时,我们将来可能会做有意义的评估。 但我们仍然在这里展示了一些评估方法。

设正和负是我们系统分类的相对和无关结果,真和假是我们分类的准确性,这是我们的结果和真实类的比较,同样是正确的,反之亦然。

分类正确 分类错误
归类为阳性 TP FP
分类为阴性 TN FN

表1:评价基数

一些经典评价:

python实现搜索引擎,数据检索项目:职业查询系统(基本的搜索引擎+爬虫拉勾网职业数据库),搜索引擎可以学习用户的标记,职业网站爬虫生成数据集_第5张图片

ROC曲线:Roc曲线是所有可能阈值的FPR和TPR对的曲线,x轴上的FPR和y轴的TPR。 曲线下面积越大,系统越好。

仅供学习使用,请勿直接搬用,请大家学习原理和对系统改进

GitHub地址:

包含原report,运行视频,源代码
包含用到的jieba库,哈工大中文终止词库
https://github.com/FrankYJY/Job-Hunter-Search-Engine-with-crawled-Job-Dataset
如果你觉得有帮助的话给颗Github星星吧
如果你做到了改进,来成为contributor吧

你可能感兴趣的:(python,搜索引擎,爬虫,算法)