聲明:本文首發在博客園晨星落羽,Shulin_Cao和lvmememe首頁,轉載請注明出處。
前言
2016.5到2017.5,我們三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一個本科生科研項目——簡體中文版兒童搜索引擎。在做的過程中我們發現,搜索引擎的框架其實都差不多,一些技術比如網頁爬蟲、網頁提取、信息檢索在大多數垂直搜索引擎中是通用的,只不過數據庫中存的資源不同而已。比如把全網資源都包羅進來,就成了百度,把購物信息包羅進來,就成了淘寶。因此就有了這篇文章,把我們在做項目的過程中用到的技術分享出來,希望能夠對搜索引擎感興趣的朋友有所幫助。本文會詳細說明項目中我們已經實現的功能使用的技術,同時也會闡述一些我們希望以后可能會實現的功能。本文期望達到的效果是,一年以后,當我已經忘記現在用到的技術細節,自己再照着這篇文章做,依然可以做出一個同樣的搜索引擎。
事實上,本文介紹的框架是一種最基本的簡易框架,項目的完成也不代表項目的完善,我們還有許多功能鑒於時間限制和自身水平的限制,暫時沒有實現。這些功能在文章中也會提及,只是無法展開細講。尤其是機器學習、人工智能、數據挖掘等技術,在本文中不會涉及,本文關注更多的是網頁爬蟲(信息獲取)、詞條排序(信息檢索)、前端后端通訊(信息展示),用到的語言主要包括Python、Java、PHP和前端網頁制作的語言。
目前,項目已經發表了五篇論文,包括三篇中文期刊和兩篇國際會議。
1. 兒童搜索引擎的現狀與分析
3. 基於 Lucene 與 Socket 通信的中文搜索引擎的設計與實現
4. An Algorithm to Extract and Judge the Main Text Based on the Law of Total Probability
5. KidSE: A Search Engine Designed for Children which Supports Simplified Chinese
其中,第一篇論文目前已經發表,后面四篇已經收到錄用通知等待發表。本文的很多想法也都是對論文中的內容進行整合。后續發表后會對論文鏈接進行更新。
或許在專業人士看來,本文所講解的技術也只是幾十年前的古老技術,但是我們寫這篇博客的目的也不是炫耀自己的技術有多高超,只是想分享一下自己的成果。希望大牛們諒解我們作為低年級本科生水平有限,對於文章的錯誤,歡迎批評指正,如果有好的想法,也歡迎多多交流!
項目github:https://github.com/1049451037/kidsearch
事實上,這篇博客的樣例工程並不是兒童搜索引擎,按照這篇文章做完之后,會做成一個文章搜索引擎,它通過全網自動判別文章類網頁,並提取內容,自動入庫,天下文章,皆為我有。是不是很期待?那我們開始吧!
目錄
1. 垂直搜索引擎的介紹
2. 通過Python實現結構化信息獲取
2.8 分布式爬蟲的設計與實現
*2.9 針對特定需求的其他爬蟲方法(拓展閱讀)
3. 通過Lucene對結構化信息進行索引和檢索
3.9 詞條的更新、添加和刪除
3.10 根據用戶反饋動態排序
4. 服務器的搭建和使用(Windows Server)
4.1 php+mysql+apache
4.2 域名
4.3 https
5. 通過socket通訊提供網頁檢索服務
5.1 通過socket把Lucene檢索服務變為網頁檢索服務
5.2 通過socket發送結構化信息
5.4 通過socket連接Python爬蟲和Lucene實現實時索引和更新
6. 加入元搜索的功能作為信息檢索的補充
6.1 簡單跳轉版本
6.2 實時抓取版本
6.2.2 將網頁信息結構化顯示給用戶
7. 通過MySQL實現的功能
7.1 用戶管理
7.2 搜索歷史記錄
7.3 用戶留言
8. 敏感詞和停用詞過濾的實現
8.1 Lucene檢索的敏感詞和停用詞過濾
8.2 前端檢索的敏感詞過濾的Python實現(針對元搜索)、多線程並發
9.一些小的功能
9.1 根據搜索歷史進行推薦
9.2 給輸入文本框加入語音識別
10. 文章類搜索引擎demo設計與實現
11. 網站防止惡意攻擊的方法
12. 未來的研究方向
12.1 知識圖譜、數據挖掘
12.2 機器學習、自然語言處理
更新日志
2017.5.2 21:09 完成目錄框架
2017.5.2 21:30 完成1.1節的更新
2017.5.2 23:43 完成1.2節的更新
2017.5.3 9:48 完成2.1節的更新
2017.5.4 0:42 完成3.1節更新
2017.5.5 0:02 完成2.2節更新
2017.5.5 0:20 完成3.3節更新
2017.5.5 12:17 完成3.2節更新
2017.5.5 21:38 完成2.3節更新
2017.5.7 1:27 完成2.5節更新
2017.5.7 1:40 完成3.4節更新
2017.5.8 21:03 完成2.6節更新
2017.5.9 0:37 完成3.5節更新
2017.5.9 18:05 完成2.4節更新
2017.5.9 22:46 完成3.6節更新
2017.5.10 18:58 完成2.7節更新
2017.5.11 14:32 更新目錄
2017.5.11 14:43 完成2.9節更新
2017.5.11 23:51 完成3.7節更新
2017.5.12 9:50 完成3.8節更新
2017.5.12 23:34 完成8.2節更新
2017.5.21 13:30 完成5.4節更新