已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
引言 文本服务框架 text servi ce fram ew ork 简称tsf 1 是微软在w i ndow s x p以后推出的基于co m 的 一种新的输入法框架 可以为应用程序启用高级的文本输入和自然语言技术 tsf提供与设备无关的 a pi 它为文本服务提供应用程序访问 tsf输入法相对于原来的i m m 输入法 在技术上更易扩展和维护 在使用上支持键盘输入 手写识别输入和语音识别输入 功能更强大 tsf框架下的输入法和应用程序在 逻辑上是独立的 在tsf框架下开发输入法 开发人员无需关心使用文本服务的应用程序是如何实现的 也无需知道操作系统内部的调用关系 只需要完成相应的文本服务接口就可以了 tsf框架是基于co m 技术的 2 而com 技术在v c上的实现是基于多重继承 虚函数和动态链接库技术 的 因此 在tsf框架下开发文本服务 必须使用o o o bj ect o ri ent ed 面向对象 编程思想 但无需设计 底层的类和接口 只要继承所需要的接口 并将其实现即可 3 藏文输入法较多 但每种输入法都有一定的缺陷 比如以微软操作系统自带的藏文输入法为例 能输 入所有的藏文字符 字符编码也是基于 u ni code 的 但在解决 藏文基本字符大于基本键盘可用键位 这 一矛盾时 用了 组合键位 标示键 等方案 其结果是输入规则特殊化 输入编码增长 不能 一键一字 摘要 tsf是微软推出的一种新的输入法框架 用tsf开发藏文输入法不仅能实现词组输入的功能 而且能克服现有的藏文输入法的缺陷 提高藏文键盘的输入速度 在剖析tsf 输入法工作原理的基础 上 定义了tsf 藏文输入法的类并实现了一个基于tsf的具有藏文词组输入功能的输入法 其中重点讨论 了藏文词组输入的实现过程 关键词 tsf 藏文 输入法 中图分类号 tp391 1文献标识码 a文章编号 1005 5738 2014 02 071 10 收稿日期 2014 06 18 基金项目 2014年度国家自然科学基金重点项目 跨语言社会舆情分析基础理论与关键技术研究 阶段性成果 项目号 61331013 第一作者简介 高定国 男 藏族 四川阿坝人 西藏大学藏文信息技术研究中心副教授 硕士研究生导师 主要研究方向为 藏文信息处理 tsf藏 文 输 入 法 的 设 计 与 实 现 高定国郭 鑫 西藏大学藏文信息技术研究中心 西藏拉萨 850000 西藏大学学报 自然科学版 journalof tibetuniversity vol 29no 2 oct 2014 第29卷 第2期 2014年10月 71 71 71 符 地输入藏文字符 4 从藏文字符本身的属性来看 藏文是拼音文字 但一个音节的组合不是任意的 其上下前后字符都受文法严格的限制 能组合的只有18000多音节 5 这些音节又类似于汉语的 字 参 与 组词 多个音节组合在一起成词 一个音节也参与多个词的组合 用tsf技术开发藏文输入法不仅 能实现词组输入的功能 而且能克服现有一些藏文输入法的缺陷 提高藏文键盘的输入速度 1 tsf输入法工作原理剖析 tsf负责管理键盘布局 显示语言栏 用于切换键盘布局 管理和切换活动的输入方法编辑器 并提 供允许文本服务连续访问应用程序文档文本的抽象层 1 1 tsf输入法框架 w i ndow s 提供了两套输入法框架 5 6 im m input m et hod m anager 7 8 w i ndow s x p及之前 基于纯函数a pi 的输入法 在市面上除微软中文输入法和极品五笔2013以外很 多都是基于im m 的输入法 tsf text ser vi ce fram ew ork 框架 9 w i ndow s xp普及后 w i ndow s 提供新的基于co m 的一个输入法框架 实际上 到了w i ndow s v i st a w i ndow s7所有的应用程序和各种输入控件都优先使用了tsf 但w i ndow s v i st a w i ndow s 7用户还能使 用各种基于im m 的输入法 ci cero tsf的开发代号 的目标是提供一套简单通用并易扩展的框架 用于高级文本输入和自然语 言处理 一个tsf能够提供诸如键盘输入 手写识别 语言识别等多语言支持和处理 tsf的框架见图1 图1 tsf的框架图 如图1所示 文本服务框架由应用程序 文本服务和tsf管理器等3个主要部分组成 从图1中可以 看到 tsf提供一个位于应用程序和输入法的间接层tip text input processor 可见tsf的优点在 于 它是一个与设备无关 语言中立 可扩展的系统 同时给用户提供一致的输入体验 任何tsf enabl ed 应用程序都能从任何text servi ce 接受文字输入 而不用考虑text source 的具体细节 同时 text ser vi ce 也不用考虑各种不同应用的差别 1 2 tsf工作原理 tsf输入法的框架与im m 输入法的框架不同 两种输入法的工作原理分别为 10 im m 的工作原理 在w i ndow s x p下 默认情况下cua s ci cer o u naw ar e a ppl i cat i on support 为所有应用程序和控件 提供基本的tip支持 是关闭的 其工作原理见图2 高定国 郭鑫 tsf藏文输入法的设计与实现 72 72 72 72 图 2 imm工作原理图 如图2所示 所有 edi t cont rol 包括n ot epad 都是直接调用im m 的api 最后调用im m 输入法 而 4 1版本后的 ri ch edi t cont rol 包括w ordpad等 是直接用tsf实现的输入法 tsf工作原理 在w i ndow s x p下如果打开cu a s 或者操作系统是w i ndow s vi st a 或w i ndows7的情况下 其工作原理 见图3 如图3所示 im m 32和cu a s中多了一条交互 这意味着如果一个输入法实现了tip 应用程序的所 有输入由ti p实现完成 图3 tsf工作原理图 2 tsf藏文输入法类的设计 根据藏文输入法所需要的功能 设计了tsf藏文输入法的类 类及其类之间的关系见图4 11 如图4所示 ctext servi ce类为程序主类 继承并实现了tsf文本服务的四个组件i tftext input pro cessor i tfthreadm grevent si nk i tfk eyevent si nk和 itfthreadfocussi nk 用于实现输入法激活和关 闭 输入法线程管理以及词组输入等功能 cpopupw i ndow类为弹出窗口类 是程序中所有窗口类的父类 其成员函数完成弹出窗口的基本功 能 注册和销毁窗口 建立和关闭窗口 显示和隐藏窗口等 该类有3个子类 ccandi dat ew i ndow 候选词窗口 cinst al l w i ndow 输入法设置窗口 用于实现皮肤管理和词库管理等输入法设置 csoft k eyboardw i ndow 实现软键盘窗口的功能 ccandi dat eli st 类为候选子列表类 其成员方法完成读取码表 候选词查找等功能 cedi esessi onbase 类为编辑会话类 从itfedi t sessi on接口继承 是程序中其它编辑会话类的父 类 其子类ck eyh andl er edi t sessi on实现词组输入模块中输出子模块和软键盘模块的输出子模块的功 高定国 郭鑫 tsf藏文输入法的设计与实现 3 3 3 7 7 7 能 clangbarit em but t on为语言栏按钮类 继承了itflangbar it em but t on i tflangbarit em si nk和i tf source 三个接口 用于实现输入法语言栏的管理 图4 tsf藏文输入法的类 3 tsf藏文输入法的设计与实现 根据设计 tsf藏文输入法由输入法注册和调用模块 输入法线程管理模块 词组输入模块 换肤模 块 词库管理模块和软键盘模块组成 软件的总体模块见图5 3 1 输入法调用和注册模块 该模块主要完成输入法注册和卸载 输入法激活和关闭 语言栏注册以及语言栏事件响应等功能 其 中输入法注册和卸载用d l l regi st erser ver 和d l l u nregi st erserver 两个函数 函数中使用a pi 函数 regset val ueex 和recur sed el et ek ey 向注册表中添加和删除输入法dl l 的信息 高定国 郭鑫 tsf藏文输入法的设计与实现 输入法注册 和调用模块 输入法线程 管理模块 词组输 入模块 换肤模块软键盘模块 tsf 藏文输入法 词库管 理模块 图5 tsf藏文输入法的模块图 74 74 74 74 3 2 输入法线程管理模块 输入法线程管理模块完成以下功能 得到焦点 输入法线程得到文档焦点时 会重新进行一些初始化的工作 如清除编码字符串缓冲区 重绘候选词 窗口等 失去焦点 输入法处于激活状态时 如果用户点击了输入法线程文档以外的位置 则输入法线程会失去文档焦 点 此时如果候选词窗口处于显示状态 则应该隐藏候选词窗口 焦点改变 对输入法线程文档焦点改变的处理与失去焦点的处理一致 不同的是该代码应该放在从itf thread m gr event si nk组件继承的接口o nset focus 中 3 3 词组输入模块 藏文词组的输入是本软件的特点 也是本软件的优点 在实现藏文词组输入时 首先建立藏文字词的 码表 再按照用户的输入从码表中选择合适的字词完成输入 3 3 1 读取码表 首先建立码表 其文件的格式为 cr繱纊 贉 繱纊 繱 纊繳 cr 为编码字符串 中间以空格隔开 后面是候选词字符串 每个候选词中间以逗号隔开 将码表文件 的内容存储到内存中的时候 直接按照编码映射候选词的格式存储 这样 在需要时 就可以根据编码快 速地找到候选词 然后再以逗号将候选词字符串分成一个个的候选词 供用户选择 使用c 标准库中的文件流f st ream可以方便地读取码表文件 然后使用stl中的m ap容器将编码字 符串和候选词成对存储 存为key val ue 映射对 这样存储和查找的时候都比较方便 候选字符的初始 化程序如下 bo ol ccandi dat eli st i ni t st d wst ri ng code w ord code 用来存储当前读到的编码字符串 w ord用来存储当前读到的候选 词字符串 读取系统码表文件 打开码表文件 以二进制方式读取 st d i fst reamcodetabl e codetabl e open wst rresourcepat h l t abl e m ab st d i os bi nary 如果打开失败则返回 否则 跳过码表文件 文本文件 两个字节的开始符 codetabl e seekg 2 st d i os cur 读取码表文件 直到码表文件的结尾 whi l e codetabl e eof w char t w ch codetabl e read char i f wch 0 x000d 如果读到了回车符 高定国 郭鑫 tsf藏文输入法的设计与实现 5 5 5 7 7 7 i f code em pt y 清空code和w ord code cl ear word cl ear i f codetabl e eof 跳过行开始符 codetabl e seekg 2 st d i os cur el se i f wch 0 x0020 如果读到了空格符 code word w ord cl ear el se 如果是藏文字母或英文字母 则将其存入w ord中 w ord append 1 w ch code cl ear word cl ear codetabl e cl ose codetabl e cl ear 读取用户码表 与系统码表的读取方式一致 代码略 r et ur n tru e 3 3 2 候选词查找 由于已经将码表中的编码 候选词映射对存入到了m ap容器中 所以直接使用m ap容器的f i nd函 数即可实现候选词的查找 此函数底层的查找算法基于红黑树 其时间复杂度为o l ogn 12 找到候选 词字符串后 再根据逗号将其分隔成一个一个的候选词 存入数组中 bo ol ccandi dat eli st fi nd bo o l fi r st tru e unsi gned i nt ccandi dat eli st w ordpos 当前查找藏文字符串的位置 w ordpos 0 每一次查找 都应将查找位置置为0 i nt ccandi dat eli st page 页数 page 0 每一次查找 都应重置页数 fi ndw ord l 存储查找到的候选词字符串 将所有编码字符串映射的候选词存入m ap中 for st d m ap const i t erat ori t t abl eh ash begi n i t t abl e h ash end i t 如果找到了以编码字符串开头编码的候选词字符串 i f i t f i rst fi nd achtext 0 achtext 为要查找的编码字符串 i f f i rst 高定国 郭鑫 tsf藏文输入法的设计与实现 6 6 6 6 7 7 7 7 fi rst false 如果是第一个候选词 则不在它前面加逗号 el se fi ndw ord l 否则 在前面加逗号 fi ndw ord i t second el se 否则 如果fi ndw or d不为空的话 说明已经查找完了所有编码字符串映射的候选词 i f fi ndw ord em pt y break i f fi ndw ord em pt y 进行后续的处理 将候选词字符串分割后 存入数组中 代码略 3 3 3 藏文词组的输入 在进行输入时 系统监听全局键盘事件 并根据不同的按键消息进行不同的响应 首先实现ckey h andl er edi t sessi on d oedi t sessi on接口 在此函数中根据接收到的不同的按键虚拟码 调用不同的处 理函数 std api ck eyhandl eredi t sessi on doedi t sessi on tfedi t cooki e ec sw i t ch w param case v k left case v k righ t 如果按下的是左右键 则调用 h andl ea r row key函数进行处理 对其它按键的处理一致 代码略 def aul t 如果软件盘处于开启状态 i f csoft keyboardw i ndow i so pen 软键盘会模拟键盘 q 键按下的消息 i f wparam q ret urn ptext ser vi ce handl echaract erk ey ec pcon t ext w par am el se i f w par am a break ret urn s o k 3 3 4 藏文词组的输出 在输入模块中 已经接收了各种按键的消息 并调用了各个处理函数对不同的按键消息进行处理 输出模块的代码就在这些按键处理函数中 由于各种按键处理函数的逻辑基本一致 所以在此仅以字符 按键处理消息为例来看处理过程 高定国 郭鑫 tsf藏文输入法的设计与实现 77 77 77 h resu ltctext servi ce h andl echar act erk ey tfedi t cooki eec i tfcont ext pcont ext w para mw par am w cha r ch 存储由按键虚拟码转换的字符 itf cont ext vi ew pcont ext v i ew 如果处于英文输入状态 则直接输出字符并返回s o k 代码略 如果按下的是字母键 i f w par am a 如果候选词窗口还在显示 则将其隐藏 i f pcandi dat ew i ndow i sw ndv i sbl e pcandi dat ew i ndow show 刷新候选词窗口 以显示查找到的候选词 i nval i dat erect pcandi dat ew i ndow reh w nd nu ll fa lse hr s ok exi t ret urn hr 3 4 皮肤管理模块 皮肤的管理实际上就是对皮肤列表文件和正在使用的皮肤文件的管理 完成皮肤的导入 删除和修 改 本文重点关注藏文词组的输入 故该功能不再赘述 3 5 词库管理模块的实现 一个功能完善的词组输入法不仅要有软件设计者提供的词组 作为系统词库 还要有用户自定义的 词库 作为用户词库 对词库的管理 实际上就是对用户定义的词库进行管理 用户码表文件的格式与系 统码表文件的格式可以设为一致 对用户词库应该具有新增 删除和修改等额外功能 3 5 1 新增 在设置窗口消息处理回调函数 lresu lt callback cinst al l w i ndow w i ndow proc h w n d hwnd u int um sg w pa ra mwparam lpa raml param 中 能加入用户码表中编码 候选词映射对的代码 获取编辑框中的编码字符串和候选词字符串 定义存储用户码表信息m ul t i m ap的迭代器 st d m ul t i m ap i t erat or i t 查找m ul t i m ap中是否已经存在正要插入的这个编码 候选词映射对 i t userw ord fi nd st r 1 i nt num user w ord count st r1 i f i t userw ord end 没找到映射对 进行插入 userw ord i nsert st d m ake pai r st r1 st r2 高定国 郭鑫 tsf藏文输入法的设计与实现 78 78 78 78 el se for i nt i 1 i second st r2 找到匹配项 不进行处理 break el se i f i num 没找到匹配项 进行插入 userw ord i nsert st d m ake pai r st r1 st r2 break i t 3 5 2 删除 词库中编码 候选词映射对的删除 也是对内存中的m ul t i m ap容器进行操作 使用a pi 函数 sendm essage 获取编辑框中的编码字符串和候选词字符串 在m ui l t m ap中fi nd获取编码字符串 若存在 该词则使用erase函数删除 否则不进行任何操作 3 5 3 修改 对词库中编码 候选词映射对的修改 也是对内存中的m ul t i m ap容器进行操作 使用a pi 函数 sendm essage 获取编辑框中的编码字符串和候选词字符串 在m ui l t m ap中fi nd获取编码字符串 若存在 该词 则将其val ue 改为获取的候选词字符串 否则不进行任何操作 另外 对存储用户码表的内存区域操作完成后 必须更新外存中的用户码表文件 可以使用重写用户 码表文件来完成 3 6 软键盘窗口事件响应模块 软键盘窗口事件的响应 与设置窗口的事件响应处理一致 不同的是对于具体的消息两种窗口的处 理方式不同而已 在软键盘窗口回调函数的w m pa int消息响应中 使用tr ansparent bl t 函数绘制字符 按钮和特殊按钮 tab等 在软件盘窗口回调函数的w m pain t消息响应中 根据光标点击的位置 绘制按 钮被按下的图案 在w m lbutto nd o w n和w m lbu tto n up消息响应中 使用系统函数keybd event 模拟物理 键盘按键按下和弹起的状态 4 小结 由于tsf输入法程序最终生成的并不是exe可执行程序 而是一个供tsf m anager 调用的dl l 所以 对其调试的方法比较特殊 以在not epad下调试为例 首先打开工程 生成32位或64位的d ebug版本 然 后在cm d下使用regsvr 32命令注册dl l 再打开记事本 设置断点 调试 附加到进程 选择 not epad进程 附加 此时焦点会切换到打开的记事本 激活输入法 就可以进行调试了 经过测试 tsf藏文输入法的设计完成了一款具有词组输入 皮肤管理 词库管理和软键盘功能的 tsf输入法 如图6所示 高定国 郭鑫 tsf藏文输入法的设计与实现 79 79 79 图6 tsf藏文输入的测试 目前正在使用的藏文输入法虽多 但都存在一定的缺陷 如 班智达藏文输入法虽能输入部分词组但 也是基于im e的输入法 央金藏文输入法 阳光藏文输入法 微软操作系统自带的藏文输入法等除了都没 有词组输入功能外 还都是采用im e的输入法 汉字输入法方面据报道也只有微软中文输入法和极品五 笔2013以外都是基于im e的输入法 tsf输入法在很多方面比im e输入法更有优势 按照微软的说法 tsf会最终取代im e 13 本文设计实现了一个基于tsf的具有藏文词组输入功能的藏文输入法 克服了现 有藏文输入法的缺陷 也为藏文输入法的使用人员提供了一个使用方便 快捷的藏文输入软件 同时也为 开发tsf不同文种输入法提供了一个参考 参考文献 1 9 10 tsf text service framework 简介 eb ol 6137709 2011 01 14 2 dale rogerson inside com m seattle microsoft press 1994 3 stanleyb lippman josee lajoie barbara e moo c primer m 北京 人民邮电出版社 2006 4 高定国 珠杰 藏文信息处理的原理与应用 m 成都 西南交通大学出版社 2013 5 高定国 龚育昌 现代藏字全集的属性统计研究 j 中文信息学报 2005 1 71 75 6 刘政怡 李炜 吴建国 基于imm ime的汉字键盘输入法编程技术研究 j 计算机技术与发展 2006 12 43 48 7 朱巧明 李培峰 杨季文 基于windows 9x 2000 nt 平台汉字输入法的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市十一校2026届中考冲刺卷物理试题含解析
- 记账实操-简易征收退税分录 SOP
- 湖北省武汉二中学2026年中考猜题物理试卷含解析
- 2026年四川省南充市四校联考中考物理全真模拟试卷含解析
- 2026届亳州市重点中学中考四模物理试题含解析
- 危重患者深静脉血栓预防与护理
- 常德市武陵区2025-2026学年数学四年级第二学期期末统考模拟试题(含解析)
- 中专护理外科护理学课件
- 常州市戚墅堰区2025届数学三年级下学期期末达标检测模拟试题(含答案解析)
- 中风急救护理指南
- 大货车驾驶员培训
- 2023年陕西西安市轨道交通集团有限公司招聘笔试参考题库含答案解析
- 功能色母粒企业标准
- 高中记叙文写作指导名师优质课获奖市赛课一等奖课件
- 学院监察工作试点的实施方案
- 中学数学教学设计研究的开题报告
- 弯沉试验概述
- 大学四级英语试卷
- 幼儿园自主游戏中幼儿自主游戏的策略 论文
- 体育概论全部课件
- 中医与近视防控课件
评论
0/150
提交评论