Create Your Own Search Engine with Python 用python創建你自己的搜索引擎(二)

Create Your Own Search Engine with Python 

用python創建你自己的搜索引擎(二)

接上一篇,我自己分的部分,全擠一篇太長,本部分主要介紹工作原理和簡單的搜索(查找)算法。原文地址:http://www.zackgrossbart.com/hackito/search-engine-python/

      

       它的工作原理

       這個應用程序是四種技術(這裏又是四種了哦!)的結合。一些代碼運行在你的服務器上,另一些則是運行在瀏覽器上。所以,要記住你在構建代碼時,代碼運行所處的context。


    這個示例程序包含一個示例搜索表單(search form)——Search.html。你可以把這個文件修改成你想要的樣子,但是必須確保表單控制端(form controls)的名字保持相同。這個表單指定/cgi-bin/search.pyURL行爲。也許你需要修改URL,這樣才能對映這搜索腳本在web服務器上所放的位置。之後,用戶輸入要搜索的詞項,點擊搜索按鈕,數據(詞項)被傳給服務器的search.py腳本。這個腳本接收搜索詞項後,開始實際的搜索,最後返回搜索結果。


    搜索結果頁面是基於SearchResults.html文件生成的。這個HTML文件一定要和search.py腳本放在同一目錄下,它包含兩個特殊的值${SEARCH_TERMS_GO_HERE} ${SEARCH_RESULTS_GO_HERE} (那個應該是JSP的語法吧?沒學過)。這倆值會分別被搜索詞和搜索結果替換。(下一句毫無預兆地跳轉,貌似是外國佬的風格)每條搜索結果都包含了一個超鏈接,鏈接到那些包含用戶搜索詞項的網頁,另外結果中還包含一些特殊的信息,JavaScript可以根據這些信息在這些頁面中對搜索詞進行高亮標記。當用戶點擊任一鏈接,他們會進入鏈接的HTML頁面,裏面包含用戶指定的搜索詞項,並且頁面中所有的搜索詞項都進行了高亮處理。


    具備高亮功能的頁面一定會有一段小小的code reference(代碼引用?)。在每個HTML文件的開頭,都要導入JavascriptCSS文件,才知道如何處理搜索要求。代碼如下:

    

<script type="text/javascript" src="../search.js" />
<style type="text/css" media="all">
    @import "../SearchResults.css";
</style>

    這些文件內嵌了javascript來搜索頁面,還包含樣式單(style sheet)負責說明詞項如何進行高亮。除了要導入代碼,還必須運行程序。運行的代碼會響應主體標誌產生的裝載事件(onload event)。這個聲明非常簡單。代碼如下:

     

<body οnlοad="doSearch();">


     這段代碼會在頁面裝入時運行,於是就得到高亮處理的搜索詞項。


     普遍使用的搜索算法和這個使用的算法

        

         Donald Knuth 所著Sorting and Searching是我最早讀的編程書之一(這書這麼難的居然是最早讀的,我現在還不敢讀呢……)。這本大部頭討論了影響最深遠的編程問題之一——查找(search 查找?搜索?檢索?)的主要方法。從根本上來說,查找是非常困難的問題,也存在着多種不同的查找算法。這個程序使用的順序查找(線性查找?),又是基礎中的基礎。順序查找意味着該程序就是簡單地把文件一個個打開,在裏面查找詞項,找完後關閉文件。(再轉一次,實際上應該是另一段的開頭)另外,我們的程序沒有創建任何類型的搜索索引。


    搜索索引可能是個文件,也可能是數據集,總之會在搜索之前創建。索引會將所有你可能搜索到的項,以某種格式——通常會以某種有用的方式排序(比如樹)——進行相連,這樣可以快速地進行查找。構建搜索索引主要用於處理大數據集合,這裏我們需要高效、優越的性能。不過,在處理小數據集合時,順序檢索反而會更快。我們的這個程序就使用了可用的查找算法中的一種。


    下一部分開始分析實際代碼了。

    原文:http://www.zackgrossbart.com/hackito/search-engine-python/

    另外,我好像未經授權就翻譯併發布了,沒問題吧?要不要亡羊補牢下?疑問



發佈了52 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章