資源描述:
《搜索引擎中文分詞原理與實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、搜索引擎中文分詞原理與實(shí)現(xiàn)因?yàn)橹形奈谋局?,詞和詞之間不像英文一樣存在邊界,所以中文分詞是一個(gè)專業(yè)處理中文信息的搜索引擎首先面對(duì)的問(wèn)題,需要靠程序來(lái)切分出詞。一、Lucene中的中文分詞????????Lucene在中處理中文的常用方法有三種,以“咬死獵人的狗”為例說(shuō)明之:??????單???字:【咬】【死】【獵】【人】【的】【狗】??????二元覆蓋:【咬死】【死獵】【獵人】【人的】【的狗】??????分???詞:【咬】【死】【獵人】【的】【狗】????????Lucene中的StandardTokenizer采用單子分詞方式,CJKTokenize
2、r采用二元覆蓋方式。1、Lucene切分原理????????Lucene中負(fù)責(zé)語(yǔ)言處理的部分在org.apache.lucene.analysis包,其中,TokenStream類用來(lái)進(jìn)行基本的分詞工作,Analyzer類是TokenStream的包裝類,負(fù)責(zé)整個(gè)解析工作,Analyzer類接收整段文本,解析出有意義的詞語(yǔ)。??????通常不需要直接調(diào)用分詞的處理類analysis,而是由Lucene內(nèi)存內(nèi)部來(lái)調(diào)用,其中:??????(1)在索引階段,調(diào)用addDocument(doc)時(shí),Lucene內(nèi)部使用Analyzer來(lái)處理每個(gè)需要索引的列,
3、具體如下圖:???????圖1Lucene對(duì)索引文本的處理??????IndexWriterindex=newIndexWriter(indexDirectory,??????????????????????????????????????????????????newCnAnalyzer(),??????//用于支持分詞的分析器??????????????????????????????????????????????????!incremental,?????????????????????????????????????????????????
4、?IndexWriter.MaxFieldLength.UNLIMITED);??????(2)在搜索階段,調(diào)用QueryParser.parse(queryText)來(lái)解析查詢串時(shí),QueryParser會(huì)調(diào)用Analyzer來(lái)拆分查詢字符串,但是對(duì)于通配符等查詢不會(huì)調(diào)用Analyzer。??????Analyzeranalyzer=newCnAnalyzer();??????????????????????//支持中文的分詞??????QueryParserparser=newQueryParser(Version.LUCENE_CURRENT,
5、"title",analyzer);??????因?yàn)樵谒饕退阉麟A段都調(diào)用了分詞過(guò)程,索引和搜索的切分處理要盡量一致,所以分詞效果改變后需要重建索引。??????為了測(cè)試Lucene的切分效果,下面是直接調(diào)用Analysis的例子:??????Analyzeranalyzer=newCnAnalyzer();??????????????????????//創(chuàng)建一個(gè)中文分析器??????TokenStreamts=analyzer.tokenStream("myfield",newStringReader("待切分文本"));??//取得Token流?
6、?????while(ts.incrementToken()){??????????????????????????????????//取得下一個(gè)詞??????????????System.out.println("token:?"+ts);??????}2、Lucene中的Analyzer??????為了更好地搜索中文,通過(guò)下圖來(lái)了解一下在Lucene中通過(guò)WhitespaceTokenizer、WordDelimiterFilter、LowercaseFilter處理英文字符串的流程:圖2Lucene處理英文字符串流程二、查找詞典算法??????
7、詞典格式可以是方便人工查看和編輯的文本文件格式,也可以是方便機(jī)器讀入的二進(jìn)制格式。詞典的最基本文本文件格式就是每行一個(gè)詞。在基于詞典的中文分詞方法中,詞典匹配算法是基礎(chǔ)。一般詞典規(guī)模都在幾十萬(wàn)詞以上,所以為了保證切分速度,需要選擇一個(gè)好的查找詞典算法。1、標(biāo)準(zhǔn)Trie樹(shù)??????一個(gè)數(shù)字搜索Trie樹(shù)的一個(gè)節(jié)點(diǎn)只保留一個(gè)字符,如果一個(gè)單詞比一個(gè)字符長(zhǎng),則包含第一個(gè)字符的節(jié)點(diǎn)有指針指向下一個(gè)字符的節(jié)點(diǎn),依次類推。這樣組成一個(gè)層次結(jié)構(gòu)的樹(shù),樹(shù)的第一層包括所有單詞的第一個(gè)字符,樹(shù)的第二層包括所有單詞的第二個(gè)字符,依次類推,數(shù)字搜索樹(shù)的最大高度是詞典中最長(zhǎng)
8、單詞的長(zhǎng)度。比如:如下單詞序列組成的詞典(asatbebyheinisitofonorto)會(huì)生成如下圖所示