[0043] 下面结合附图和具体实施方式对本发明作进一步的说明:
[0044] 本发明的实施例及其具体实施过程如下:
[0045] (1)对输入的文本文件进行预处理;
[0046] 对文本文件的文件编码进行探测识别,根据字符编码找到汉字编码范围和非汉字编码范围,排除非汉字编码方式构成的文本文字,保留以汉字编码方式构成的文本文字,分成汉字和符号,同时根据编码范围识别正确的汉字。
[0047] 文本编码过滤是处理里一个重要步骤,字符必须编码后才能被计算机处理,汉字的编码方式有GBK,unicode,utf-8等,表1列出了常见中文文件编码的标识属性,GNU出品的libiconv转码库能较好的实现常见文件编码识别和互相转换。
[0048] 具体实施调用C语言库文件中fopen函数以文本模式打开用户文件,然后读取文件内前3个字节与表4所列文件标识符进行比较匹配,实现四种文件编码的识别判断。对于其它编码形式文件只需要利用现有文件编辑器如notpad++进行编码转换后再输入翻译系统,在windows下利用自带的API函数WideCharToMultiByte将unicode编码转换为GB2312编码。并以该编码文本作为本翻译系统的标准处理文本。
[0049] 表4中文文件编码标识及属性
[0050]
[0051]
[0052] (2)将预处理后的文本中的字符划分归类为汉字字符和非汉字字符(标点,数字等);
[0053] 对经编译的处理文本进行汉拼转换首先需要汉字和非汉字的识别分类过程,字符识别是翻译系统的入口,经过预处理中的编码识别和转换,得到GBK编码的文本文字,极大简化汉字的识别。而汉字的GBK编码为双字节编码,只要第一个字节是大于127就固定表示这是一个汉字的开始,这是本程序识别汉字和非汉字的关键,查看GBK的编码范围为0x8140~0xA0FE,但要剔除xx7F的码位,其中常见汉字的编码范围0x8140~0xA0FE,0xB0A1~0xF7FE,GBK编码兼容ASCII码,根据一般阅读需要只对标准ASCII范围内的非汉字的数字符号和字母进行转换,提高转换和阅读效率。其余进行过滤,不做转换处理。
[0054] 具体实施逐次提取一个待翻译文本段的两个字节的字符串text[3]="xx",当text[0]值域处于汉字GBK编码值区域范围内,则转到汉盲转换子系统,若处于汉字标点的编码值域,则转到标点盲文转换子程序,若text[0]小于126,则转到符号(字符、数组等)转换子程序,实现转换的分流处理。
[0055] (3)对汉字字符的文本进行基于词典的最大匹配的分词连写处理,实现词组分割。
[0056] 分词连写的具体流程是这样的:输入一段文本S,从左到右将待分词文本中词典库最长词组长度的连续字符与词典库进行匹配,如果匹配不成功,则逐次减小连续字符的长度进行多次扫描匹配,直到匹配成功,获取词长最大的词。经分词连写操作后S分解为WS1,WS2··WSN词串,分别将这些词串做拼音转换处理得到拼音串PS1,PS2··PSN,再将各个拼音串转换得到的盲文编码顺序连接,实现分词连写。分词连写较于对文本S直接拼音转换可提高程序执行效率并准确识别多音字。
[0057] (4)对非汉字字符串和汉字字符串分别进行符盲转换
[0058] (4.1)对非汉字字符串进行符盲转换具体是:
[0059] 利用自建的针对非汉字字符的符号盲文对照表,将文本中的所有非汉字字符转换为12位的符号性盲文编码,作为盲文信息码;
[0060] 比如当在一段文本中扫描到“1”时,则遍历符号盲文对照表中的元素对其进行匹配,匹配成功则获取相应的盲文编码。
[0061] (4.2)对汉字字符串进行符盲转换具体是:
[0062] (4.2.1)先进行汉字拼音转换传递:
[0063] 汉语拼音的转换是图1汉盲转换的核心步骤,汉字拼音转换的难点在于汉语多音字的处理,而当多音字以词为单位组合时,可根据词组来确定读音,汉拼转换前首先进行的是汉字分词连写处理基本上划分出词串,以此词串作为拼音转换的操作对象就能缩小多音字识别的取词范围,简化了程序算法。
[0064] 本发明在汉拼转换中通过创建单音字汉字拼音库和面向盲人日常阅读的常用的多音字词组拼音库并以多音字拼音库为优先查询表实现词串的匹配识别,以多音字拼音库为优先查询表。
[0065] 汉拼转换主要通过建立汉字拼音对照表,实现转换。汉拼转换的子系统构造含有汉字、拼音、声调的结构体类型,并建立该汉字拼音结构体类型数组表。同时也构建了常用多音字词表的结构体数组,以达到对多音字转换的一定正确性,减少盲人摸读时的误读和误解频次。
[0066] 汉拼转换具体是以遍历查表的方式将待转换的汉字文本与结构体数组中各个元素作为两个参数以字符串比较来进行汉字匹配判断,当匹配到汉字后,就查到汉字在同一结构体中对应的拼音,从而得到汉字对应的拼音。
[0067] (4.2.2)对于汉字拼音转换后得到的拼音串,采用以下方式进行拼音到盲文的转换,转换为12位的符号性盲文编码,作为盲文信息码:
[0068] a)对拼音串进行音素的识别和分割提取,分为整体认读音节、声母和韵母;
[0069] 本发明方法在拼音转盲文中音素盲文对照表的存储采取结构体数组的形式,并创建音素-盲符结构体数组,而音素-盲符对照结构体类型中包含三个结构体变量,声母、韵母、整体认读音节和它们对应的盲符,由于韵母自成音节和整体认读音节所表示的字均为单方盲字,为此增加一个空方使所有的盲字都为两方形式的统一输出。通过此结构体数组来关联拼音和符号性盲文编码,并最终获取单个拼音串的12位符号性盲文编码。
[0070] 上面所述的拼盲转换的具体过程是这样的:输入拼音串时,首先需要判别输入的拼音串,若为整体认读音节则根据盲文对照表直接转换生成盲字,而若为声韵拼读的拼音,则需要拆分声母韵母后进行音素的识别匹配,保证后续转换的顺利。而当声母韵母分别匹配完成后,需要再次将声韵盲符合并起来,完成一个12位盲字的生成。
[0071] 由于汉拼转换中返回的是拼音串而非音盲结构体中的音素单元,需要进行拼音的音素匹配。为此本发明设计出一种正向最大匹配算法,对于每个汉字的拼音串,采用正向最大匹配算法,对于每个汉字的拼音串,采用正向最大匹配算法,以从长到短的步长将拼音串中的拼音字母与音素盲文对照表中的音素进行逐一匹配,获得是否匹配的结果,初始步长取该拼音串的字母总数;若在最大步长下匹配成功,则终止匹配,若否,则修改步长,以最长声母的两个字母的步长预匹配,当匹配成功后,则对剩余字母直接进行韵母匹配。同时考虑到与单方音节相比,声韵拼读音节的匹配过程要复杂得多,判断步数也多,因此,本发明特意根据拼音的构成形式把音素盲文对照表遍历匹配的先后顺序安排如下:单方音节(包含整体认读音节和自成音节韵母(零声母)),声韵拼读音节。先将待转换拼音直接与单方音节数组中的各个元素进行字符比较,匹配成功的单方音节对应的盲文即为待转换拼音的盲字点列,同时需要补0以两方12位数据的格式存储表示。
[0072] 若不属于单方音节,需要对拼音的音素进行分割提取和匹配。同样地,按照正向最大匹配的原则获得与待转换音素最为匹配的音素。同时先匹配字符最长的声母,由此,为减少程序判断,本发明巧妙地在声母-盲文结构体数组的初始化里把字符最长的声母放在前面,达到准确匹配。
[0073] b)将每个拼音串分割后所得到的音素利用自建的音素盲文对照表,得到每个音素对应的6位符号性盲文编码。对于整体认读音节,将其匹配所得的6位符号性盲文编码直接与“000000”字符串顺序连接,完成12位汉盲的转换。对于非整体认读音节,则将其声母和韵母分别匹配所得的6位符号性盲文编码依次组合成为12位的符号性盲文编码。
[0074] 在韵母匹配中根据已经匹配的声母字串长度来确定待转换拼音中韵母字串的地址,再次与音素-盲符结构体中的韵母进行查表匹配。
[0075] 最后将声母盲字点列与韵母盲字点列拼接,如图3所示,从而完成拼音到盲符点列的转换,并进行转换成功判断。转换成功后,最终生成12位的盲文信息码,根据盲文信息码在盲文显示器上进行显示。
[0076] 例如拼音串“yuan”,这是一个具有单方音节的拼音串,因此执行单方音节匹配子程序。将单方音节-盲符结构体数组中的音素与拼音串“yuan”进行依次匹配,直到完全匹配上为止,从而找到与之匹配的音素及其对应的6位符号性盲文编码。然后将所得到的6位符号性盲文编码末尾补“000000”组成两方12位的盲文点列。
[0077] 例如拼音串“zui”,这是一个具有声韵拼读音节的拼音串,在与单方音节-盲符结构体数组中元素匹配的时候得到匹配不成功的结果,因此转到声韵拼读音节匹配子程序。将声母盲符结构体数组前三个字符最长的声母依次与拼音串“zui”比较前两个字母,结果不相同,然后只需将声母盲符结构体数组中的单个字母的声母依次和“z”进行匹配即可,继而找到完全匹配的声母及其对应的6位符号性盲文编码。再来匹配韵母,将韵母盲符结构体数组中的音素依次和“ui”匹配,得到与之完全匹配的韵母及其对应的6位符号性盲文编码。
最后分别将声母韵母的6位符号性盲文编码顺序连接组成12位的盲文点列。
[0078] 本发明在拼音转盲文过程中将拼音串分为整体认读音节和非整体认读音节两大类,并把非整体认读音节拆分成声母和韵母分别进行匹配,大大降低了程序运行步数,也使程序逻辑清晰化,简单化。另外,采用正向最大匹配法使本发明方法实现的结果更为准确。