/linyiSearcher

基于python3搭建了一个简单的搜索引擎

Primary LanguageJavaScript

为了完成我的信息检索选修课大作业,写下了这个简单的小项目。

这里是一个python3 实现的简易的搜索引擎

我把它取名叫linyiSearcher


所需要的python依赖包在requirements.txt中 可以使用 pip install -r requirements.txt 一次性安装全部


一共分成3部分完成

1_spider.py 是一个爬虫, 爬取搜索引擎的语料库

2_clean_data_and_make_index 是对爬下来的数据 进行一些清晰工作,并且将数据存入数据库,建立索引

这里使用了 sqlite数据库,为了方便数据和项目一同携带

3_searcher.py 简易的web后端, 实现了

1 在网页输入搜索关键字, 在后端接收到关键字

2 对关键字进行分词

3 在索引中查找和关键字有关的文档

4 按照余弦相似度 对文档进行排序

5 把相近的文档展示出来

自己的知识储备和代码能力都捉襟见肘。

大神来看,还望海涵~欢迎大家批评指正共同学习


1 爬虫:

因为没有数据,只能写爬虫来做, 又只有自己的笔记本来跑,所以数据量也做不到非常大

在这里 写了1程序 爬了百度贴吧 娱乐明星分类下面的所有1级页面帖子的标题 当做语料库

爬取下来的数据存在了 ./data/database.csv 下

    数据有2列 分别是  title 和url

2 数据清洗 并 建立索引:

database.db  是一个sqlite数据库文件

首先将每个文档存到了数据库当中  

数据库表为 page_info(id,keyword, title, url)

    id 自增主键 
    
    keyword: 存了该文档文字用jieba分词打散后的词汇列表(用空格隔开所有词语的字符串)
    
    title: 文档的文字内容 
    
    url: 该文档的网页链接
    
然后 把每个文档 使用jieba分词工具, 打散成词语,把所有词语放到一个集合中(集合能去重)

    把所有词 存入数据库 建立索引  
    
    索引这样理解:
    
        关键词:  你好  包含关键词的文档: <1,2,6,8,9>
        
    表为 page_index(id, word, page_id)
    
        id: 自增 主键
        
        word: 当前关键词
        
        page_id: 包含该关键词的文档id 也就是page_info.id

3 实现检索:

首先 使用了bottle框架,是一个非常轻巧的web后端框架,实现了一个简单的web后端

前端页面使用了bootstrap 的css样式,,毕竟自己什么垃圾的一p

检索的实现过程:

    1 后端拿到检索的关键词,用jieba分词 把拿到的语句打散成词汇 形成关键词keyword_list
    
    2 在建立的索引表page_index中,搜关keyword_list中出现的词汇的page_id
    
    3 在包含所有keyword的文档上 计算和keyword的余弦相似度,然后降序排列
    
    4 返回给前端显示搜索结果