彝文自动分词技术研究
2011-06-14陈顺强
陈顺强
(西南民族大学 现代教育技术中心,四川 成都 610041)
1 引言
彝文信息处理是一项庞大的系统工程,其中涵盖了从字、词、短语、句子、语篇等多层面的信息加工处理任务。彝文本是大字符集的字串,因此,彝文信息处理就增加了大字符集处理和字串到词串处理这两大块任务。而词是最小的、能独立活动的、有意义的语言成分。彝文处理应用系统只要涉及语法语义(如检索、翻译、文摘、校对等),就需要以词为基本单位。随着对语言文字信息处理研究工作的不断深入,在过去的十几年里,彝文信息处理在编码和输入法方面做了大量卓有成效的工作,彝文字处理技术趋于成熟,并已逐步在普遍推广中,彝文信息处理技术也从字信息处理逐步转向语言信息处理,与汉语、英语和蒙、藏、维语等语种的信息处理一样,彝文自动分词是彝文信息处理中一项不可缺少的基础性工作[1]。从应用需求来看,彝文分词的主要目的是确定彝语自然语言处理的基本分析单位,为进一步开展彝语自动分析,彝文文字识别、文本校对、词汇获取,进而为实现机器翻译、篇章理解、自动文摘、文本校对、自动索引等应用处理系统做好前期准备工作[2]。这里所研究的彝文指的是1980年国务院规定颁布使用的规范彝文。
所谓的自动分词,就是利用计算机把一个句子按照其中词的含义、语法意义进行切分。分词单位指的是一个词它具有独立的语义或语法功能,以彝文分词规范为依据,有二字、三字词或四字、五字的成语、谚语、格言等[3]。
2 制定《彝文分词规范》和分词词表
国家技术监督局1992年10月4日发布了中华人民共和国国家标注《信息处理用现代汉语分词规范》,为现代汉语信息处理进一步发展制定了规范。中国台湾“计算机语言学会”也为了适应中文信息处理的需求,于1995年制定了《资讯处理用中文分词规范》。国家标准的制定为少数民族文字分词规范的研究提供技术支撑,在制定《彝文分词规范》的基本原则时,可以借鉴以上两个分词规范中的适合彝文特点的比较成熟的分词技术。根据彝语的特点和规律,《彝文分词规范》基于适用、实用、科学的角度从彝文信息处理的实际出发,确定了彝文的分词原则并制定了一系列具体的规则,该规范不仅适用于彝语自动分词、彝语词性标注、词法分析、句法分析等彝语自动分析,而且适用于以后的彝文自动识别、机器翻译等彝文信息处理研究[4]。
2.1 彝文分词规范原则
2.1.1 语义上无法由组合成分直接相加而得到的字串应该合为一个分词单位
2.1.2 单纯词的分词单位
2.1.3 合成词的分词单位
2.1.4 骈俪词的分词单位
2.1.5 有明显的分词标记的分词单位
这里所说的有明显的分词标记指的是: 空格或标点符号。比如,“/”符号,逗号、句号、分号、顿号、冒号、问号、叹号、引号、书名号、括号、破折号、省略号、间隔号、连接号等,标点符号为结尾的具有很明显的分隔标记,就将它切分为一分词单位。
2.1.6 二字、三字、四字或五字以上的谚语和格言的词分词单位
2.1.7 术语、熟语、外来词、音译词及非彝文字其他词的分词单位
随着社会的不断进步,在日常生活中不断出现许多术语、熟语、外来词及音译词,在分词中遇到科学术语、外来词、音译词的时候应视作为分词单位。例如:
在彝文文本中出现的非彝文字符号,应该保留其原有的形式一律视作为一分词单位。如: NBA CEO OTC 1234 3.14等等。
根据彝语的特点彝文信息处理的发展及以上所述的分词原则,这些原则都不是一成不变的死规定,而是随着时代和语境的变化,可增可减。
3 彝文分词算法
对于英语来说一个字就是一个词,而且词与词之间有空格,所以计算机分析的时候不需要再做分词,而在计算机中分析彝语就必须对彝语进行分词。彝语属于汉藏语系藏缅语族彝语支,和汉字一样都是方块字。目前中文的分词技术发展迅速,其算法也千姿百态都有利有弊。目前比较流行的中文分词算法有: (1)基于字符串匹配的分词;(2)基于理解的分词;(3)基于统计的分词[5]。
4 基于Java彝文分词技术的实现
根据彝文分词实现目标,分词程序运行的硬件平台确定为普通PC 机,运行的软件平台是流行的Windows ,根据不同模块实现的具体情况,选择利用Java作为系统开发语言,利用Eclipse3.2+jdk1.6+Access平台来实现彝文分词设计开发。用Java语言中的TreeMap的结构特性和HashMap储存方式。TreeMap[6]是一个可以将包含的键根据键名自动按升序排列的Map 集合,排列顺序可以是默认也可以根据实际情况自己设定,用它来存储词的字头,可以自动排成顺序,在分词的时候直接判断输入的内容在TreeMap 中是否存在,有就进行下一步,没有就输入下一段内容,大大节省时间。HashMap 是一个二元数据存储集合,可以存储键名和键值,最适合用来统计某些对象出现的次数,其访问速度非常快*基于计算机自动分词的研究.李瑞芳,孙健,李娜.沈阳化工学院学报.2008年3期.255。。
4.1 彝文自动分词处理流程图
图1 彝文自动分词处理流程图
从图1中可以看出彝文分词要经过以下几个步骤:
(1) 导入文本。导入用于分词的文本,在导入工程中可以选择文本的格式,而目前本系统只支持纯文本文件的导入。
(2) 对文本进行预处理。为了提高分词的准确性和速度,文本在进入分词阶段前都要先进行处理,做好相应的工序,如将长篇文本分成段落式,将段落文本再处理成以标点符号为单位的句子形式,尽量把句子断得小一些。分词时候系统一旦遇见以标点符号为首尾的就将预处理成分词单位。
(3) 将词存储到TreeMap中,并建立HashMap数组。利用Java中的数据链接方法,将彝文分词词典中的词逐一给予读取出来,按照上面分词原则里的条件设置成长度为2字、3字、4字或者5字以上来区分词,将其分别存储到4个HashMap数组中,然后将获取的所有词的第一个字存储到TreeMap结构中,以待下一步操作。
(4) 对TreeMap结构和HashMap数组中彝文词进行判断。在这一步里,首先系统判断输入的字是否已经在HashMap数组中存在,如果不存在那就继续匹配,再进行判断。而如果输入的字已经在HashMap数组中存在,那就将其送到临时数组中进行判断看TreeMap结构中是否有这个词,如果没有就返回HashMap中再进行判断,如有该词已经在HashMap数组中存在,而且跟设置的长度相匹配,就得出分词的结果,否则将返回,继续匹配判断。
(5) 得出分词结果。一个词已经过以上几个步骤,顺利到达终点,就成功结束,得出分词结果。
4.2 实现过程
文本进行预处理步骤的核心代码:
Out; //输出流
In;//输入流
StringBuffer s1=new StringBuffer(); //缓冲
char a=in.read();
while (a !=-1) //判断是否已到流的终点
{
if ((a==,‖a==。‖a==;‖a==、‖a==:‖ a==/‖a==?
‖ a==!‖a==“”‖a==《》‖a==()‖a==——‖a==……
‖ a== )) //一句结束
{
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();
文本在预处理后,以字符数组的形式存储起来,对TreeMap结构和HashMap数组中彝文词进行判断核心代码:
//first为前一个词,second为紧随其后的词
public static void add(String first, String currwd){
String key=first;
String sec=second;
boolean bb=HMap.containsKey(key); //Hmap是一个已存在的HashMap,用来存储数组。在这里判断 first 是否在 主map 中
if (bb==false) { //若 主map 中无,则添加
HashMap hm=new HashMap(); //首先,新构造一个 子MAP
hm.put(key, new Integer(1));//存储主KEY 的频率hm.put(sec, new Integer(1)); //存储 主KEY 后面紧接着的那个词频率
HMap.put(key,hm); //将 主KEY 和对应的 子MAP 放入 主MAP 中
}
else //若 主map 中含有该词
{
HashMap temp=(HashMap)HMap.get(key); //返回 主KEY 所对应的 子MAP ,进行值的修改
int count=((Integer)temp.get(key)).intValue()+1; //在子map中将主key次数加 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)); //若无,则将其存入子map
HMap.put(key, temp); //子map 修改完毕 ,将其重新放入 主map
4.3 分词结果
通过对一段文本的切分测试如下:
切分前的文本:
切分后的文本:
5 彝文分词中存在的难点
5.1 彝文Unicode编码
Java支持多国语言编码,其内核是Unicode编码。在Java中,字符都是以Unicode进行存储的,由于Java的String类里的char都是Unicode编码,所以我们可以直接用字符的机内码来判断和识别字符。
彝文字与英文甚至和汉字的编码体系都是不一样的,所以在程序中就应该让程序来判断我们导入的是彝文文本还是英文或者是汉文,判断是根据文字的内码来进行的,汉字是用GBK编码的内码,GBK是为了推进Unicode的实施,同时也是为了向下与我国一直沿用的字符集标注GB2312完全兼容,电子工业部与国家技术监督局联合颁布的一个新的汉字内码扩展规范。微软从Windows95简体中文版就开始就在系统中采用了GBK编码。GBK中汉字的编码范围为4E00~9FA5(十进制为19 968~40 869),其中有汉字(包括部首和构件)20 902个。西南民族大学和北大方正集团公司合作研制的Unicode彝文系统,其在Unicode中的编码范围0xA000~0xA4C6[7]。
在程序中文字编码的判断方法如下:
/*str导入文本里的文字*/
Int num=str.charAt(0);//求出字符的内码
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彝文编码范围
5.2 对彝文歧义字段的处理
是不是有了分词算法就能比较容易地解决分词的精度和速度呢?事实远非如此。彝文的语法和句法结构都比较复杂,不像英文那么简单。一个句子在不同的场景或不同的语境下,可以理解成不同的词串、词组串等,并有着不同的意义。所以彝文句子中存在这很多歧义和多义的现象。
分词中处理歧义字段的方法很多有: 基于规则的分词消歧,基于统计方法的分词消歧等等。文本在预处理阶段就用双向扫描的方法来发现歧义字段,就是对同一个字段分别用正向匹配和逆向匹配方法扫描切分,如果正反扫描的结果都一样就不存在歧义,反之则有歧义需要消歧。字段的歧义有交叉歧义和组合歧义,所以在分词中最困难的还是消歧的技术[8]。如果能处理好消歧的问题,分词的精度也会相应提高。
5.3 对彝文未登录词识别
分词中另一个难题还数新词的识别,也就是未登录词的识别。在大规模真实文本处理中,会遇到许多在字典中都没有收录过,但又确实能称为词的那些词。最典型的是人名、地名、机构名、术语等都是很难处理的问题,而且这些又正好是人们经常使用的词,对这些词语的识别是件非常困难的事。分词系统中的新词识别十分重要。现今新词识别准确率已经成为评价一个分词系统好坏的重要标志之一[9]。
目前彝文信息处理对未登录词识别这领域,还没有专项地去做研究,只是在彝文分词中遇到时候简单解决下,这里采用是遇到新词就在词典中随时加入新词汇来解决。相信在信息处理技术的不段深入发展后会有所突破的。
6 结束语
彝文分词技术前几年西南民族大学有老师用C语言做过研究,但是,用Java语言研究开发的本文还尚属首例。本文经过研究设计得出的彝文自动分词软件,在对彝文真实文本分词的时候得到的分词结果还是比较准确的,验证了本文初始的研究方案,将为后面的词性标注、彝文文字识别、文本校对、词汇获取,进而为实现彝语自动分析、机器翻译、篇章理解、自动文摘、文本校对、自动索引等应用处理系统做好前期理论基础和技术支撑。诚然,彝文自动分词技术现在还完全没有达到国际国内其他语言自动分词的水平,本软件目前还没有大量的推广使用,仅在实验室,不过其彝文分词理论是比较成熟的。但相信在彝文信息处理技术的不段深入发展以后将会有所突破的。
[1] 沙马拉毅.计算机彝文信息处理[M] .北京:电子工业出版社,2000:21-67.
[2] 陈顺强.规范彝文字词频统计系统设计语实现[J].西南民族大学学报(自然科学版),2010,4:644-648.
[3] 陈小荷.现代汉语自动分析[M] .北京:北京语言文化大学出版社,2000:35-80.
[4] 刘开瑛.中文文本自动分词和标注[M] .北京:商务印书馆,2000:1-249.
[5] 李月伦,常宝宝.基于最大间隔马尔可夫网模型的汉语分词方法[J].中文信息学报,2010,24(1):8-14.
[6] 庞永庆,庞丽娟.21天学通Java[M] .北京:电子工业出版社,2008:20-300.
[7] 李金发.彝语真人发音词典的开发[J].西南民族大学学报(自然科学版),2005,10:34-37.
[8] 傅永和.中文信息处理[M] .广州:广东教育出版社,1999:3-120.
[9] 石民,李斌,陈小荷.基于CRF的先秦汉语分词标注一体化研究[J].中文信息学报,2010,24(2):39-45.