全文檢索的基本過程

我們生活中的數據總體分爲兩種:結構化數據和非結構化數據。
• 結構化數據:指具有固定格式或有限長度的數據,如數據庫,元數據等。
• 非結構化數據:指不定長或無固定格式的數據,如郵件,word文檔等。
當然有的地方還會提到第三種,半結構化數據,如XML,HTML等,當根據需要可按結構化數據來處理,也可
抽取出純文本按非結構化數據來處理。
非結構化數據又一種叫法叫全文數據。
按照數據的分類,搜索也分爲兩種:
對結構化數據的搜索 :如對數據庫的搜索,用SQL語句。再如對元數據的搜索,如利用windows搜索對
文件名,類型,修改時間進行搜索等。
對非結構化數據的搜索 :如利用windows的搜索也可以搜索文件內容,Linux下的grep命令,再如用
Google和百度可以搜索大量內容數據

 

全文檢索大體分兩個過程,索引創建(Indexing)和搜索索引(Search)
• 索引創建:將現實世界中所有的結構化和非結構化數據提取信息,創建索引的過程。
• 搜索索引:就是得到用戶的查詢請求,搜索創建的索引,然後返回結果的過程。

 

全文檢索的索引創建過程一般有以下幾步:

1:準備待索引的原文檔(Document)


2:將原文檔傳給分次組件(Tokenizer)。
分詞組件(Tokenizer)會做以下幾件事情(此過程稱爲Tokenize):
1. 將文檔分成一個一個單獨的單詞。
2. 去除標點符號。
3. 去除停詞(Stop word)。

經過分詞(Tokenizer)後得到的結果稱爲詞元(Token)。


3:將得到的詞元(Token)傳給語言處理組件(Linguistic Processor)。

對於英語,語言處理組件(Linguistic Processor)一般做以下幾點:
1. 變爲小寫(Lowercase)。
2. 將單詞縮減爲詞根形式,如“cars”到“car”等。這種操作稱爲:stemming。
3. 將單詞轉變爲詞根形式,如“drove”到“drive”等。這種操作稱爲:lemmatization。

語言處理組件(linguistic processor)的結果稱爲詞(Term)。


4:將得到的詞(Term)傳給索引組件(Indexer)。

索引組件(Indexer)主要做以下幾件事情:
1. 利用得到的詞(Term)創建一個字典。
2、對字典按字母順序進行排序。

3. 合併相同的詞(Term)成爲文檔倒排(Posting List)鏈表。

 

下面是lucene的原理過程

1. 索引過程:
1) 有一系列被索引文件
2) 被索引文件經過語法分析和語言處理形成一系列詞(Term)。
3) 經過索引創建形成詞典和反向索引表。
4) 通過索引存儲將索引寫入硬盤。
2. 搜索過程:
a) 用戶輸入查詢語句。
b) 對查詢語句經過語法分析和語言分析得到一系列詞(Term)。
c) 通過語法分析得到一個查詢樹。
d) 通過索引存儲將索引讀入到內存。
e) 利用查詢樹搜索索引,從而得到每個詞(Term)的文檔鏈表,對文檔鏈表進行交,差,並得到結果文檔。
f) 將搜索到的結果文檔對查詢的相關性進行排序。
g) 返回查詢結果給用戶。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章