付費(fèi)下載
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1/1搜索引擎中文分詞原理與實(shí)現(xiàn)while(ts.incrementToken()){
//取得下一個(gè)詞
搜索引擎中文分詞原理與實(shí)現(xiàn)
因?yàn)橹形奈谋局?,詞和詞之間不像英文一樣存在邊界,所以中文分詞是一個(gè)專業(yè)處理中
文信息的搜索引擎首先面對(duì)的問(wèn)題,需要靠程序來(lái)切分出詞。一、LUCene中的中文分詞
LUCene在中處理中文的常用方法有三種,以皎死獵人的狗"為例說(shuō)明之:
單字:【咬】
【死】【獵】【人】【的】【狗】
二元覆蓋:【咬死】【死獵】【獵人】【人的】【的狗】
分
詞:【咬】【死】【獵人】【的】
【狗】
LUCene中的StandardTokenizer采用單子分詞方式,CJKTokenize采用二元覆蓋方式。1、LUCene切分原理
LUCene中負(fù)責(zé)語(yǔ)言處理的部分在org.apache.Iucene.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è)需要
索引的列,具體如下圖:
圖1LUCene對(duì)索引文本的處理
IndexWriterindex=newIndexWriter(indexDirectory,newCnAnalyzer(),//用于支持分詞的分析
器!inCremental,
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,"title",analyzer);因?yàn)樵谒饕退阉麟A段都調(diào)用了分詞過(guò)程,索引和搜索的切分處理要盡量一致,所以分詞效果改變后需要重建索引。
為了測(cè)試LUCene的切分效果,下面是直接調(diào)用Analysis的例子:Analyzeranalyzer=newCnAnalyzer();
//創(chuàng)建一個(gè)中文分析器
TokenStreamts=analyzer.tokenStream("myfield",newStringReader("待切分文本"));
//
取得Token流
SyStem.out.println("token:"+ts);
}
2、LUCene中的Analyzer
為了更好地搜索中文,通過(guò)下圖來(lái)了解一下在LUCene中通過(guò)WhiteSPaCeTOkeniZer、WOrdDeIimiterFiIter、LOWerCaSeFiIter處理英文字符串的流程:
LeXCorPBFG-9000
WhitespareTokeniZer
LeXCorPBFG-9000
WordDeliiniterFilterCCltenaleWOrdii=1
r
LOWerCaSeFiIler
IejtCCrP
圖2LUCene處理英文字符串流程
、查找詞典算法
詞典格式可以是方便人工查看和編輯的文本文件格式,也可以是方便機(jī)器讀入的二進(jìn)
制格式。詞典的最基本文本文件格式就是每行一個(gè)詞。在基于詞典的中文分詞方法中,詞
典匹配算法是基礎(chǔ)。一般詞典規(guī)模都在幾十萬(wàn)詞以上,所以為了保證切分速度,需要選擇一個(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ì)生成如下圖所示的數(shù)字搜索樹:
圖3數(shù)字搜索樹
數(shù)字搜索樹的結(jié)構(gòu)獨(dú)立于生成樹時(shí)單詞進(jìn)入的順序,這里,Trie樹的高度是2。因?yàn)闃?/p>
的高度很小,在數(shù)字搜索Trie樹種搜索一個(gè)單詞的速度很快。但是,這是以內(nèi)存消耗為代
價(jià)的,樹中每個(gè)節(jié)點(diǎn)都需要很多內(nèi)存。假設(shè)每個(gè)詞都是由26個(gè)小寫英文字母中的一個(gè)組成
的,這個(gè)節(jié)點(diǎn)中會(huì)有26個(gè)指針。所以不太可能直接用這樣的數(shù)字搜索樹來(lái)存儲(chǔ)中文這樣的
大字符集。
Trie樹在實(shí)現(xiàn)上有一個(gè)樹類(SearChTrie)和一個(gè)節(jié)點(diǎn)類(TrieNode)。SearChTrie的主要方法有兩個(gè):
(1)增加單詞到搜索樹,方法原型是:addWord(Stringword)。
(2)從文本的指定位置開始匹配單詞,方法原型是:matchLOng(Stringtext,intOffSet)。2、三叉Trie樹
在一個(gè)三叉搜索樹(TernarySearChTrie)中,每一個(gè)節(jié)點(diǎn)包括一個(gè)字符,但和數(shù)字搜索樹不同,三叉搜索樹只有三個(gè)指針:一個(gè)指向左邊的樹;一個(gè)指向右邊的樹;還有一個(gè)向下,指向單詞的下一個(gè)數(shù)據(jù)單元。三叉搜索樹是二叉搜索樹和數(shù)字搜索樹的混合體。它有
和數(shù)字搜索樹差不多的速度但是和二叉搜索樹一樣只需要相對(duì)較少的內(nèi)存空間。
樹是否平衡取決于單詞的讀入順序。如果按順序后的順序插入,則生成方式最不平衡。
單詞的讀入順序?qū)τ趧?chuàng)建平衡的三叉搜索樹很重要,但對(duì)于二叉搜索樹就不太重要。通過(guò)
選擇一個(gè)排序后數(shù)據(jù)單元集合的中間值,并把它作為開始節(jié)點(diǎn),我們可以創(chuàng)建一個(gè)平衡的三
叉樹。如下代碼可以用來(lái)生成平衡的三叉樹詞典:
*在調(diào)用此方法前,先把詞典數(shù)組k排好序
*@Paramfp寫入的平衡序的詞典
*@Paramk排好序的詞典數(shù)組
*@ParamOffSet偏移量
*@Paramn長(zhǎng)度
*@throwsEXCePtiOn
*/
VoidOUtPUtBaIanced(BufferedWriterfp,ArrayLiStVString>k,intoffset,intn){
intm;
if(n>1;//m=n/2
Stringitem=k.get(m+offset);
fp.write(item);//把詞條寫入到文件
fp.write('?n');
OUtPUtBaIanced(fp,k,offset,m);〃輸出左半部分
OUtPUtBaIanced(fp,k,OffSet+m+1,n-m-1);//輸出右半部分
}
再次以有序的數(shù)據(jù)單元(asatbebyheinisitofonorto)為例。首先把關(guān)鍵字"is乍為
中間值并且構(gòu)建一個(gè)包含字母“i的根節(jié)點(diǎn)。它的直接后繼節(jié)點(diǎn)包含字母“S并且可以存儲(chǔ)任何與“is有關(guān)聯(lián)的數(shù)據(jù)。對(duì)于“i的左樹,我們選擇“be作為中間值并且創(chuàng)建一個(gè)包含字母“b”的節(jié)點(diǎn),字母“b的直接后繼節(jié)點(diǎn)包含“e。'該數(shù)據(jù)存儲(chǔ)在“e節(jié)點(diǎn)。對(duì)于“i的右樹,按照邏輯,選擇“On作為中間值,并且創(chuàng)建“0節(jié)點(diǎn)以及它的直接后繼節(jié)點(diǎn)“n”最終的三叉樹如下
圖所示:
圖4三叉樹
垂直的虛線代表一個(gè)父節(jié)點(diǎn)下面的直接后繼節(jié)點(diǎn)。只有父節(jié)點(diǎn)和它的直接后繼節(jié)點(diǎn)才能形成一個(gè)數(shù)據(jù)單元的關(guān)鍵字:"i"和“S形成關(guān)鍵字“is,”但是“i和“b不能形成關(guān)鍵字,因
為它們之間僅用一條斜線相連,不具有直接后繼關(guān)系。上圖中帶圈的節(jié)點(diǎn)為終止節(jié)點(diǎn)。如果
查找一個(gè)詞以終止節(jié)點(diǎn)結(jié)束,則說(shuō)明三叉樹包含這個(gè)詞。以搜索單詞“is為例,向下到相等
的孩子節(jié)點(diǎn)“s”在兩次比較后找到“is;”查找“aX”,執(zhí)行三次比較達(dá)到首字符“a”然后
經(jīng)過(guò)兩次比較到達(dá)第二個(gè)字符“X;'返回結(jié)果是“ax不在樹中。
三、中文分詞原理
中文分詞就是對(duì)中文斷句,這樣能消除文字的部分歧義。除了基本的分詞功能,為了消除歧義還可以進(jìn)行更多的加工。中文分詞可以分成如下幾個(gè)子任務(wù):
(1)分詞:把輸入的標(biāo)題或者文本內(nèi)容等分成詞。
(2)詞性標(biāo)注(POS:給分出來(lái)的詞標(biāo)注上名詞或動(dòng)詞等詞性。詞性標(biāo)注可以部分消除詞的歧義,例如行”作為量詞和作為形容詞表示的意思不一樣。
(3)語(yǔ)義標(biāo)注:把每個(gè)詞標(biāo)注上語(yǔ)義編碼。
很多分詞方法都借助詞庫(kù)。詞庫(kù)的來(lái)源是語(yǔ)料庫(kù)或者詞典,例如人民日?qǐng)?bào)語(yǔ)料庫(kù)”或
者《現(xiàn)代漢語(yǔ)大詞典》。
中文分詞有以下兩類方法:
(1)機(jī)械匹配的方法:例如正向最大長(zhǎng)度匹配(ForWardMaXimUmMatCh)的方法和逆向最大長(zhǎng)度匹配(ReVerSeMaXimUmMatChing)的方法。
(2)統(tǒng)計(jì)的方法:例如概率語(yǔ)言模型分詞方法和最大熵的分詞方法等。
正向最大長(zhǎng)度品牌的分詞方法實(shí)現(xiàn)起來(lái)很簡(jiǎn)單。每次從詞典中查找和待匹配串前綴最長(zhǎng)匹配的詞,如果找到匹配詞,則把這個(gè)詞作為切分詞,待匹配串減去該詞;如果詞典中沒
有詞與其匹配,則按單字切分。例如:Trie樹結(jié)構(gòu)的詞典中包括如下的詞語(yǔ):
大大學(xué)大學(xué)生活動(dòng)生活中中心心
為了形成平衡的Trie樹,把詞先排序,結(jié)果為:
中中心大大學(xué)大學(xué)生心活動(dòng)生活
按平衡方式生成的詞典Trie樹如下圖所示,其中,粗黑顯示的節(jié)點(diǎn)可以作為匹配終止節(jié)點(diǎn):
(
?
)
圖5三叉樹
輸入大學(xué)生活動(dòng)中心”首先匹配出大學(xué)生”然后匹配出活動(dòng)”,最后匹配出中心”切分過(guò)程如下表所示:
已匹配上的結(jié)果待匹配串
NULL大學(xué)生活動(dòng)中心
大學(xué)生活動(dòng)中心
大學(xué)生/活動(dòng)中心
大學(xué)生/活動(dòng)/中心NULL
在最大長(zhǎng)度匹配的分詞方法中,需要用到從指定字符串返回指定位置的最長(zhǎng)匹配詞的方法。例如:當(dāng)輸入串是大學(xué)生活動(dòng)中心”,則返回大學(xué)生”這個(gè)詞,而不是返回大”或者大學(xué)”。
四、中文分詞流程與結(jié)構(gòu)
中文分詞總體流程與結(jié)構(gòu)如下圖所示:
切分工具
詞査找模塊切分算法
JLI丿
圖6中文分詞結(jié)構(gòu)圖
簡(jiǎn)化版的中文分詞切分過(guò)程說(shuō)明
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三級(jí)電工技能試題及答案2025
- 2026中職教師教學(xué)工作總結(jié)
- 2025年人事工作年度工作總結(jié)
- 2025年衛(wèi)生監(jiān)督知識(shí)培訓(xùn)考試試題及答案
- (2025年)醫(yī)療質(zhì)量管理辦法
- 2025年法制年度工作總結(jié)(三篇)
- 建設(shè)工程施工合同糾紛要素式起訴狀模板批量應(yīng)用超便捷
- 建設(shè)工程施工合同糾紛要素式起訴狀模板法律保障無(wú)風(fēng)險(xiǎn)
- 2026年喜馬拉雅音頻培訓(xùn)
- 2026 年離婚協(xié)議書合規(guī)正規(guī)版范本
- 產(chǎn)品供貨方案、售后服務(wù)方案
- 十八而志夢(mèng)想以行+活動(dòng)設(shè)計(jì) 高三下學(xué)期成人禮主題班會(huì)
- 2023年上海華東理工大學(xué)機(jī)械與動(dòng)力工程學(xué)院教師崗位招聘筆試試題及答案
- TOC供應(yīng)鏈物流管理精益化培訓(xùn)教材PPT課件講義
- 醫(yī)院18類常用急救藥品規(guī)格清單
- 放棄公開遴選公務(wù)員面試資格聲明
- 2023-2024學(xué)年江蘇省海門市小學(xué)語(yǔ)文五年級(jí)期末點(diǎn)睛提升提分卷
- GB/T 1685-2008硫化橡膠或熱塑性橡膠在常溫和高溫下壓縮應(yīng)力松弛的測(cè)定
- 北京城市旅游故宮紅色中國(guó)風(fēng)PPT模板
- DB42T1319-2021綠色建筑設(shè)計(jì)與工程驗(yàn)收標(biāo)準(zhǔn)
- 經(jīng)濟(jì)學(xué)原理 第一章課件
評(píng)論
0/150
提交評(píng)論