2

我有一些問題試圖瞭解什麼是非布爾搜索(如果這是有道理的)。就我所知,布爾搜索允許在查詢中使用AND,OR和NOT。但是非布爾搜索呢?我讀過的地方,這意味着你可以搜索子字符串,而不僅僅是完整的單詞,但我想確保我完全理解每一個意思。此外,也許一個例子會有所幫助,例如,谷歌布爾或非布爾?那麼Oracle Text或者Apahe Solr呢?布爾與非布爾搜索

回答

2

非布爾搜索包括不是純粹的布爾模型技術的方法。

這種方法最常見的例子可能是vector-space model
在這個模型中,每個文檔都是一個矢量,由它所包含的單詞(或二元組......)表示。每個文檔的維度是詞彙表中詞的數量。

這個模型的相似性是通過創建一個'假'文檔 - 這是查詢,並將這個假文檔與文集中的任何其他文檔進行比較來完成的。文檔與查詢越相似 - 結果越好。

常見的相似性度量是cosine-similarity
該模型與tf-idf model(td-idf確定每個向量的每個條目中的值是什麼)很好地匹配。

請注意,這不是布爾模型。你不會批評'套',你比較載體的相似性 - 這是完全不同的模型。
此外,這種方法有一個重要的優勢 - 它返回與每個文檔相關的分數,而不僅僅是布爾答案「相關」或「不相關」。

原來的向量空間不允許AND,或oporations,但是通過執行2階段搜索可以很容易地解決這個問題。第一種是使用布爾模型來獲取候選人,第二種是使用向量空間來獲得每個文檔的分數。


其他型號正在建設一個language model出文檔的 - 語言模型被描述爲P(word|M) = the probability of the model M to generate the word

通用語言模型是P(word|document) = #occurances(word,document)/|document|
爲了避免出現概率爲零 - 我們通常添加平滑技術。一個常用的方法是:

P(word|document) = alpha*#occurances(word,document)/|document| + (1-alpha)*#occurances(word,corpus)/|corpus| 

現在 - 當我們有不止一個學期的查詢:q=t1 t2 ... tn,我們計算:

P(q|d) = P(t1|d)*P(t2|d)*...*P(tn|d) 

注意,這個模式實際上通過設置alpha=1允許和語義,並OR語義由alpha!=1


(1) 布爾搜索基本上被設置術語:

每學期與包含所有在他們這學期的文件一組相關聯。現在,你只需在一堆設置上設置oporations。 AND是交集,OR是聯合。

+0

謝謝,我覺得我現在更清楚了。那麼,簡化它是正確的嗎?一種非布爾型搜索類型可以統計文檔中給定詞語的次數,以查看它與搜索之間的相關程度。 – carcaret

+1

@carcaret通常是的,但事實並非如此。一旦可以使用矢量空間模型與二元向量。我個人認爲它沒有任何好處(因爲它比替代方案的信息量少) - 但這是可能的。 – amit