全文檢索理論補習之索引部分

2021-08-30 16:26:03 字數 2636 閱讀 6770

首先,資料分兩種:結構化資料非結構化資料

結構化資料如資料庫資料非結構化資料如郵件,word文件

非結構化資料的另一種叫法是全文資料

當然還有一種分類為半結構化資料:如html和xml資料;半結構化資料可以根據需要按照結構化資料來處理,也可以按照非結構化資料來處理

結構化資料本來就是按照一定的規則來組織的資料,不用多說;關鍵的問題就在於非結構化資料即全文資料的搜尋上。

全文資料的搜尋主要有兩種:1.順序掃瞄法 2.全文檢索法

1.順序掃瞄法在nt系統裡面就有體現,windows當中的搜尋功能就有搜尋檔案,或者搜尋檔案內容的選項;如果是按照搜尋檔案當中的內容時,那麼windows就會順序掃瞄計算機當中的每乙個檔案,去查詢包含指定內容的檔案。不用多說,會非常慢。

2.全文檢索接觸過資料庫之後,針對資料庫當中的結構化資料的搜尋速度是很快的,而將非結構化的資料轉換成結構化的資料,然後再進行搜尋,這就是全文檢索的基本思路了。

這也就是說,全文檢索分為兩步,首先將非結構化的資料整理成結構化的----建立索引的過程

然後對結構化的資料搜尋的過程------對索引進行搜尋的過程

總結:這種先建立索引,然後再對索引進行搜尋的過程叫做全文檢索

1.索引建立:

首先,索引裡面究竟存些什麼?

想這個問題的時候,想一下順序搜尋:非結構化資料中所儲存的是每個檔案都包含哪些字串,即已知檔案欲求字串相對容易,也即是檔案到字串的對映。而nt系統下的搜尋是已知字串,去搜尋檔案,即字串到檔案的對映。這就相對困難了。因為基礎是檔案到字串的對映,而搜尋的時候倒過來從字串去對映檔案。所以,如何在檔案到字串對映的基礎上,儲存檔案到字串的對映關係,那麼搜尋的時候就相對簡單了。

總結:由於檔案到字串的對映是字串到檔案的對映的反向過程,因此這種索引被稱作反向索引

大致儲存結構如下:字串----文件列表

此處的字串稱為字典,文件列表稱為倒排表

term

term是搜尋的最小單位,它表示文件的乙個詞語,term由兩部分組成:它表示的詞語和這個詞語所出現的field。

tocken

tocken是term的一次出現,它包含trem文字和相應的起止偏移,以及乙個型別字串。一句話中可以出現多次相同的詞語,它們都用同乙個term表示,但是用不同的tocken,每個tocken標記該詞語出現的地方。

其次,如何建立索引?

1.首先是拿到文件 2.將文件傳給分詞元件(tokenizer) 分詞元件會做如下事情:

2.1將文件分成乙個乙個單獨的單詞

2.2去除標點符號

2.3去除停詞

3.將得到的單詞或者說是詞元傳給語言處理元件,對於英語,語言處理元件一般做以下幾點:

3.1變為小寫

3.2將單詞縮減為詞根形式,如cars到car等。這種操作稱為:stemming。

3.3將單詞轉變為詞根形式,如drove到drive等。這種操作稱為:lemmatization

兩者的異同:

相同之處:兩者都要使詞彙成為詞根形式。

不同之處: stemming採用的是縮減的方式:cars到car,driving到drive

lemmatization採用的是轉變的方式:drove到drive,driving到drive。

演算法不同: stemming主要是採取某種固定的演算法來做這種縮減,如去除s,去除ing加e,將ational變為ate,將tional變為tion

lemmatization主要是採用儲存某種字典的方式做這種轉變。比如字典中有driving道drive,drove到drive,am、is、are到be的對映,做轉變時,只要查字典就可以了。

總結: stemming和lemmatization不是互斥關係,是有交集的,有的詞利用這兩種方式都能達到相同的轉換。

4.將得到的詞傳給索引元件indexer

4.1利用得到的詞(term)建立乙個字典。

4.2對字典按字母順序進行排序

4.3合併相同的詞(term)成為文件倒排(posting list)鍊錶形成文件倒排鍊錶的過程中,有兩個定義:(注意這兩個定義)

文件頻次(df)(document frequency),表示總共有多少檔案包含此詞

詞頻率(tf)frequency,表示此檔案中包含了多少個此詞

總結:從理論上來講,拿到原始資料,然後傳給分詞元件,先將文件經過分詞元件的分析,然後經過語言處理元件,最後就到了分詞元件,最關鍵的應該是分詞元件部分。這一部分可以單獨研究一下

最後,如何對索引進行搜尋?

1.使用者輸入查詢語句

2.對查詢語句進行詞法分析,語法分析,語言處理。

詞法分析主要用來識別單詞和關鍵字;比如使用者輸入「lucene and lerned not hadoop」,

經過詞法分析得到的單詞有:lucene,learned,hadoop,關鍵字有and,not。

全文檢索引擎 Sphinx

sphinx是乙個基於sql的全文檢索引擎,可以結合mysql,postgresql做全文搜尋,它可以提供比資料庫本身更專業的搜尋功能,使得應用程式更容易實現專業化的全文檢索。sphinx特別為一些指令碼語言設計搜尋api介面,如php,python,perl,ruby等,同時為mysql也設計了乙...

全文檢索引擎 Sphinx

sphinx是乙個基於sql的全文檢索引擎,可以結合mysql,postgresql做全文搜尋,它可以提供比資料庫本身更專業的搜尋功能,使得應用程式更容易實現專業化的全文檢索。sphinx特別為一些指令碼語言設計搜尋api介面,如php,python,perl,ruby等,同時為mysql也設計了乙...

mysql ngram全文檢索引擎

中的內容視作乙個短語 整體 3.查詢 已經存在表 against select from articles where match title,body against 文言文 innatural language mode 不指定模式,預設使用自然語言模式 select from articles...