lucene原理學習筆記(二)

2022-07-19 04:24:09 字數 1483 閱讀 1944

第一步,使用者輸入查詢語句。

第二步,對查詢語句進行詞法分析、語法分析以及語言處理。

1、詞法分析主要用來識別單詞和關鍵字。

2、語法分析主要根據查詢語句的語法規則來形成一棵語法樹。

3、語言處理同索引過程中的語言處理幾乎一致,比如詞根的處理。

第三步,搜尋索引,得到符合語法樹的文件。

第四步,計算得到的文件和查詢之間的相關性,對查詢結果進行排序。

如何來計算文件和查詢之間的相關性呢?在此做乙個假設,我們將查詢看作是乙個很短小的文件,這樣就變成計算文件和文件之間的相關性了,計算出來的分數越高就說明越相關,排序就越靠前。

那麼如何計算文件和文件之間的相關性呢?進過分析可以發現,文件是由很多詞(term)組成的,如lucene、solr、search等,進一步分析還可以發現不同的詞對文件的重要性是不一樣的,比如對乙個文件solr和search在這個文件中是很重要的,但是this、what和a則顯得不那麼重要。所以對於兩篇文件來說如果同時包含solr和search則說明這兩篇文件相關性比較高,即使文件中不包含this、what也不會影響到文件的相關性。

因此計算文件的相關性,首先要找出那些詞對文件之間的關係比較重要,比如solr和search,然後計算詞之間的關係,找出詞重要性的過程可以稱為計算詞在文件中的權重。

計算詞的權重,有兩個引數,第乙個是詞(term),第二個是文件(document)。詞的權重代表詞在文件中的重要程度,權重越大,越能影響文件之間的相關性。判斷詞之間的相關性從而得出文件之間的相關性,有一種方法叫做向量空間模型(vector space model)。

下面就分析一下計算詞的權重的過程,

影響乙個詞在文件中重要性的主要因素有兩個。

1:詞頻,即詞出現在文件中的次數,數值越大說明重要性越大。

2:文件頻率,即有多少個文件包含此詞,這個數值越大說明詞的重要性越小,因為這樣就無法區分不同的文件了,因此重要性就很低。

計算權重的公式如下圖

上面的公式只是計算詞的權重的典型實現,不同的搜尋引擎可以有不同的實現。

通過上面計算出來的詞的權重,計算詞之間的關係從而得出文件的相關性,也就是應用空間向量模型方法。

把文件分解成是由多個詞組成的,不同詞的權重在所在文件中計算,由此我們可以把詞的權重看作是向量。

document=

document vector=

同樣的道理我們可以把使用者的查詢語句看作是向量

query=

query vector=

然後把搜尋出來的文件向量和查詢向量放到乙個n維空間中,每乙個詞是乙個向量,如下圖所示

在這裡我們認為向量之間的夾角越小,相關性越大。我們用夾角之間的余弦值計算向量之間的相關性,余弦值越大,夾角越小,相關性越大。計算余弦值得公式如下圖

通過計算出來的余弦值進行排序,查詢出來的文件就可以按相關性顯示出來了,越在前面說明相關性越大。

編譯原理學習筆記(二)

1 字母表 字母表 符號 字母 數字 標點符號 例 二進位制字母表,ascii字元表 unicode字符集 2 字母表上的運算 1 字母表的乘積 sigma1 sigma2的乘積 sigma1 sigma2 例 2 字母表的冪運算 字母表的n次冪運算是常速為n的符號串構成的集合 sigma的0次冪 ...

Flask原理學習筆記

知識點 配置檔案 路由系統 檢視模板渲染 ses def ses session 1 session yyy 2del session yyy return session 請求結束時,flask會讀取記憶體中字典的值,進行序列化並加密,寫入到cookie中 flash session衍生出來的,一...

編譯原理學習筆記與心得(二)

符號串 程式在程式語言之基本符號集上按照語法規則而構成的基本符號串。字母表是非空的有窮符號集合。一 語義分析 收集識別符號的屬性資訊 種屬 型別 儲存位置和長度 值 作用域 引數和返回值資訊 語義檢查 變數或過程未經過申明就使用,變數或過程重複申明,運算分量型別不匹配等。二 中間 生成 三位址碼 由...