陳順強(qiáng)
(西南民族大學(xué) 現(xiàn)代教育技術(shù)中心,四川 成都 610041)
彝文信息處理是一項(xiàng)龐大的系統(tǒng)工程,其中涵蓋了從字、詞、短語(yǔ)、句子、語(yǔ)篇等多層面的信息加工處理任務(wù)。彝文本是大字符集的字串,因此,彝文信息處理就增加了大字符集處理和字串到詞串處理這兩大塊任務(wù)。而詞是最小的、能獨(dú)立活動(dòng)的、有意義的語(yǔ)言成分。彝文處理應(yīng)用系統(tǒng)只要涉及語(yǔ)法語(yǔ)義(如檢索、翻譯、文摘、校對(duì)等),就需要以詞為基本單位。隨著對(duì)語(yǔ)言文字信息處理研究工作的不斷深入,在過(guò)去的十幾年里,彝文信息處理在編碼和輸入法方面做了大量卓有成效的工作,彝文字處理技術(shù)趨于成熟,并已逐步在普遍推廣中,彝文信息處理技術(shù)也從字信息處理逐步轉(zhuǎn)向語(yǔ)言信息處理,與漢語(yǔ)、英語(yǔ)和蒙、藏、維語(yǔ)等語(yǔ)種的信息處理一樣,彝文自動(dòng)分詞是彝文信息處理中一項(xiàng)不可缺少的基礎(chǔ)性工作[1]。從應(yīng)用需求來(lái)看,彝文分詞的主要目的是確定彝語(yǔ)自然語(yǔ)言處理的基本分析單位,為進(jìn)一步開(kāi)展彝語(yǔ)自動(dòng)分析,彝文文字識(shí)別、文本校對(duì)、詞匯獲取,進(jìn)而為實(shí)現(xiàn)機(jī)器翻譯、篇章理解、自動(dòng)文摘、文本校對(duì)、自動(dòng)索引等應(yīng)用處理系統(tǒng)做好前期準(zhǔn)備工作[2]。這里所研究的彝文指的是1980年國(guó)務(wù)院規(guī)定頒布使用的規(guī)范彝文。
所謂的自動(dòng)分詞,就是利用計(jì)算機(jī)把一個(gè)句子按照其中詞的含義、語(yǔ)法意義進(jìn)行切分。分詞單位指的是一個(gè)詞它具有獨(dú)立的語(yǔ)義或語(yǔ)法功能,以彝文分詞規(guī)范為依據(jù),有二字、三字詞或四字、五字的成語(yǔ)、諺語(yǔ)、格言等[3]。
國(guó)家技術(shù)監(jiān)督局1992年10月4日發(fā)布了中華人民共和國(guó)國(guó)家標(biāo)注《信息處理用現(xiàn)代漢語(yǔ)分詞規(guī)范》,為現(xiàn)代漢語(yǔ)信息處理進(jìn)一步發(fā)展制定了規(guī)范。中國(guó)臺(tái)灣“計(jì)算機(jī)語(yǔ)言學(xué)會(huì)”也為了適應(yīng)中文信息處理的需求,于1995年制定了《資訊處理用中文分詞規(guī)范》。國(guó)家標(biāo)準(zhǔn)的制定為少數(shù)民族文字分詞規(guī)范的研究提供技術(shù)支撐,在制定《彝文分詞規(guī)范》的基本原則時(shí),可以借鑒以上兩個(gè)分詞規(guī)范中的適合彝文特點(diǎn)的比較成熟的分詞技術(shù)。根據(jù)彝語(yǔ)的特點(diǎn)和規(guī)律,《彝文分詞規(guī)范》基于適用、實(shí)用、科學(xué)的角度從彝文信息處理的實(shí)際出發(fā),確定了彝文的分詞原則并制定了一系列具體的規(guī)則,該規(guī)范不僅適用于彝語(yǔ)自動(dòng)分詞、彝語(yǔ)詞性標(biāo)注、詞法分析、句法分析等彝語(yǔ)自動(dòng)分析,而且適用于以后的彝文自動(dòng)識(shí)別、機(jī)器翻譯等彝文信息處理研究[4]。
2.1.1 語(yǔ)義上無(wú)法由組合成分直接相加而得到的字串應(yīng)該合為一個(gè)分詞單位
2.1.2 單純?cè)~的分詞單位
2.1.3 合成詞的分詞單位
2.1.4 駢儷詞的分詞單位
2.1.5 有明顯的分詞標(biāo)記的分詞單位
這里所說(shuō)的有明顯的分詞標(biāo)記指的是: 空格或標(biāo)點(diǎn)符號(hào)。比如,“/”符號(hào),逗號(hào)、句號(hào)、分號(hào)、頓號(hào)、冒號(hào)、問(wèn)號(hào)、嘆號(hào)、引號(hào)、書(shū)名號(hào)、括號(hào)、破折號(hào)、省略號(hào)、間隔號(hào)、連接號(hào)等,標(biāo)點(diǎn)符號(hào)為結(jié)尾的具有很明顯的分隔標(biāo)記,就將它切分為一分詞單位。
2.1.6 二字、三字、四字或五字以上的諺語(yǔ)和格言的詞分詞單位
2.1.7 術(shù)語(yǔ)、熟語(yǔ)、外來(lái)詞、音譯詞及非彝文字其他詞的分詞單位
隨著社會(huì)的不斷進(jìn)步,在日常生活中不斷出現(xiàn)許多術(shù)語(yǔ)、熟語(yǔ)、外來(lái)詞及音譯詞,在分詞中遇到科學(xué)術(shù)語(yǔ)、外來(lái)詞、音譯詞的時(shí)候應(yīng)視作為分詞單位。例如:
在彝文文本中出現(xiàn)的非彝文字符號(hào),應(yīng)該保留其原有的形式一律視作為一分詞單位。如: NBA CEO OTC 1234 3.14等等。
根據(jù)彝語(yǔ)的特點(diǎn)彝文信息處理的發(fā)展及以上所述的分詞原則,這些原則都不是一成不變的死規(guī)定,而是隨著時(shí)代和語(yǔ)境的變化,可增可減。
對(duì)于英語(yǔ)來(lái)說(shuō)一個(gè)字就是一個(gè)詞,而且詞與詞之間有空格,所以計(jì)算機(jī)分析的時(shí)候不需要再做分詞,而在計(jì)算機(jī)中分析彝語(yǔ)就必須對(duì)彝語(yǔ)進(jìn)行分詞。彝語(yǔ)屬于漢藏語(yǔ)系藏緬語(yǔ)族彝語(yǔ)支,和漢字一樣都是方塊字。目前中文的分詞技術(shù)發(fā)展迅速,其算法也千姿百態(tài)都有利有弊。目前比較流行的中文分詞算法有: (1)基于字符串匹配的分詞;(2)基于理解的分詞;(3)基于統(tǒng)計(jì)的分詞[5]。
根據(jù)彝文分詞實(shí)現(xiàn)目標(biāo),分詞程序運(yùn)行的硬件平臺(tái)確定為普通PC 機(jī),運(yùn)行的軟件平臺(tái)是流行的Windows ,根據(jù)不同模塊實(shí)現(xiàn)的具體情況,選擇利用Java作為系統(tǒng)開(kāi)發(fā)語(yǔ)言,利用Eclipse3.2+jdk1.6+Access平臺(tái)來(lái)實(shí)現(xiàn)彝文分詞設(shè)計(jì)開(kāi)發(fā)。用Java語(yǔ)言中的TreeMap的結(jié)構(gòu)特性和HashMap儲(chǔ)存方式。TreeMap[6]是一個(gè)可以將包含的鍵根據(jù)鍵名自動(dòng)按升序排列的Map 集合,排列順序可以是默認(rèn)也可以根據(jù)實(shí)際情況自己設(shè)定,用它來(lái)存儲(chǔ)詞的字頭,可以自動(dòng)排成順序,在分詞的時(shí)候直接判斷輸入的內(nèi)容在TreeMap 中是否存在,有就進(jìn)行下一步,沒(méi)有就輸入下一段內(nèi)容,大大節(jié)省時(shí)間。HashMap 是一個(gè)二元數(shù)據(jù)存儲(chǔ)集合,可以存儲(chǔ)鍵名和鍵值,最適合用來(lái)統(tǒng)計(jì)某些對(duì)象出現(xiàn)的次數(shù),其訪問(wèn)速度非???基于計(jì)算機(jī)自動(dòng)分詞的研究.李瑞芳,孫健,李娜.沈陽(yáng)化工學(xué)院學(xué)報(bào).2008年3期.255。。
圖1 彝文自動(dòng)分詞處理流程圖
從圖1中可以看出彝文分詞要經(jīng)過(guò)以下幾個(gè)步驟:
(1) 導(dǎo)入文本。導(dǎo)入用于分詞的文本,在導(dǎo)入工程中可以選擇文本的格式,而目前本系統(tǒng)只支持純文本文件的導(dǎo)入。
(2) 對(duì)文本進(jìn)行預(yù)處理。為了提高分詞的準(zhǔn)確性和速度,文本在進(jìn)入分詞階段前都要先進(jìn)行處理,做好相應(yīng)的工序,如將長(zhǎng)篇文本分成段落式,將段落文本再處理成以標(biāo)點(diǎn)符號(hào)為單位的句子形式,盡量把句子斷得小一些。分詞時(shí)候系統(tǒng)一旦遇見(jiàn)以標(biāo)點(diǎn)符號(hào)為首尾的就將預(yù)處理成分詞單位。
(3) 將詞存儲(chǔ)到TreeMap中,并建立HashMap數(shù)組。利用Java中的數(shù)據(jù)鏈接方法,將彝文分詞詞典中的詞逐一給予讀取出來(lái),按照上面分詞原則里的條件設(shè)置成長(zhǎng)度為2字、3字、4字或者5字以上來(lái)區(qū)分詞,將其分別存儲(chǔ)到4個(gè)HashMap數(shù)組中,然后將獲取的所有詞的第一個(gè)字存儲(chǔ)到TreeMap結(jié)構(gòu)中,以待下一步操作。
(4) 對(duì)TreeMap結(jié)構(gòu)和HashMap數(shù)組中彝文詞進(jìn)行判斷。在這一步里,首先系統(tǒng)判斷輸入的字是否已經(jīng)在HashMap數(shù)組中存在,如果不存在那就繼續(xù)匹配,再進(jìn)行判斷。而如果輸入的字已經(jīng)在HashMap數(shù)組中存在,那就將其送到臨時(shí)數(shù)組中進(jìn)行判斷看TreeMap結(jié)構(gòu)中是否有這個(gè)詞,如果沒(méi)有就返回HashMap中再進(jìn)行判斷,如有該詞已經(jīng)在HashMap數(shù)組中存在,而且跟設(shè)置的長(zhǎng)度相匹配,就得出分詞的結(jié)果,否則將返回,繼續(xù)匹配判斷。
(5) 得出分詞結(jié)果。一個(gè)詞已經(jīng)過(guò)以上幾個(gè)步驟,順利到達(dá)終點(diǎn),就成功結(jié)束,得出分詞結(jié)果。
文本進(jìn)行預(yù)處理步驟的核心代碼:
Out; //輸出流
In;//輸入流
StringBuffer s1=new StringBuffer(); //緩沖
char a=in.read();
while (a !=-1) //判斷是否已到流的終點(diǎn)
{
if ((a==,‖a==?!琣==;‖a==、‖a==:‖ a==/‖a==?
‖ a==!‖a==“”‖a==《》‖a==()‖a==——‖a==……
‖ a== )) //一句結(jié)束
{
String s2=new String(s1);
out.write(""); //在句子前加
out.write(s2);
out.write(""); //在句子末尾加
out.write(/n); //換行
s1=new StringBuffer();
}
else if ( a==/)
s1=s1.append((char)32); //分詞位置空格
else if (a > 256 )
s1=s1.append((char)a);
a=in.read();
}
out.close();
in.close();
文本在預(yù)處理后,以字符數(shù)組的形式存儲(chǔ)起來(lái),對(duì)TreeMap結(jié)構(gòu)和HashMap數(shù)組中彝文詞進(jìn)行判斷核心代碼:
//first為前一個(gè)詞,second為緊隨其后的詞
public static void add(String first, String currwd){
String key=first;
String sec=second;
boolean bb=HMap.containsKey(key); //Hmap是一個(gè)已存在的HashMap,用來(lái)存儲(chǔ)數(shù)組。在這里判斷 first 是否在 主map 中
if (bb==false) { //若 主map 中無(wú),則添加
HashMap hm=new HashMap(); //首先,新構(gòu)造一個(gè) 子MAP
hm.put(key, new Integer(1));//存儲(chǔ)主KEY 的頻率hm.put(sec, new Integer(1)); //存儲(chǔ) 主KEY 后面緊接著的那個(gè)詞頻率
HMap.put(key,hm); //將 主KEY 和對(duì)應(yīng)的 子MAP 放入 主MAP 中
}
else //若 主map 中含有該詞
{
HashMap temp=(HashMap)HMap.get(key); //返回 主KEY 所對(duì)應(yīng)的 子MAP ,進(jìn)行值的修改
int count=((Integer)temp.get(key)).intValue()+1; //在子map中將主key次數(shù)加 1
temp.put(key, new Integer(count));
if (temp.containsKey(sec)) //判斷 子map 中是否含有該詞
{
int value=((Integer)temp.get(sec)).intValue()+1; temp.put(sec, new Integer(value));
}
else
temp.put(sec, new Integer(1)); //若無(wú),則將其存入子map
HMap.put(key, temp); //子map 修改完畢 ,將其重新放入 主map
通過(guò)對(duì)一段文本的切分測(cè)試如下:
切分前的文本:
切分后的文本:
Java支持多國(guó)語(yǔ)言編碼,其內(nèi)核是Unicode編碼。在Java中,字符都是以Unicode進(jìn)行存儲(chǔ)的,由于Java的String類(lèi)里的char都是Unicode編碼,所以我們可以直接用字符的機(jī)內(nèi)碼來(lái)判斷和識(shí)別字符。
彝文字與英文甚至和漢字的編碼體系都是不一樣的,所以在程序中就應(yīng)該讓程序來(lái)判斷我們導(dǎo)入的是彝文文本還是英文或者是漢文,判斷是根據(jù)文字的內(nèi)碼來(lái)進(jìn)行的,漢字是用GBK編碼的內(nèi)碼,GBK是為了推進(jìn)Unicode的實(shí)施,同時(shí)也是為了向下與我國(guó)一直沿用的字符集標(biāo)注GB2312完全兼容,電子工業(yè)部與國(guó)家技術(shù)監(jiān)督局聯(lián)合頒布的一個(gè)新的漢字內(nèi)碼擴(kuò)展規(guī)范。微軟從Windows95簡(jiǎn)體中文版就開(kāi)始就在系統(tǒng)中采用了GBK編碼。GBK中漢字的編碼范圍為4E00~9FA5(十進(jìn)制為19 968~40 869),其中有漢字(包括部首和構(gòu)件)20 902個(gè)。西南民族大學(xué)和北大方正集團(tuán)公司合作研制的Unicode彝文系統(tǒng),其在Unicode中的編碼范圍0xA000~0xA4C6[7]。
在程序中文字編碼的判斷方法如下:
/*str導(dǎo)入文本里的文字*/
Int num=str.charAt(0);//求出字符的內(nèi)碼
If(num <=128)//英文
else if(num >=19 968&&num <=40 869)//漢字,GBK編碼范圍
else if(num >=57 344&&num <=58 565)//EUDC彝文編碼范圍
else if(num >=40 960&&num <=41 282)//方正Unicode彝文編碼范圍
是不是有了分詞算法就能比較容易地解決分詞的精度和速度呢?事實(shí)遠(yuǎn)非如此。彝文的語(yǔ)法和句法結(jié)構(gòu)都比較復(fù)雜,不像英文那么簡(jiǎn)單。一個(gè)句子在不同的場(chǎng)景或不同的語(yǔ)境下,可以理解成不同的詞串、詞組串等,并有著不同的意義。所以彝文句子中存在這很多歧義和多義的現(xiàn)象。
分詞中處理歧義字段的方法很多有: 基于規(guī)則的分詞消歧,基于統(tǒng)計(jì)方法的分詞消歧等等。文本在預(yù)處理階段就用雙向掃描的方法來(lái)發(fā)現(xiàn)歧義字段,就是對(duì)同一個(gè)字段分別用正向匹配和逆向匹配方法掃描切分,如果正反掃描的結(jié)果都一樣就不存在歧義,反之則有歧義需要消歧。字段的歧義有交叉歧義和組合歧義,所以在分詞中最困難的還是消歧的技術(shù)[8]。如果能處理好消歧的問(wèn)題,分詞的精度也會(huì)相應(yīng)提高。
分詞中另一個(gè)難題還數(shù)新詞的識(shí)別,也就是未登錄詞的識(shí)別。在大規(guī)模真實(shí)文本處理中,會(huì)遇到許多在字典中都沒(méi)有收錄過(guò),但又確實(shí)能稱(chēng)為詞的那些詞。最典型的是人名、地名、機(jī)構(gòu)名、術(shù)語(yǔ)等都是很難處理的問(wèn)題,而且這些又正好是人們經(jīng)常使用的詞,對(duì)這些詞語(yǔ)的識(shí)別是件非常困難的事。分詞系統(tǒng)中的新詞識(shí)別十分重要?,F(xiàn)今新詞識(shí)別準(zhǔn)確率已經(jīng)成為評(píng)價(jià)一個(gè)分詞系統(tǒng)好壞的重要標(biāo)志之一[9]。
目前彝文信息處理對(duì)未登錄詞識(shí)別這領(lǐng)域,還沒(méi)有專(zhuān)項(xiàng)地去做研究,只是在彝文分詞中遇到時(shí)候簡(jiǎn)單解決下,這里采用是遇到新詞就在詞典中隨時(shí)加入新詞匯來(lái)解決。相信在信息處理技術(shù)的不段深入發(fā)展后會(huì)有所突破的。
彝文分詞技術(shù)前幾年西南民族大學(xué)有老師用C語(yǔ)言做過(guò)研究,但是,用Java語(yǔ)言研究開(kāi)發(fā)的本文還尚屬首例。本文經(jīng)過(guò)研究設(shè)計(jì)得出的彝文自動(dòng)分詞軟件,在對(duì)彝文真實(shí)文本分詞的時(shí)候得到的分詞結(jié)果還是比較準(zhǔn)確的,驗(yàn)證了本文初始的研究方案,將為后面的詞性標(biāo)注、彝文文字識(shí)別、文本校對(duì)、詞匯獲取,進(jìn)而為實(shí)現(xiàn)彝語(yǔ)自動(dòng)分析、機(jī)器翻譯、篇章理解、自動(dòng)文摘、文本校對(duì)、自動(dòng)索引等應(yīng)用處理系統(tǒng)做好前期理論基礎(chǔ)和技術(shù)支撐。誠(chéng)然,彝文自動(dòng)分詞技術(shù)現(xiàn)在還完全沒(méi)有達(dá)到國(guó)際國(guó)內(nèi)其他語(yǔ)言自動(dòng)分詞的水平,本軟件目前還沒(méi)有大量的推廣使用,僅在實(shí)驗(yàn)室,不過(guò)其彝文分詞理論是比較成熟的。但相信在彝文信息處理技術(shù)的不段深入發(fā)展以后將會(huì)有所突破的。
[1] 沙馬拉毅.計(jì)算機(jī)彝文信息處理[M] .北京:電子工業(yè)出版社,2000:21-67.
[2] 陳順強(qiáng).規(guī)范彝文字詞頻統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)語(yǔ)實(shí)現(xiàn)[J].西南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,4:644-648.
[3] 陳小荷.現(xiàn)代漢語(yǔ)自動(dòng)分析[M] .北京:北京語(yǔ)言文化大學(xué)出版社,2000:35-80.
[4] 劉開(kāi)瑛.中文文本自動(dòng)分詞和標(biāo)注[M] .北京:商務(wù)印書(shū)館,2000:1-249.
[5] 李月倫,常寶寶.基于最大間隔馬爾可夫網(wǎng)模型的漢語(yǔ)分詞方法[J].中文信息學(xué)報(bào),2010,24(1):8-14.
[6] 龐永慶,龐麗娟.21天學(xué)通Java[M] .北京:電子工業(yè)出版社,2008:20-300.
[7] 李金發(fā).彝語(yǔ)真人發(fā)音詞典的開(kāi)發(fā)[J].西南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,10:34-37.
[8] 傅永和.中文信息處理[M] .廣州:廣東教育出版社,1999:3-120.
[9] 石民,李斌,陳小荷.基于CRF的先秦漢語(yǔ)分詞標(biāo)注一體化研究[J].中文信息學(xué)報(bào),2010,24(2):39-45.