国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Lucene.net 中文分詞算法分析

2011-12-02 02:57:02周拴龍
關(guān)鍵詞:解析器鄭州大學(xué)歧義

周拴龍

(鄭州大學(xué) 信息管理系 河南 鄭州 450001)

Lucene.net中文分詞算法分析

周拴龍

(鄭州大學(xué) 信息管理系 河南 鄭州 450001)

Lucene.net實(shí)現(xiàn)中文分詞依靠的是Analyzer類,但通過分析其內(nèi)置的KeywordAnalyzer,StandardAnalyzer,StopAnalyzer,SimpleAnalyzer,WhitespaceAnalyzer 5個(gè)分詞類發(fā)現(xiàn),它們幾乎都是按單字的標(biāo)準(zhǔn)進(jìn)行切分的,為更好處理中文信息,必須引用外部獨(dú)立開發(fā)的中文分詞包.在對ChineseAnalyzer,CJKAnalyzer和 IKAnalyzer這3種典型的中文分詞包分別測試后,發(fā)現(xiàn)采用字典分詞以及正反雙向搜索方法的IKAnalyzer分詞器的分詞效果更勝一籌.

Lucene; 中文分詞; Analyzer類

0 引言

從發(fā)展歷史角度看,Lucene是Apache軟件基金會(huì)Jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文搜索引擎工具包.Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便地在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文搜索引擎[1].

到目前為止,Lucene的C#移植有3個(gè)版本,最開始是NLucene,然后是Lucene.net,當(dāng)Lucene.net轉(zhuǎn)向商業(yè)化之后,SourceForge上又出現(xiàn)了DotLucene項(xiàng)目.它們都是Lucene全文搜索引擎庫的 .net實(shí)現(xiàn).所以3者在架構(gòu)、內(nèi)核等方面與Lucene是一脈相承的.綜合性能比較,Lucene.net在3者里最為成熟、穩(wěn)定,所以,本文選擇了Lucene.net分析其中文分詞算法的實(shí)現(xiàn)[2].

1 Lucene的工作原理

圖1 Lucene 索引機(jī)制架構(gòu)Fig.1 Index mechanism structure of Lucene

Lucene包括索引和搜索兩大部分.

索引所做的工作是為各種各樣的文檔構(gòu)建Lucene能識別的索引文件.具體講,第1步,Lucene 使用各種解析器對各種不同類型的文檔進(jìn)行解析.Lucene有多種文檔解析器,如HTML解析器,PDF解析器,MS Word解析器,Text File解析器等等.Lucene根據(jù)文檔類型做出判斷,將不同文檔交由不同解析器處理,濾去種種不必要信息,最終輸出純文本內(nèi)容.第2步, Lucene 的分詞器—Analyzer從純文本內(nèi)容中提取出索引項(xiàng)以及相關(guān)信息,如索引項(xiàng)的出現(xiàn)頻率等.第3步,由Analyzer把這些信息寫到索引文件中[1].圖1顯示了 Lucene 索引機(jī)制的架構(gòu).

搜索所做的工作是從用戶輸入的關(guān)鍵字入手找出與之相匹配的文本并返還給用戶.搜索不是本文要討論的重點(diǎn),因?yàn)長ucene默認(rèn)對搜索關(guān)鍵詞不分詞,所以分詞的工作就集中在了索引部分.

Lucene的索引中有5個(gè)基礎(chǔ)類:

(1)Document—是用來描述要解析的文檔的,這里的文檔可以是HTML,PDF,Word或Text File等等類型.一個(gè) Document 對象由多個(gè) Field 對象組成.

(2)Field—是用來描述一個(gè)文檔的某個(gè)屬性的.Field有3個(gè)屬性:是否存儲(chǔ),是否索引,是否分詞.

(3)Analyzer—它負(fù)責(zé)在一個(gè)文檔被索引之前,預(yù)先對文檔內(nèi)容進(jìn)行分詞處理,主要是提取詞匯單元,并除掉無用的信息.Analyzer 類是一個(gè)抽象類,它有多個(gè)實(shí)現(xiàn).針對不同的語言和應(yīng)用需要選擇適合的 Analyzer.Analyzer 把分詞后的內(nèi)容交給 IndexWriter 來建立索引.

(4)IndexWriter—“寫入索引”.它的作用就是把一個(gè)個(gè)的 Document 對象加到索引中來.這是 Lucene 用來創(chuàng)建索引的一個(gè)核心類.

(5)Directory—標(biāo)示Lucene 的索引的存儲(chǔ)位置[2].

最初,Lucene的設(shè)計(jì)者只考慮了英文、德文兩種西文格式的分詞情形.眾所周知,中文分詞要走的是另外一條道路.

2 中文分詞

2.1中文分詞技術(shù)的核心—分詞算法

現(xiàn)有的中文分詞算法可分為3大類:基于規(guī)則的分詞方法、基于統(tǒng)計(jì)的分詞方法和基于理解的分詞方法.

(1)基于規(guī)則的分詞方法

這種方法又叫做機(jī)械分詞法,它是按照一定的策略將待分析的漢字串與一個(gè)“充分大的”機(jī)器詞典中的詞條進(jìn)行匹配,若在詞典中找到某個(gè)字符串,則匹配成功(識別出一個(gè)詞).按照掃描方向的不同,串匹配分詞方法可以分為正向(由左到右)匹配和逆向(由右到左)匹配;按照不同長度優(yōu)先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標(biāo)注過程相結(jié)合,又可以分為單純分詞方法和分詞與標(biāo)注相結(jié)合的一體化方法.

常用的機(jī)械分詞方法有以下3種:正向最大匹配法;逆向最大匹配法;最少切分匹配法.一般說來,逆向匹配的切分精度略高于正向匹配,遇到的歧義現(xiàn)象也較少.

(2)基于統(tǒng)計(jì)的分詞方法

從形式上看,詞是穩(wěn)定的字的組合,因此在上下文中,相鄰的字同時(shí)出現(xiàn)的次數(shù)越多,就越有可能構(gòu)成一個(gè)詞.因此字與字相鄰共現(xiàn)的頻率或概率能夠較好地反映成詞的可信度.可以對語料中相鄰共現(xiàn)的各個(gè)字的組合的頻度進(jìn)行統(tǒng)計(jì),計(jì)算它們的互現(xiàn)信息.具體操作起來,我們可以借鑒信息計(jì)量學(xué)的方法,定義兩個(gè)字的互現(xiàn)信息,并最終計(jì)算兩個(gè)漢字的相鄰共現(xiàn)概率.互現(xiàn)信息體現(xiàn)了漢字之間結(jié)合關(guān)系的緊密程度.當(dāng)緊密程度高于某一個(gè)閾值時(shí),便可認(rèn)為此字組可能構(gòu)成了一個(gè)詞.

這種方法有一定的局限性,會(huì)抽出一些共現(xiàn)頻度高、但并不是詞的常用字組,例如“這一”、“之一”、“有的”、“我的”、“許多的”等,并且對常用詞的識別精度差,時(shí)空開銷大.實(shí)際應(yīng)用的統(tǒng)計(jì)分詞系統(tǒng)都要使用一部基本的分詞詞典(常用詞詞典)進(jìn)行串匹配分詞,同時(shí)使用統(tǒng)計(jì)方法識別一些新的詞,即將串頻統(tǒng)計(jì)和串匹配結(jié)合起來,既發(fā)揮匹配分詞切分速度快、效率高的特點(diǎn),又利用了無詞典分詞結(jié)合上下文識別生詞、自動(dòng)消除歧義的優(yōu)點(diǎn).

(3)基于理解的分詞方法

這種分詞方法是通過讓計(jì)算機(jī)模擬人對句子的理解,達(dá)到識別詞的效果.其核心思想就是在分詞的同時(shí)進(jìn)行句法、語義分析,利用句法信息和語義信息來處理歧義現(xiàn)象.它通常包括3個(gè)部分:分詞子系統(tǒng)、句法語義子系統(tǒng)、總控部分.在總控部分的協(xié)調(diào)下,分詞子系統(tǒng)可以獲得有關(guān)詞、句子等的句法和語義信息來對分詞歧義進(jìn)行判斷,這種分詞方法模擬了人對句子的理解過程,需要使用大量的語言知識和信息.由于漢語語言知識的籠統(tǒng)、復(fù)雜性,難以將各種語言信息組織成機(jī)器可直接讀取的形式,因此,目前基于理解的分詞系統(tǒng)還處在試驗(yàn)階段[3].

到底哪種分詞算法的準(zhǔn)確度更高,目前并無定論.但取得公認(rèn)的是,對于任何一個(gè)成熟的分詞系統(tǒng)來說,不可能單獨(dú)依靠某一種算法來實(shí)現(xiàn),都需要綜合不同的算法.

2.2中文分詞的難題

中文是一種十分復(fù)雜的語言,讓計(jì)算機(jī)理解中文語言更是困難.在中文分詞過程中,有2大難題一直沒有完全突破.

(1)歧義識別

歧義是指同樣的一句話,可能有兩種或者更多的切分方法.例如:表面的,因?yàn)椤氨砻妗焙汀懊娴摹倍际窃~,那么這個(gè)短語就可以分成“表面/的”和“表/面的”.這種稱為交叉歧義.由于沒有人的知識去理解,計(jì)算機(jī)很難知道到底哪個(gè)方案正確.

交叉歧義相對組合歧義來說還是比較容易處理的,組合歧義就必需根據(jù)整個(gè)句子來判斷了.例如,在句子“這個(gè)門把手壞了”中,“把手”是個(gè)詞,但在句子“請把手拿開”中,“把手”就不是一個(gè)詞.

如果交叉歧義和組合歧義計(jì)算機(jī)都能解決的話,在歧義中還有一個(gè)難題,是真歧義.真歧義意思是給出一句話,由人去判斷也不知道哪個(gè)應(yīng)該是詞,哪個(gè)應(yīng)該不是詞.例如:“乒乓球拍賣完了”,可以切分成“乒乓/球拍/賣/完/了”、也可切分成“乒乓球/拍賣/完/了”,如果沒有上下文其他的句子,恐怕誰也不知道“拍賣”在這里算不算一個(gè)詞.

(2)新詞識別

新詞,專業(yè)的術(shù)語稱為未登錄詞.也就是那些在詞庫中都沒有收錄過,但又確實(shí)能稱為詞的那些詞.最典型的是人名,人可以很容易理解句子“王軍虎去廣州了”中,“王軍”是個(gè)詞,因?yàn)槭且粋€(gè)人的名字,但要是讓計(jì)算機(jī)去識別就困難了.如果把“王軍虎”做為一個(gè)詞收錄到字典中去,全世界有那么多名字,而且每時(shí)每刻都有新增的人名,收錄這些人名本身就是一項(xiàng)巨大的工程.即使這項(xiàng)工作可以完成,還是會(huì)存在問題,例如:在句子“王軍虎頭虎腦的”中,“王軍虎”還能不能算詞[4].

新詞中除了人名以外,還有機(jī)構(gòu)名、地名、產(chǎn)品名、商標(biāo)名、簡稱、省略語等都是很難處理的問題,而且這些又正好是人們經(jīng)常使用的詞,因此對于搜索引擎來說,分詞系統(tǒng)中的新詞識別十分重要.

目前,在設(shè)計(jì)算法時(shí),對于此類詞的區(qū)分將會(huì)逆向考慮,不在詞庫的詞排除常用字后即為專有名詞,這也意味著要對常用“字”進(jìn)行詞性分類如“西”“姆”,按照現(xiàn)代漢語習(xí)慣,只會(huì)和其他字結(jié)合不單獨(dú)出現(xiàn),所以“馬克西姆”是專有名詞.而對于“在”、“和”、“了”之類的字可以單獨(dú)出現(xiàn).

3 Lucene.net的中文分詞

3.1Lucene.net中文分詞核心—Analyzer

Lucene.net中,分詞是核心庫之一,其內(nèi)置在Lucene.net里的分詞都被放在項(xiàng)目的Analysis目錄下,也就是Lucene.net.Analysis命名空間下.

分詞的類的命名一般都是以“Analyzer”結(jié)束,比如KeywordAnalyzer,StandardAnalyzer,StopAnalyzer,SimpleAnalyzer,WhitespaceAnalyzer等,全部繼承自Analyzer類.而它們一般各有一個(gè)輔助類,一般以“Tokenizer”結(jié)尾,分詞的邏輯大都在輔助類完成.

嚴(yán)格地講,Analyzer應(yīng)該被稱作詞法分析器 ,它是一個(gè)進(jìn)行詞法過濾和分析的類,實(shí)際上是個(gè)對分詞器、過濾器進(jìn)行綜合包裝的類.而真正執(zhí)行分詞動(dòng)作的是輔助類Tokenizer,它們對文本進(jìn)行分詞,可能是單字、詞、二元切分等等,是真正的分詞器.

3.2比較Lucene.net的5個(gè)內(nèi)置分詞類

現(xiàn)在,對于KeywordAnalyzer,StandardAnalyzer,StopAnalyzer,SimpleAnalyzer,WhitespaceAnalyzer這5個(gè)內(nèi)置的分詞類做兩個(gè)測試,以分析對比他們各自的分詞效果.

首先,private static String TestString=“鄭州大學(xué)信息管理系,I love my major.”做第一個(gè)測試,結(jié)果如下:

Lucene.net.Analysis.KeywordAnalyzer結(jié)果:

鄭州大學(xué)信息管理系,I love my major.

Lucene.net.Analysis.StandardAnalyzer結(jié)果:

鄭/州/大/學(xué)/信/息/管/理/系/I/love/ my/ major

Lucene.net.Analysis.SimpleAnalyzer結(jié)果:

鄭州大學(xué)信息管理系/I/love/my/major

Lucene.net.Analysis.StopAnalyzer結(jié)果:

鄭州大學(xué)信息管理系/I/love/my/major

Lucene.net.Analysis.WhitespaceAnalyzer結(jié)果:

鄭州大學(xué)信息管理系,I /love/my/major.

接下來,換一句話來做第二個(gè)測試.更改Teststring值為“鄭州大學(xué)信息管理系,I’m glad to see you.阿Q正傳.”.測試結(jié)果如下:

Lucene.net.Analysis.KeywordAnalyzer結(jié)果:

鄭州大學(xué)信息管理系,I’m glad to see you.阿Q正傳.

Lucene.net.Analysis.Standard.StandardAnalyzer結(jié)果:

鄭/州/大/學(xué)/信/息/管/理/系/I’m/glad/to/see/you/阿Q正傳/

Lucene.net.Analysis.SimpleAnalyzer結(jié)果:

鄭州大學(xué)信息管理系/I’m/glad/to/see/you/阿Q正傳

Lucene.net.Analysis.StopAnalyzer結(jié)果:

鄭州大學(xué)信息管理系/I’m/glad/to/see/you/阿Q正傳

Lucene.net.Analysis.WhitespaceAnalyzer結(jié)果:

鄭州大學(xué)信息管理系,I’m/glad/to/see/you.阿Q正傳.

由此可以看出:KeywordAnalyzer分詞,沒有任何變化;StandardAnalyzer對英文和中文都單字拆分;SimpleAnalyzer和StopAnalyzer差不多,對英文按單字分開,而對中文則幾無變化;WhitespaceAnalyzer只是按空格劃分,不屏蔽標(biāo)點(diǎn)符號.

以上這些是初步的結(jié)論,但可以確定的是,Lucene.net自帶的分詞類幾乎都是按單字的標(biāo)準(zhǔn)進(jìn)行切分的,這點(diǎn)在處理中文信息時(shí)是遠(yuǎn)遠(yuǎn)達(dá)不到應(yīng)用要求的.

3.3更多的中文分詞包

上文提到,中文分詞可分為單字分詞、二元分詞、詞庫匹配、語義理解等幾種,每一種方法,Lucene.net的程序愛好者們都嘗試去研究,開發(fā)出許多達(dá)到應(yīng)用級的分詞包.

上面的測試是對Lucene.net內(nèi)置的分詞程序進(jìn)行的測試,使用的是Lucene.net默認(rèn)的單字分詞.對于后3種中文分詞方法,我們分別選擇ChineseAnalyzer,CJKAnalyzer和 IKAnalyzer 3種典型的中文分詞包進(jìn)行測試.

private static String TestString = “原鄭州大學(xué)創(chuàng)建于1956年,是新中國成立后國家創(chuàng)辦的第一所綜合性大學(xué).”;

ChineseAnalyzer結(jié)果:

原/鄭/州/大/學(xué)/創(chuàng)/建/于/1956/年/是/新/中/國/成/立/后/國/家/創(chuàng)/辦/的/第/一/所/綜/合/性/大/學(xué)

CJKAnalyzer結(jié)果:

原鄭/鄭州/大學(xué)/學(xué)創(chuàng)/創(chuàng)建/建于/于1956/1956年/年是/是新/新中/中國/國成/成立/立后/后國/國家/家創(chuàng)/創(chuàng)辦/辦的/的第/第一/一所/所綜/綜合/合性/性大/大學(xué)

IKAnalyzer結(jié)果:

鄭州大學(xué)/鄭州/大學(xué)/鄭/大/創(chuàng)建/1956年/1956/年/新中國/中國/成立/國家/創(chuàng)辦/第一所/第一/一/綜合性大學(xué)/綜合性/綜合/大學(xué)/大

由此可見:

ChineseAnalyzer采用一元分詞的方法,基本等同StandardAnalyzer;

CJKAnalyzer則是二元分詞方法,交叉雙字進(jìn)行分割;

而IKAnalyzer則是字典分詞方法,并采用正反雙向搜索來提高分詞效果.且從測試中可以看出:ChineseAnalyzer和CJKAnalyzer沒有過濾常用的漢字,如“是”、“的”等,這些常用的漢字對搜索是沒有多大作用的.KIAnalyzer則可以通過在詞典中屏蔽掉這些常用字而提高分詞和檢索的效率.

[1] 趙峰.基于Lucene的全文檢索系統(tǒng)初探[J].黑龍江科技信息,2007,12:62-64.

[2] 孫永波,郭紅峰.天文文獻(xiàn)全文檢索系統(tǒng)的研究與實(shí)現(xiàn)[J].天文研究與技術(shù),2007,4(3):296-300.

[3] 蔡建超,郭一平,王亮.基于Lucene.NET校園網(wǎng)搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(11):73-75.

[4] 趙汀,孟祥武.基于Lucene API 中文全文數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2003,20:179-181.

AnalysisonChineseSegmentationAlgorithmofLucene.net

ZHOU Shuan-long

(DepartmentofInformationManagement,ZhengzhouUniversity,Zhengzhou450001,China)

The segment of Chinese word relies on the Class Analyzer.By analyzing the five built-in analyzers of Lucene.net, it was found that their segment were based on the single character of KeywordAnalyzer, StandardAnalyzer,StopAnalyzer,SimpleAnalyzer and WhitespaceAnalyzer.An improted segment kit for a better Chinese information disposal was added.By testing the three typical kits, ChineseAnalyzer,CJKAnalyzer and IKAnalyzer, it was found that IKAnalyzer which uses Dictionary participle and the positive and negative two-way search method, worked well.

Lucene; Chinese word segment; Class Analyzer

TP 391

A

1671-6841(2011)03-0073-05

2010-12-10

周拴龍(1964-),男,副教授,碩士,主要從事信息資源數(shù)字化、全文檢索等方面的研究,E-mail:shuanlong@zzu.edu.cn.

猜你喜歡
解析器鄭州大學(xué)歧義
基于多解析器的域名隱私保護(hù)機(jī)制
基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實(shí)現(xiàn)
eUCP條款歧義剖析
中國外匯(2019年12期)2019-10-10 07:26:58
如何防御DNS陷阱?常用3種DNS欺騙手法
一種基于無關(guān)DNS的通信隱私保護(hù)技術(shù)研究
電子世界(2018年14期)2018-04-15 16:14:25
《鄭州大學(xué)學(xué)報(bào)(理學(xué)版)》征稿簡則
English Jokes: Homonyms
鄭州大學(xué)學(xué)報(bào)(理學(xué)版)
一面來自鄭州大學(xué)的錦旗
中國民政(2016年9期)2016-05-17 04:51:34
“那么大”的語義模糊與歧義分析
富源县| 呼玛县| 五华县| 五常市| 静安区| 普宁市| 旬阳县| 富川| 长岭县| 鄱阳县| 玉屏| 应城市| 阆中市| 青龙| 昌图县| 九江市| 重庆市| 玉龙| 民乐县| 房山区| 昌图县| 米脂县| 琼海市| 河曲县| 宁乡县| 鄯善县| 于都县| 贵南县| 定远县| 八宿县| 雅江县| 哈密市| 临西县| 潜山县| 县级市| 安徽省| 个旧市| 武城县| 义乌市| 石景山区| 辛集市|