1. 程式人生 > >Python搜尋引擎實現原理和方法

Python搜尋引擎實現原理和方法

如何在龐大的資料中高效的檢索自己需要的東西?本篇內容介紹了Python做出一個大資料搜尋引擎的原理和方法,以及中間進行資料分析的原理也給大家做了詳細介紹。

布隆過濾器 (Bloom Filter)
第一步我們先要實現一個布隆過濾器。

布隆過濾器是大資料領域的一個常見演算法,它的目的是過濾掉那些不是目標的元素。也就是說如果一個要搜尋的詞並不存在與我的資料中,那麼它可以以很快的速度返回目標不存在。

讓我們看看以下布隆過濾器的程式碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class Bloomfilter(object): """ A Bloom filter is a probabilistic data-structure that trades space for accuracy when determining if a value is in a set. It can tell you if a value was possibly added, or if it was definitely not added, but it can't tell you for certain that
it was added. """ def __init__(self, size): """Setup the BF with the appropriate size""" self.values = [False] * size self.size = size def hash_value(self, value): """Hash the value provided and scale it to fit the BF size""" return hash(value) % self.size
def add_value(self, value): """Add a value to the BF""" h = self.hash_value(value) self.values[h] = True def might_contain(self, value): """Check if the value might be in the BF""" h = self.hash_value(value) return self.values[h] def print_contents(self): """Dump the contents of the BF for debugging purposes""" print self.values

基本的資料結構是個陣列(實際上是個點陣圖,用1/0來記錄資料是否存在),初始化是沒有任何內容,所以全部置False。實際的使用當中,該陣列的長度是非常大的,以保證效率。

利用雜湊演算法來決定資料應該存在哪一位,也就是陣列的索引

當一個數據被加入到布隆過濾器的時候,計算它的雜湊值然後把相應的位置為True

當檢查一個數據是否已經存在或者說被索引過的時候,只要檢查對應的雜湊值所在的位的True/Fasle

看到這裡,大家應該可以看出,如果布隆過濾器返回False,那麼資料一定是沒有索引過的,然而如果返回True,那也不能說資料一定就已經被索引過。在搜尋過程中使用布隆過濾器可以使得很多沒有命中的搜尋提前返回來提高效率。

我們看看這段 code是如何執行的:

?
1 2 3 4 5 6 7 8 9 10

相關推薦

Python搜尋引擎實現原理方法

如何在龐大的資料中高效的檢索自己需要的東西?本篇內容介紹了Python做出一個大資料搜尋引擎的原理和方法,以及中間進行資料分析的原理也給大家做了詳細介紹。 布隆過濾器 (Bloom Filter) 第一步我們先要實現一個布隆過濾器。 布隆過濾器是大資料領域的一個常見演算法,它的目的是過濾

STL原始碼剖析——stack的實現原理使用方法詳解

Stack 簡介     stack 是堆疊容器,是一種“先進後出”的容器。     stack 是簡單地裝飾 deque 容器而成為另外一種容器。     使用 stack 時需要加上標頭檔案 #include<s

STL原始碼剖析——deque的實現原理使用方法詳解

Deque 簡介     deque是“double—ended queue”的縮寫,和vector一樣都是STL的容器,deque 是雙端陣列,而 vector 是單端的。     deque 在介面上和 vector 非常相似,在許多操作的地方

Linux C/C++定時器的實現原理使用方法

定時器的實現原理 定時器的實現依賴的是CPU時鐘中斷,時鐘中斷的精度就決定定時器精度的極限。一個時鐘中斷源如何實現多個定時器呢?對於核心,簡單來說就是用特定的資料結構管理眾多的定時器,在時鐘中斷處理中判斷哪些定時器超時,然後執行超時處理動作。而使用者空間程式不

jdk7中hashmap實現原理jdk8中hashmap的改進方法總結

原文連結:http://blog.csdn.net/vking_wang/article/details/141665931. HashMap的資料結構資料結構中有陣列和連結串列來實現對資料的儲存,但這兩者基本上是兩個極端。      陣列陣列儲存區間是連續的,佔用記憶體嚴重

[Go] sync.Pool 的實現原理 適用場景

臨時 digg 簡單的 設置 com 運行 之前 結果 官方文檔 摘錄一: Go 1.3 的 sync 包中加入一個新特性:Pool。 官方文檔可以看這裏 http://golang.org/pkg/sync/#Pool 這個類設計的目的是用來保存和復用臨時對象,以減

清除浮動的原理方法

over back 存在 color float oat hid block play 問題的由來: 在CSS規範中,浮動定位是脫離元素正常流的。所以,只要含有浮動元素的父容器,在顯示時不考慮子元素的位置,就當它們不存在一樣。這就造成了顯示出來,父容器好像空容器一樣。

python—類的屬性方法總結

python一、類的屬性總結(類的屬性定義在方法外,對象的屬性定義在方法內)理解:類的(靜態)屬性:(人類的五官,理解為變量)類的(動態)方法:(人類吃穿住行,理解為一個函數,至少帶一個參數self,指向類本身)對象:類的實例化,之後才能有屬性和方法1)類的屬性,也是公有屬性;類的私有屬性2)對象的公有屬性;

Python類的繼承方法重寫總結

python 類繼承和重寫 Python類的繼承和方法重寫總結 我們都知道類可以繼承,通過繼承可以實現代碼的復用,使代碼看起來更加簡潔 比如:Class B(A): Pass 定義了一個名為B的類,它繼承於A,我們把B叫做A的子類,A叫做B的超類(父類)。 方法重寫當子類定義了一個和超類相同名字的方

Python中函數方法的區別

ini import ins function cti body itl 一個 object 1、函數要手動傳self,方法不用傳self 2、如果是一個函數,用類名去調用,如果是一個方法,用對象去調用 舉例說明: class Foo(object): d

ArrayList原理、OA信用盤平臺出租LinkedList原理方法叠代器註意事項

move java link ret offer bject 隊列 先進先出 錯誤 叠代器在變量元素OA信用盤平臺出租QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com的時候要註意事項:    在叠代器叠代元素 的過程中

HashMap實現原理源碼分析

aci 鍵值對 creat 變化 遍歷數組 沖突的解決 查看 seed 二分 作者: dreamcatcher-cx 出處: <http://www.cnblogs.com/chengxiao/>原文:https://www.cnblogs.com/cheng

Python-動態新增屬性方法

class Person():   Country='CN'   def __init__(self,nm)     self.nm=nm 動態新增例項屬性及例項方法: p=Person() p.age=18 #直接賦值,動態新增例項屬性 def set_age(self,age) #定義帶se

零基礎大資料學習的10大思維原理方法全部都在這

1、資料核心原理 從“流程”核心轉變為“資料”核心   大資料時代,計算模式也發生了轉變,從“流程”核心轉變為“資料”核心。Hadoop體系的分散式計算框架已經是“資料”為核心的正規化。非結構化資料及分析需求,將改變IT系統的升級方式:從簡單增量到架構變化。大資料下的新思維——計算模式的轉變。   網際

零基礎大數據學習的10大思維原理方法全部都在這

因果關系 喬布斯 準則 努力 半監督學習 經濟 好奇心 人類 大量 1、數據核心原理 從“流程”核心轉變為“數據”核心   大數據時代,計算模式也發生了轉變,從“流程”核心轉變為“數據”核心。Hadoop體系的分布式計算框架已經是“數據”為核心的範式。非結構化數據及分析需求

HashMap的實現原理底層結構 圖解+原始碼分析

 雜湊表(hash table)也叫散列表,是一種非常重要的資料結構,應用場景及其豐富,許多快取技術(比如memcached)的核心其實就是在記憶體中維護一張大的雜湊表,而HashMap的實現原理也常常出現在各類的面試題中,重要性可見一斑。本文會對java集合框架中的對應實現HashMap的實現原理

(good)相位噪聲基礎及測試原理方法

摘要:相位噪聲指標對於當前的射頻微波系統、移動通訊系統、雷達系統等電子系統影響非常明顯,將直接影響系統指標的優劣。該項指標對於系統的研發、設計均具有指導意義。相位噪聲指標的測試手段很多,如何能夠精準的測量該指標是射頻微波領域的一項重要任務。隨著當前接收機相位噪聲指標越來越高,相應的測試技術和測試手段

python os模組功能方法總結

os.sep     可以取代作業系統特定的路徑分割符 os.linesep  字串給出當前平臺使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n' 而Mac使用'\r'。 os.name       &nb

[Python-程式碼實現]統計學習方法之感知機模型

內容簡介 感知機模型 - 手寫 Coding 使用手寫模型進行鳶尾花分類 使用 sklearn 中的感知機進行鳶尾花分類 感知機模型 - 手寫 Coding class Model: """感知機模型""" def __init__(s

python 字典實現原理

引言 Python中dict物件是表明了其是一個原始的Python資料型別,按照鍵值對的方式儲存,其中文名字翻譯為字典,顧名思義其通過鍵名查詢對應的值會有很高的效率,時間複雜度在常數級別O(1).本文針對其實現的資料結構進行原理性說明和拓展,不涉及Python的