搜索引擎(lucene及周邊) 涉及的一些算法總結


一)分詞

1)正向/逆向最大匹配算法

典型:IKAnalyzer采用的是正向迭代最細粒度切分算法

IKAnalyzer源碼簡單分析:

http://www.cnblogs.com/huangfox/p/3282003.html

 

2)字典樹(trieTree)

trieTree實現

http://www.cnblogs.com/huangfox/archive/2012/04/27/2474185.html

中文分詞遇到的問題:

a)標准trieTree節點采用數組存儲指針,如果是英文a-z用26長度的數組表示,但是中文不能用這種存儲方式,節點數組長度等於中文字數。(內存撐不住!)

b)如何節點內部查詢?采用數組進行二分查找,或者采用map。(ik結合了這兩種方式)

具體還可以參考:

http://hxraid.iteye.com/blog/618962

 

3)消歧算法

 

 

4)新詞識別算法(機構名、品牌名、專業名詞、縮略語、網絡新詞等

 具體參考:

http://www.programmer.com.cn/12276/

 

二)索引

1)壓縮算法

前綴后綴規則、差值規則

 

2)跳躍表

為了提高查找的性能,Lucene在很多地方采取的跳躍表的數據結構。

跳躍表(Skip List)是如圖的一種數據結構,有以下幾個基本特征:

  • 元素是按順序排列的,在Lucene中,或是按字典順序排列,或是按從小到大順序排列。
  • 跳躍是有間隔的(Interval),也即每次跳躍的元素數,間隔是事先配置好的,如圖跳躍表的間隔為3。
  • 跳躍表是由層次的(level),每一層的每隔指定間隔的元素構成上一層,如圖跳躍表共有2層。

節選自:http://forfuture1978.iteye.com/blog/546824

 

 

三)檢索

1)文本相關性算法(tfIdf)

tfIdf的詳細解釋:

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

lucene打分過程:

http://www.cnblogs.com/huangfox/archive/2012/07/02/2573333.html

 

2)字段排序過程中——優先級隊列

請參考:

http://www.cnblogs.com/huangfox/archive/2012/07/11/2586232.html

相關知識:

a)堆排序

http://www.cnblogs.com/huangfox/archive/2012/06/30/2571216.html

 

 

四)擴展

1)相似檢索(MoreLikeThis)

關鍵步驟:

a)字頻統計

b)去噪(黑名單、詞條長度)

c)計算詞權(tfIdf)

d)構建query

F)檢索

具體參考:

http://www.cnblogs.com/huangfox/archive/2012/07/05/2578179.html

 

2)拼寫檢查(SpellingChecker)

關鍵算法:

a)N-gram

b)編輯距離

具體參考:

http://www.cnblogs.com/huangfox/archive/2012/02/14/2350349.html

 

3)電商排序模型

多因子綜合排序(略)

 

----------------------------------------------------------------

其他

1)自動關鍵詞的應用(牽涉到相似檢索)

2)同義詞、近義詞的應用

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM