python实现搜索引擎——搜索引擎架构(一)
python實現搜索引擎——搜索引擎架構(一)
一、實驗介紹
1.1 實驗知識點
- 介紹本課程實現的搜索引擎的架構設計
- 介紹搜索引擎所必要的組件
- 對課程項目進行開發環境的部署和配置
- 創建項目及必要的代碼目錄
1.2 實驗環境
- Python3.6
- Xfce 終端
二、開發準備
2.1 實現的搜索引擎的架構設計
如何構建一個搜索引擎,從專業名稱來看,叫做信息檢索,在《信息檢索導論》一書中,這個概念定義如下:
信息檢索是從大規模非結構化數據(通常是文本)的集合(通常保存在計算機上)中找出滿足用戶信息需求的資料(通常是文檔)的過程。
由于我們的目標文檔全是技術博客,所以我們構建的搜索引擎是針對技術博客領域的垂直搜索引擎:
根據上面圖示可以很清晰地看出一個搜索系統的必要模塊組件,下面我將以一個信息檢索小例子來帶大家根據上圖走一遍流程。
數據文檔暫且不必從網絡上爬取,讓我們根據以下的三篇文檔來了解下文檔檢索的一些概念:
- 文檔1:舉杯邀明月,對影成三人。
- 文檔2:君不見黃河之水天上來,奔流到海不復回。
- 文檔3:明月幾時有,把酒問青天。不知天上宮闕,今夕是何年。
這三句詩大家自然是耳熟能詳,假設我們需要從這些文檔中搜索出明月和天上,因為這僅僅是三條簡單的詩詞文檔并且我們非常熟悉,所以可以很迅速的得出文檔三包含這兩個關鍵詞,從第一行看到最后一行,從第一句看到最后一句,我們就能得出答案,這種方法被稱之為線性掃描法。
但是這種線性掃描法局限性太多,讓我們看看一種更好的方案,詞項-文檔(term-doc)的關聯矩陣:
| 明月 | 1 | 0 | 1 |
| 天上 | 0 | 1 | 1 |
詞項—文檔關聯矩陣,其中每行表示一個詞,每列表示一個文檔,當詞 t 在文檔 d 中存在時,矩陣元素 (t,d) 的值為1,否則為0,這樣就得到一個布爾值構成的詞項-文檔關聯矩陣,在該模型下,每篇文檔就可以被看成是一系列詞的集合。
有了詞項-文檔關聯矩陣,就可以很輕松地使用布爾檢索模型進行查詢。
有了詞項-文檔關聯矩陣,就可以很輕松地使用布爾檢索模型進行查詢。
觀察上面的詞項-文檔關聯矩陣,可以看到:
- 明月詞匯:(1,0,1)
- 天上詞匯:(0,1,1)
然后對這兩個查詢詞進行基于位的與操作,明月 AND 天上 => (1,0,1) AND (0,1,1) = (0,0,1),顯而易見,文檔三就是我們要的結果。
當文檔數量增大,詞項-文檔(term-doc)的關聯矩陣高度稀疏,矩陣中的大部分元素為0,此時只記錄原始矩陣中1的位置的表示方法比詞項-文檔(term-doc)矩陣效果更好。
沿著這個方向思考解決方案,引出的就是信息檢索中的一個核心概念——倒排索引(inverted index)。
2.2 搜索引擎必要的組件
2.2.1 文檔爬蟲
互聯網上文檔數據數不勝數并且種類繁多,每日還以非常快的速度在增加,我們需要一個手段來實現對目標文檔數據(技術類型文檔)進行收集。
基于爬蟲的自動化收集是非常好的一個文檔收集方式,實驗二詳細介紹了什么是爬蟲,怎么編寫爬蟲以及如何構造一個爬蟲系統。
文檔爬蟲的目的在于為搜索引擎提供檢索對象文檔,文檔數據越豐富,用戶查詢結果就提供更多的可能,幫助用戶找到理想的搜索結果。
2.2 建立索引
傳統的線性掃描在數據龐大的情況下是不適用的,一種非線性的掃描方式就是給文檔建立索引,這樣做有以下好處:
在大量數據文檔下也能進行查找
更加靈活的匹配方式
可以對結果排序
具體實現將在實驗三進行詳解。
2.3 網頁排名
在文檔集規模很大的情況下,滿足布爾查詢結果的文檔可能有很多,大量滿足搜索條件的文檔可能并不都是搜索者想要的,因此需要一個對文檔進行評分以及排序的機制,為此,我們的搜索引擎需要對每個匹配的文檔進行分數計算,從而根據網頁排名進行排序展示,給與用戶更加友好的結果展示。
具體實現將在實驗六進行詳解。
三、實驗步驟
3.1 對課程項目進行介紹
本課程的目的是和大家一起構建一個基于技術博客的垂直搜索引擎,
- 使用Python3.6進行開發,
- 使用vim對代碼進行編寫,
- 數據庫使用的是MongoDB。
這門課程的整體架構如下圖(注1):
3.2 創建項目必要的代碼目錄
基于技術博客的垂直搜索引擎的項目架構我們已經了解完畢,接下來就是進行項目編碼,首先我們得取個名字,我將其命名為:monkey。
本次實驗的項目目錄在 /home/shiyanlou/Code/monkey 目錄下,本項目是使用pipenv進行包管理。
初始化環境:
目前,最外一層項目目錄結構如下:
. ├── Pipfile ├── Pipfile.lock ├── README.md ├── docs ├── monkey └── tests此時,項目的基本環境已經搭建完畢,利用 pipenv 可以很方便地對包以及項目環境進行管理:
# 進入項目 monkey 的虛擬環境,在 monkey 虛擬環境中默認使用的就是 Python3.6 pipenv shell看到以下類似的輸出即可理解為項目環境搭建成功:
四、實驗總結
本次實驗我們先介紹了搜索引擎的架構設計以及其中一些組件的作用,還畫出了項目的整體結構以及完成了項目的準備工作,其中用到的包管理工具 pipenv,如果諸位不熟悉的話可以先谷歌了解一下。
接下來我們將進入到編碼階段,只要你有Python的語法基礎,做后面的實驗應該沒有太大問題,各位請加油。
參考鏈接
文中一些參考文檔和資源鏈接:
- pipenv.
- 注 1:圖設計參考processon的模板
- pipevn快速入門
- ruia官方文檔(第二節要用)
總結
以上是生活随笔為你收集整理的python实现搜索引擎——搜索引擎架构(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业申办ISO27001和ISO2000
- 下一篇: Python大文件切割