基于Python的藏文不自由虚词校对算法研究与实现
2019-10-20索南尖措陈家威
索南尖措 陈家威
摘 要: 藏文虚词校对是藏文自然语言处理的基础问题。将西藏地区口耳相传的藏文不自由虚词添置口诀转化为藏文不自由虚词识别及校对规则。在基于规则和词库匹配的基础上,使用Python语言实现藏文不自由虚词校对算法,细化了校对过程。同时讨论了藏文不自由虚词校对算法实现过程中的特殊情况,供读者借鉴。
关键词: 藏文自然语言处理; 藏文不自由虚词; 校对算法; Python
中图分类号:TP301.6 文献标志码:A 文章编号:1006-8228(2019)09-13-03
Research and implementation of Tibetan function word proofreading algorithm using Python
Suonan Jiancuo, Chen Jiawei
(School of Information Science and Technology, Tibet University, Lhasa, Tibet 850000, China)
Abstract: The proofreading of Tibetan function words is the basic problem of Tibetan natural language processing. In this paper, the Tibetan function word acquisition recipe handed down orally in Tibet is transformed into the Tibetan function word recognition and proofreading rules. On the basis of rules and lexicon matching, the Tibetan non-free function word proofreading algorithm is implemented in Python language, and the proofreading process is refined. At the same time, the special situation in the process of realizing the Tibetan function word proofreading algorithm is discussed, which can be used for reference by readers.
Key words: Tibetan natural language processing; Tibetan function words; proofreading algorithm; Python
0 引言
本文研究的是藏文文本自动校对中的藏文不自由虚词校对。目前藏文不自由虚词校对研究方面的文献较少:拉毛措提出了藏文属格助词的识别和自动检错算法[1];青海民族大學藏文信息处理与软件研究所的公保才让和安见才让提出了一种基于规则和藏文语法相结合的校对算法[2];青海民族大学的卓玛吉、安见才让主要研究藏文文本中大量藏文不自由虚词的识别算法[3];西藏大学的拉巴顿珠、欧珠和赵栋材用规则和统计相结合的方法,建立了较为全面的虚词知识库和规则库,并给出切分用虚词分块算法[4]。他们发表的文献和所做的研究对后人做藏文不自由虚词校对研究有着极大的贡献。
本文是在参考公保才让和安见才让发表的《藏文虚词添置校对算法研究与实现》一文基础上进行研究和撰写的。
1 藏文不自由虚词添置口诀介绍
经过了解,藏族学生从小学时期就开始背诵藏文不自由虚词校对口诀,用于检查藏文不自由虚词使用是否正确。在藏文中,不自由虚词分为终结词、为格助词、属格助词、作格助词、离合词、饰集词、待述词、指人后缀、时态助词和不自由虚词(?????)等,接下来将以终结词为例对口诀进行介绍和解释。
终结词: ??? ??? ??? ??? ??? ??? ?? ?? ??? ???
口诀为:
?????????????????????
?????????????????????????
?????????????????????????????
????????????????????????????????
藏文终结词有“??? ??? ??? ??? ??? ??? ??? ??? ??? ???”10个,它们用于句末时为不自由虚词,表示一句话的结束。用于句中时则表示为实词。如“???????、?????????”等。
以上四句口诀的意思为:终结词的使用与终结词前一音节字的后加字相对应,也就是当前一音节字的后加字为??时,终结词使用???;前一音节字的后加字为??时,终结词使用???;依此类推。
其他不同种类的不自由虚词口诀也与终结词相似,描述的内容都是不自由虚词的使用受前一音节字后加字的限制。为了使所有的口诀及其解释令读者一目了然,更加直观的了解藏文不自由虚词添置规则,我们将其转化成图,如图1所示。
2 特殊情况
在藏文不自由虚词使用过程中,大部分的虚词使用是按照图1所示进行使用,但还存在以下6种特殊情况。
⑴ 再后加字??有时候会省略:在藏文音节字中,后加字??、??、??后面的再后加字??一般情况下会省略,此时若按照规则进行校对,则会出现错误。如?????????,若按照上文提到的规则进行校对,不自由虚词????应该为使用错误,因为后加字为??,所以不自由虚词应使用????,但是由于?????省略了再后加字??,所以不应该按照后加字为??的规则去校对。按照再后加字为?的规则去校对,不自由虚词????使用正确。
解决办法:搜集后加字??、??、??后面的再后加字??省略的词语,形成一个词库,当遇到“???????????????????????????????????????????????????????????????????”这些不自由虚词时,判读不自由虚词前一音节字是否在词库中,若存在,则不自由虚词使用正确;若不存在,则不自由虚词使用错误。
⑵ ????和??这两个不自由虚词具有黏着性,与前一音节字之间不会用分隔符分开,因此极难判断是不自由虚词还是后加字或再后加字。如在?????和????中,????和??是再后加字和后加字(??省略),但是在 ?????和?????中,????和??是不自由虚词,
解决办法:建立词库,当遇到音节字后加字位置或再后加字位置为??或??的词时,判断该词是否在词库中,若存在,则????或??不是不自由虚词,若不存在,则????或??是不自由虚词。由于所需建立的词库的庞大,且个人能力有限,因此在本算法中,将后加字位置或再后加字位置为??或??的词标出,人工去判断。
⑶ 指人后缀??和?,时态助词:???? ????? ????? ????:由于指人后缀??和??和时态助词???? ????? ????? ????用法灵活,没有固定的规则可以判断它们,目前还未了解到有效的识别及计算算法,因此在本算法中暂时先不判断它们使用是否正确,只使用绿色将其标注,供人工去判断使用是否正确。
⑷ 10个实词和不自由虚词的兼类情况:“????,????,???,???,???,???,???,???,???,????”既可能是实词也可能是不自由虚词,如果不作处理就会出现错误。
解决办法:搜集以上10个音节字为实词中一部分的情况,形成一个词库,当遇到“????,????,???,???,???,???,???,???,???,????”时,判断前一音节字+不自由虚词和不自由虚词+后一音节字是否在词库中,若不存在,则证明为不自由虚词,若证明为不自由虚词判断是否符合算法规则。
⑸ 如音节字???既是自由不自由虚词,也是不自由虚词此类一个音节字既有自由不自由虚词的用法也有不自由虚词的用法。
解决办法:目前没有较好的解决办法,只能先搜集音节字???作为自由不自由虚词时组成的词组,创建词库,在文章中遇到???时,先判断??+后一音节字是否在詞库中,若在,则说明是自由不自由虚词,忽略;若不在,则说明是不自由虚词,再按照不自由虚词的规则去判断。
⑹ ????与????:原本在后加字??应该使用????,但由于????单独存在时既可能是一个实词(“知道”),也可能是一个不自由虚词。因此使用????代替????。
3 藏文不自由虚词校对算法的设计与实现
3.1 藏文不自由虚词算法的设计
????和??这两个不自由虚词具有黏着性(详细介绍见2特殊情况②),需要建立庞大的词库才可以准确识别;指人后缀??和??和时态助词???? ????? ????? ????用法灵活,没有固定的规则可以判断它们。因此暂不考虑????、??、指人后缀??和??和时态助词???? ????? ????? ????的校对。在本算法中,由于后加字位置为??或??的音节字太多,所以暂时不进行校对。将指人后缀??和??和时态助词???? ????? ????? 以及??? 使用绿色标出来供人工检测。
藏文不自由虚词校对算法流程图如图2所示。
由于虚实兼备的音节字判断方法与自由不自由虚词和不自由虚词兼备的音节字判断方法相同,因此在流程图中都归于一类。
3.2 藏文不自由虚词校对算法的实现
本文使用Python语言实现算法,并以公保才让《藏文虚词添置校对算法研究与实现》一文中的实验文本为例,输出结果如图3。
使用藏文不自由虚词添置规则判断此结果:由于????的后加字为??,因此后面的不自由虚词应该使用???,而不是????;由于???的后加字为??,因此后面的不自由虚词应该使用???,而不是???;由于?????后加字为??,因此后面的不自由虚词应该使用???,而不是???;由于???的后加字为??,因此后面的不自由虚词应该使用????,而不是????;由于???的后加字为??,因此后面的不自由虚词应该使用???,而不是???;由于??和??用法灵活,使用绿色输出,供人工判断;
与公保才让《藏文虚词添置校对算法研究与实现》一文中的输出结果(输出结果见《藏文虚词添置校对算法研究与实现》一文)相对比, 发现其文章输出的结果有两处错误:的???人工判断是正确的,但是其标红输出了; 的???其前一后加字为??,因此不自由虚词应该使用???,不应该使用???,但是其输出结果中并没有标红输出。
而经过人工判断,本文所研究的藏文不自由虚词校对算法输出的不自由虚词数量是正确的且判断准确。
4 总结
本文通过使用不同领域的十个不同大小的文本对该算法进行测试,证明该算法除本文提到的几种特殊情况外,在藏文不自由虚词识别及校对方面,具有良好的效果。
但是由于藏文不自由虚词校对过程中存在许多特殊情况。而其中有一些问题还尚未解决。
⑴ 由于指人后缀??和??和时态助词???? ????? ????? ????用法灵活,没有固定的规则可以判断它们,在本文中还尚未解决判断他们使用是否正确的问题,只得将它们使用绿色标注出来,供人工检测。
⑵ ????和??这两个不自由虚词的校对需要建立庞大的词库进行词库匹配,由于本人能力有限,目前还未能解决这两个不自由虚词的校对问题。
⑶ 由于某些音节字自由不自由虚词和不自由虚词的用法兼并,如???????中的???等等,目前暂时使用词库匹配的方式进行识别和校对,尚不能完全解决该类不自由虚词的校对问题。
对于这些藏文不自由虚词校对方面还未解决的问题,希望以后随着词库的扩充和算法的更新可以解决。
参考文献(References):
[1] 拉毛措.基于正则表达式的藏文属格的识别及其检错算法研究[J].电子技术与软件工程,2018.9:142-144
[2] 公保才让,安见才让.藏文虚词添置校对算法研究与实现[J].信息与电脑(理论版),2013.12:203-204
[3] 卓玛吉,安见才让.藏文不自由虚词的自动识别研究[J].商,2014.5:116
[4] 拉巴顿珠,欧珠,赵栋材.藏文自动分词系统中虚词识别算法研究[J].计算机应用与软件,2017.34(9):299-301,333