即指即译翻译器的设计与实现论文

作者:网友分享原创网站原创 点赞:16172 浏览:70328 最后更新时间:2024-01-18
【摘 要】社会的发展,全球一体化加速,掌握一门外语显得尤为,在学习外语过程中,电子词典的使用为用户提供了更高效的查询方式,基于以上的理由开发了这款即指即译翻译器。本系统是基于电脑桌面程序的翻译器,它主要功能是:屏幕取词、单词查询和词库管理。论文先对本课题涉及的关键技术进行逐个的解释与介绍,然后对整个系统做了功能与运转环境的需求说明,接着进行系统的设计,包括界面设计和数据库设计,最后对系统的实现做了更具体的阐述。本系统实现了用户从屏幕中随机截取字符串,构成单词在数据词库中进行查询并界面显示给用户,同时系统还提供词库管理功能,可对词库进行添加、修改、删除单词等操作。本文把理论与实践交替结合起来从技术介绍到系统实现的每一都认真完成,努力做到最好的论文描述与系统呈现。
  【关键词】即指即译 屏幕取词 搜索
  

一、引言

  信息化的到来,越来越多的人开始学习英语,为了方便用户随时学习英语,,提高学习效率,简化操作方式,一个即指即译的翻译器,以实现英文的即时汉化。因此,设计一个英语翻译器,方便用户学习英语,提高了学习的效率,改善用户学习体验[1]。
  

二、课题关键技术

  屏幕取词,也叫做鼠标取词、鼠标抓词,顾名思义就是把屏幕上显示出来的字符取到(在某些情况下也能取到屏幕上看不到的字符)。屏幕取词广泛的应用在电子字典上,也可以用在其它方面[1]。
  按照取词范围来分,一般可以分为点、线、面取词三种。
  点取词,就是取屏幕上某一点处的字符。这个点可以用鼠标来确定,也可以给定一个坐标。
  线取词,就是取屏幕上某一行的字符。
  面取词,就是取一个区域范围中的字符。
  目前有两种实现方式:
  第一种:截获对gdi的api调用来实现,如textout,textouta等。
  第二种:对每个设备上下文(dc)做一分copy,并跟踪修改上下文(dc)的操作。
  

三、需求分析

  即指即译翻译器,作为一个工具类软件,其最主要的需求便是实现即指即译的功能。
  对用户需求定位,可以本系统包含以下具体功能模块:单词查询模块、屏幕取词模块、词库管理模块。
  各模块主要功能分析如下:
  

(一)单词查询模块:

  单词查询模块是整个系统最的功能模块之一,主要实现英汉单词之间的互译,用户可以根据自己的查询单词的含义,从数据库中单词的基本信息[2]。
  

(二)屏幕取词模块:

  屏幕取词模块是本系统同的精髓,一切的功能围绕其展开的,主要实现从屏幕上获取文字信息,匹配单词,将结果传递给查询模块。屏幕取词的性能要求主要为:稳定、准确、。
  

四、系统设计

  

(一)系统设计

  整个系统为用户提供最简便的操作方式,以满足用户需求。具体操作流程为:用户打开软件,启动屏幕取词功能,用鼠标选择在屏幕上的字符,系统自动获取相关字符,并在词库中进行匹配查询,然后将查询结果展示给用户。
  

(二)系统详细设计

  本系统分为三个子模块,屏幕取词模块主要功能是将从屏幕上获取的词汇信息传递给单词查询模块,单词查询模块的主要功能是负责将词汇进行匹配查询。
  屏幕取词模块详细设计
  屏幕取词模块为用户从计算机显示屏幕上扫面并获取字符串信息,并将字符串传递至查询模块,完成屏幕取词的活动。
  屏幕取词具体流程为:
  鼠标指向所查询单词的位置,系统开始从鼠标位置所在点,对字符串进行扫描,直到遇上第一个空格位置。再对系统所扫描过的矩形区域内的字符串长度进行计算,然后对比坐标,判定鼠标是否在此区域内,如果判定结果为Y,则存储字符串,并将鼠标信息发送给取词函数,取词活动结束;如果判定结果为N,则找到下一个空格所在位置,并计算出该空格与前一个空格之间的矩形区域内的字符串大小,然后再次对鼠标是否处在此区域内进行第二次判定,如果判定结果为Y,存储字符串,并将鼠标信息发送给取词函数,取词活动结束;判定结果为N,则返回GetCursorPos函数,对字符串重新进行扫面,直到成功进行取词活动为止。
  

(三)屏幕取词技术解决方案的设计

  实现屏幕取词做两件事情:第一件事情是截获系统对ExtTextOutW 等API 函数的调用;第二件事情就是分析所截获函数的入口参数,所要取的词[3]。
  截获系统对API 函数的调用有两种策略,直接改写API 在内存中的映像,嵌入汇编代码,使之被调用时跳转到指定的地址运转来截获;改写IAT(import address table输入地址表),重定向API函数的调用来实现对API 的截获。
  这里主要采取第一种策略。
  

1.截获系统API原理分析设计

  设计一个动态链接库,在DLL 的入出口函数(DLLMain)中对ExtTextOutW 等函数进行拦截和恢复。dwReason 等于DLL_PROCESS_ATTACH(DLL 被映像到进程的地址空间)时拦截API 调用;dwReason 等于DLL_PROCESS_DETACH(DLL从进程的地址空间中解除映像)时恢复API 调用。DLL 中的导出函数有若干个,其中主要有设置挂钩、返回所取的字等函数。设置挂钩函数调用SetWindowsHookEx 安装一个系统鼠标挂钩。
  

2.API 的入口参数设计

  ExtTextOutW的入口参数hdc,x,y ,IpString,cbString ,根据这些具体参数的含义进行相关的分布和利用,提取信息,如果设备上下文(hdc)不在任何窗口,很可能在内存兼容对象中。这时就不能准确计算出鼠标出的汉字,以为当系统调ExtTextOutW等函数时还没有确定输出的位置。简单的把内存兼容对象区域的右上角作为视口原点,可以解决绝大理由。对于在网页中取词,根据IE的版本和操作系统的版本做特别的处理。这些特别处理也和内存兼容位图有关。
  

五、总结

  本文所阐述的系统主要是广大用户在日常生活中翻译词汇的一个便捷功能的实现。从需求分析、开发工具和开发平台的选择、系统功能设计、系统详细功能设计、数据库设计、界面设计、代码实现,始终依据软件工程的基本思想及管理信息系统的开发流程,实现了预期的开发目标,满足了用户需求,基本上实现了本次论文的设计目的。但是有一些可以改善的地方,比如操作界面的友好度,如果加上在所选择的地方显示出来所查词汇的释义,用户体验将会更加完美。
  参考文献:
  [1]侯俊杰.深入浅出MFC(第二版)[M]. 华中科技大学出版社, 2001
  [2]孙鑫.vc++深入详解 [M]. 电子工业出版,2006
  [3]王歆、张林山.Windows 环境下的屏幕取词技术[J].计算机系统应用,2000,(4):6
  [4]顾平、刁红军.屏幕取词原理与实现[J].计算机工程与应用,2004,(28):10
  [5]张磊(1982-),男,河南南阳人,南阳理工学院软件学院教师