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