齊忠琪
摘要 分詞是計(jì)算機(jī)系統(tǒng)對自然語言處理的第一步,分詞的方法與準(zhǔn)確率將顯著影響自然語言的處理效果。在分析機(jī)械分詞技術(shù)的基礎(chǔ)上,提出構(gòu)建智能化機(jī)械分詞組件的思想,論述構(gòu)建智能化中文分詞組件的基本思路與方法,指出智能化中文機(jī)械分詞組件在中文信息處理領(lǐng)域中的應(yīng)用前景。
關(guān)鍵詞 中文處理;機(jī)械分詞;組件設(shè)計(jì)
中圖分類號:TP391.43 文獻(xiàn)標(biāo)識碼:B 文章編號:1671-489X(2009)21-0095-02
Design of Intelligent Mechanical Segmentation Module for Chinese Word//Qi Zhongqi
Abstract The first step of natural language processing (NLP) on computer is the segmentation for word. It affects the effect of NLP evidently that which segmentation method is used and what its precision is. In this paper, based on the comparison of several commonly used segmentation methods for Chinese word, we propose the idea of building the intelligent mechanical segmentation module. We present the basic idea and methods of the intelligent mechanical segmentation module, and forecast its prospect of application in Chinese information processing.
Key words Chinese language processing; mechanical segmentation of words; module design
Authors address Education and Science Academy of Xinjiang Normal University, Urumqi, 830053, China
文字是人類用來交際和學(xué)習(xí)知識的符號系統(tǒng),在20世紀(jì)80年代之前,人們對中文文字的認(rèn)識與應(yīng)用僅僅停留在以紙張為媒介的書面文字階段。計(jì)算機(jī)技術(shù)和通信技術(shù)的飛速發(fā)展,為中文文字的數(shù)字化處理搭建了一個全新的平臺。但由于中文文字屬于表意文字,且數(shù)量驚人,如何能讓計(jì)算機(jī)智能化處理中文文字,提高人們獲取知識的效率,則成為計(jì)算機(jī)文字處理研究領(lǐng)域研究的一個熱點(diǎn)[1-2]。
1 機(jī)械分詞法
機(jī)械分詞法[3]有時也被稱為基于字符串匹配的分詞方法。該方法主要是按照一定策略,將待分析的漢字串與事先做好的詞典中的詞條進(jìn)行匹配,從而得到分詞結(jié)果。根據(jù)匹配的策略不同,該分詞法存在幾種不同的實(shí)現(xiàn)方式,其中常用的有正向最大匹配、逆向最大匹配、最少切分等。無論采用哪種方式來實(shí)現(xiàn)機(jī)械分詞,必須要有分詞詞典的支持,并且詞典的完備程度將大大決定分詞的準(zhǔn)確度。
該分詞法的優(yōu)點(diǎn)是:算法簡單且容易實(shí)現(xiàn),出錯幾率較低。其缺點(diǎn)是:效率和準(zhǔn)確性受到詞庫容量的約束,存在歧義切分的問題。
2 在信息檢索與智能化產(chǎn)品開發(fā)中應(yīng)用機(jī)械分詞法的優(yōu)點(diǎn)
2.1 技術(shù)要求相對比較簡單機(jī)械分詞法對程序設(shè)計(jì)人員的綜合技術(shù)水平要求較低,更容易被大多數(shù)程序設(shè)計(jì)人員所接受。若采用基于統(tǒng)計(jì)的分詞方法[4],開發(fā)人員必須具有一定數(shù)學(xué)建模經(jīng)驗(yàn),并能理解有關(guān)數(shù)學(xué)模型,還必須對漢語言知識有所研究,有一定語言學(xué)的基礎(chǔ)。
2.2 產(chǎn)品開發(fā)成本低機(jī)械分詞法的算法復(fù)雜度較低,實(shí)現(xiàn)起來較為容易,且有較多可供參考的成果。這樣可以大大降低產(chǎn)品開發(fā)成本。
2.3 分詞詞典構(gòu)建難度低分詞詞典的構(gòu)建與語料庫和知識庫的構(gòu)建相比較為容易。目前有一些中文輸入法已經(jīng)公開其詞庫,分詞詞典可以基于這些詞庫進(jìn)行制作。
由此得出的結(jié)論是:在實(shí)際產(chǎn)品開發(fā)中,采用機(jī)械分詞法較為可行。
3 智能化產(chǎn)品中機(jī)械分詞組件的設(shè)計(jì)
3.1 組件整體設(shè)計(jì)在信息檢索、機(jī)器翻譯、自動應(yīng)答等基于自然語言處理應(yīng)用系統(tǒng)的開發(fā)中,首先必須實(shí)現(xiàn)分詞功能,該功能是后續(xù)功能實(shí)現(xiàn)的前提條件。鑒于這個特點(diǎn)可以將分詞功能模塊提取出來單獨(dú)設(shè)計(jì),做成一個具有通用性的模塊。這樣可以將該模塊復(fù)用到大多數(shù)基于自然語言處理的應(yīng)用系統(tǒng)當(dāng)中。
3.2 組件類型設(shè)計(jì)綜合組件通用性及實(shí)現(xiàn)的難易程度可從2方面考慮,本文將分詞組件設(shè)計(jì)成動態(tài)鏈接庫的形式。在對組件進(jìn)行組裝時,只需要清楚如何調(diào)用鏈接庫的接口函數(shù),而不用關(guān)心函數(shù)內(nèi)部實(shí)現(xiàn)。動態(tài)庫的代碼不需要重新被編譯,只在目標(biāo)對象鏈接時引入即可。另外,當(dāng)分詞算法被改進(jìn),需要重新對算法進(jìn)行設(shè)計(jì)時,只要接口函數(shù)形式不變,使用動態(tài)鏈接庫的應(yīng)用系統(tǒng)就不需重新設(shè)計(jì),只修改函數(shù)內(nèi)部實(shí)現(xiàn)即可。圖1表示動態(tài)鏈接庫與應(yīng)用系統(tǒng)之間的關(guān)系。
動態(tài)鏈接庫的實(shí)現(xiàn)是較為容易的。若在windows平臺下構(gòu)建動態(tài)庫,可以在VC++6.0中創(chuàng)建Win32 Dynamic-Link Library工程,在創(chuàng)建好的工程項(xiàng)目中直接添加代碼即可。在Linux平臺下構(gòu)建動態(tài)庫,也有現(xiàn)成的規(guī)則,只需按照規(guī)則書寫相關(guān)MakeFile文件即可。
3.3 組件接口設(shè)計(jì)在本文中組件被設(shè)計(jì)為動態(tài)鏈接庫的形式,組件接口則為動態(tài)鏈接庫提供外部函數(shù),組件組裝過程即為函數(shù)調(diào)用過程。由此可見,函數(shù)的設(shè)計(jì)需要考慮到調(diào)用的復(fù)雜性及接口的通用性。除此之外,更要考慮到接口功能的可擴(kuò)展性。
鑒于以上特點(diǎn),接口函數(shù)的設(shè)計(jì)從2方面入手。第一,函數(shù)參數(shù)。在這里參數(shù)為待分詞的內(nèi)容,在實(shí)現(xiàn)過程中,不妨利用字符串變量來存儲該內(nèi)容。由于待分詞的內(nèi)容均為文字信息,因此利用C++中的字符串對象String來存儲該信息是最為方便的。第二,函數(shù)返回值。分詞后的結(jié)果為一個個獨(dú)立的單詞,在實(shí)現(xiàn)過程中可考慮使用數(shù)組進(jìn)行存儲。在這里每一個單詞可以看做是數(shù)組中的一個元素??紤]到分詞處理只是初步,在自然語言處理中對于分詞結(jié)果還需后續(xù)處理,因此可以建立一個結(jié)構(gòu)體來保存單詞,單詞結(jié)構(gòu)體中可以包含詞性、詞義等單詞相關(guān)信息,從而可為后續(xù)處理提供更多可用信息。每一個單詞對應(yīng)一個結(jié)構(gòu)體實(shí)例,分詞結(jié)果即為單詞結(jié)構(gòu)體數(shù)組。在具體實(shí)現(xiàn)中,數(shù)組可以直接采用C++ STL中的vector模板來實(shí)現(xiàn),這樣會大大降低開發(fā)復(fù)雜度。
3.4 分詞過程設(shè)計(jì)整個分詞過程的設(shè)計(jì)是以機(jī)械分詞中的最大正向匹配算法為基礎(chǔ)的,其設(shè)計(jì)重點(diǎn)主要集中在2個方面:最大正向匹配算法的實(shí)現(xiàn)與分詞詞典的設(shè)計(jì)。
1)最大正向匹配算法的實(shí)現(xiàn)。該算法的基本思想是:假設(shè)所用的分詞詞典中,最長的一個詞所含有的漢字個數(shù)為L,則從待分詞的內(nèi)容中取出前L個漢字作為匹配字串,接著在詞典中查找該匹配字串,如果能找到,說明該字串可以組成一個詞,被切分出來;如果詞典中不存在該字串,則將字串中的最后一個字刪除構(gòu)成新的字串,再進(jìn)行同樣的匹配過程,直至匹配成功。由此完成第一個詞的切分,繼續(xù)這樣的循環(huán)直至所有詞被切分出來為止。
從算法的基本思想來看,整個過程是以循環(huán)迭代處理為主,這正符合計(jì)算機(jī)處理問題的特點(diǎn),下面將闡述如何實(shí)現(xiàn)該算法流程。
①假設(shè):S為待分詞的字符串,S=C1C2C3…Cn(Ci為單字);L為分詞詞典中最長詞所含的漢字個數(shù);W為存放單詞的臨時變量;R為最終分詞結(jié)果,即W的集合;i、j為臨時變量,i=1。②j=min(i+L-1,n);轉(zhuǎn)到③。③W=Ci…Cj;W在詞典中是否存在?是,轉(zhuǎn)到④;否,轉(zhuǎn)到⑤。④W為一個單詞,將W存入R中;i=j+1;i 在上述流程中需要注意的是:在分詞詞典中不存在的詞,最終會被切分成逐個單字。但前提是待分詞的內(nèi)容是由單個漢字組成的字符串,而編程語言中并沒有為漢字設(shè)定變量類型,因此在實(shí)現(xiàn)時應(yīng)做一定的轉(zhuǎn)碼處理。 2)分詞詞典的設(shè)計(jì)。分詞詞典在計(jì)算機(jī)中就是存放單詞信息的文本文件或二進(jìn)制數(shù)據(jù)文件,具體文件格式可以自由設(shè)定。為了文件讀取方便,可以采用一行一個詞條的格式,每個詞條包含2部分內(nèi)容——單詞本身及其詞性,二者之間以空格相隔。 評價機(jī)械分詞算法實(shí)現(xiàn)得好壞的重要因素就是詞典查找效率。為提高效率,在分詞時會將詞典先加載到內(nèi)存中,再從內(nèi)存中進(jìn)行搜索,因此詞典在內(nèi)存中的存儲形式將大大影響查找效率。由于詞典文件格式被設(shè)計(jì)為每個詞條包含單詞本身及詞性2部分內(nèi)容,詞本身決定其詞性,二者類似于鍵值對關(guān)系。因此本文提出將詞典以STL中Map的形式存儲。 4 智能化中文機(jī)械分詞組件的實(shí)際應(yīng)用 智能化中文機(jī)械分詞組件基于系統(tǒng)集成的思想,將功能實(shí)現(xiàn)隱藏在固定接口之內(nèi),從而為中文信息處理類軟件的設(shè)計(jì)和不斷完善提供方便。用此組件開發(fā)中文信息處理類軟件,具有周期短、開發(fā)成本低、通用性強(qiáng)等特點(diǎn)。 將此組件嵌入網(wǎng)站應(yīng)用程序中,可以在普通網(wǎng)站中構(gòu)建簡潔、實(shí)用的中文搜索引擎,方便一般網(wǎng)站中的信息檢索;將此組件嵌入語音合成系統(tǒng)中,可以提高文語轉(zhuǎn)換的效率,降低普通級語音合成系統(tǒng)的開發(fā)成本;將此組件嵌入智能化產(chǎn)品中,可以方便產(chǎn)品的更新?lián)Q代與內(nèi)核升級…… 本文作者提出的分詞組件的設(shè)計(jì)思想,雖然不是計(jì)算機(jī)自動分詞的最佳方法,但在具體應(yīng)用方面,則具有一定的價值。 參考文獻(xiàn) [1]王曉龍,關(guān)毅,等.計(jì)算機(jī)自然語言處理[M].北京:清華大學(xué)出版社,2005 [2]郭慶琳,樊孝忠.自然語言理解與智能檢索[J].信息與控制,2004,33(1):120-123 [3]周文帥,馮速.漢語分詞技術(shù)研究現(xiàn)狀與應(yīng)用展望[J].山西師范大學(xué)學(xué)報(bào):自然科學(xué)版,2006,20(1):25-29 [4]瞿鳳文,赫楓齡,左萬利.字典與統(tǒng)計(jì)相結(jié)合的中文分詞方法[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(9):1 766-1 771