薛京生 朱瑞华
摘要:本文通过windows操作系统提供的IMM-IME输入法开发框架,集成调用地址匹配服务和PGIS地图服务接口,实现了基于汉字键盘输入法的标准地址匹配引用与录入。该输入法程序解决了现有公安业务系统在无需改造的情况下即可嵌入地址匹配、检索定位和标准地址引用功能,实现中文地址信息的规范登记和快捷录入的问题。
关键词:IMM-IME架构 地址匹配服务 PGIS 地址输入法
中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2016)07-0131-04
Abstract:In this paper, through the Windows operating system to provide the IMM - IME input method framework, integrated call address matching service and PGIS map service interface, based on Chinese character keyboard input method is the standard address matching reference and input. The input method program to solve the existing public security business system in the case of without modification can be embedded into the address matching, retrieval, positioning and standard reference function, realize the Chinese address the problem of the specification of the registration and quick entry.
Key Words:IMM - IME architecture;address matching service;PGIS;address input method
1 问题的提出
地址匹配也称地理编码,是指将地址映射成地理坐标的过程,是用户输入一个地址串,即可返回其空间坐标,从而可以将这个地址在地图上进行定位。在使用地址匹配时,首先要建立一个标准地址库作为基础,标准地址库包括了街路巷、门牌楼址等大量地址信息,并按照相应的标准规范进行了编码整理。地址匹配可以利用该标准地址编码数据库来建立地址与地理坐标空间的对应关系,将各种兴趣点或文本地址与标准地址数据库进行匹配[1]。地址匹配起到了现实带地址的信息或其他MIS系统中带文本地址的信息和地理信息系统中的空间位置关联的桥梁作用,是快速实现大量业务数据向空间数据转换的关键技术。作为警用地理信息平台(PGIS)的一个核心服务,地址匹配服务主要应用于公安业务部门长期以来积累的警情、人口、重点单位等包含地址描述的业务信息在地图上的空间定位,利用PGIS技术所特有的空间分析功能和强有力的可视化表现能力,实现警情分析、情报研判和领导决策支持等高级应用,从而拓展了地理信息系统应用范围[2]。
目前随着公安部门警用标准地址编码数据库的建设,报警定位、地址搜索定位、标准地址引用、业务数据定位上图、信息关联等公安基础业务流程,对标准地址和地址匹配提出了更多应用需求。各业务警种利用地址匹配服务接口及二次开发API对现有业务系统进行升级改造,或新建业务系统,来满足公安民警日常工作中对地址信息不同层次的应用需求。本文通过windows操作系统提供的IMM-IME输入法开发框架,集成调用地址匹配服务接口,实现了基于汉字键盘输入法的标准地址匹配引用与录入,即地址拼音输入法程序。该输入法能够在现有公安业务系统中无需系统改造,即可实现中文地址信息的检索匹配、快捷录入。
2 基于输入法的标准地址引用匹配与录入法的架构
本文所提出的地址拼音输入法程序的设计是利用windows系统所提供的输入法管理器-输入法编辑器(Input Method Manager-Input Method Editor,IMM-IME)的结构,在其框架内使用输入法程序编程接口(IME API),为各部分编写程序代码,从而实现地址输入法(地址IME)的功能。
2.1 IMM-IME结构概念
IMM-IME结构是Windows内部输入法管理接口,是系统自己定义的一套框架程序。其中IMM是输入法管理器,操作系统通过IMM管理当前系统活动的各个输入法编辑器,维护输入法编辑器和应用程序之间的消息传递;IME即输入法编辑器,是开发人员要实现的转换引擎或输入法程序。每一个运行的输入法编辑器相当于混合语言键盘布局中的一种,将用户输入的编码转换成相应的汉字字符。IME实现键盘编码输入到输出汉字的转换,提供用户界面;应用程序是输入法编辑器的用户,接收经过转换后的汉字字符消息。每一个可以接收用户输入的应用程序的窗口都包含一个输入法上下文(IMC,Input,Method Context)结构,其中记录着与IME有关的数据信息,如转换状态,候选列表等内容。IMM通过此数据结构保存和维护与IME有关的数据,实现与IME和应用程序之间的数据通信[3]。IME将转换结果存储在输入上下文中,应用程序再将其中内容显示在目标区域中。如图1为IMM-IME结构的组成。
IME由用户界面和转换接口两部分组成。IME用户界面是由用户实现的一组窗口,由缺省的IME窗口、用户界面窗口和用户界面组件窗口组成;这些窗口将接收和处理由IMM发来的输入消息,提供与用户交互的界面。其中缺省的IME窗口是当应用程序线程初始化的时候,操作系统会基于USER.EXE模块中预定义的全局类IME类为其创建一个窗口,它管理输入法编辑器的用户界面和从IME,IMM及应用程序发出的所有控制消息,并由此应用程序的所有窗口所共享;用户界面窗口是系统在缺省的IME窗口中接到WM-IME-SELECT消息时确定当前输入法编辑器使用的用户界面窗口类后所创建的窗口,其作用是接收由IMM和应用程序发送来的消息,并根据消息进行相应的处理;用户界面组件窗口包括状态窗口、编码输入窗口和汉字候选窗口。这些组件窗口的窗口过程中主要完成消息的处理、窗口的更新和数据显示。状态窗口用于显示输入法的状态,如中西文状态、输入法名称、半角/全角等信息和对输入法属性进行设置。编码输入窗口用于显示当前输入的编码、部分结果字符串等提示内容。汉字候选窗口显示当前输入编码转换成的汉字重码-全部汉字(串)候选列表,供用户选择。
IME转换接口以函数集的形式出现,由开发人员按照IME接口规范给出的具体接口和详细功能实现;这些函数一般由IMM调用,实现从用户的输入编码到汉字字符的转换等功能。
2.2 地址IME工作流程
由于输入法是Windows操作系统的重要组成部分,与所有的窗口都密切相关,属于系统级的多语言支持组件,因此它的编程技术不同于一般的程序设计,受到不少限制。只能按照系统定义的IMM-IME结构的规范,为用户界面和转换接口编写代码,从而完成地址IME的用户界面的设计和输入编码到地址汉字字符的转换工作。地址输入法的工作原理是从键盘接收拼音按键并进行处理,通过集成调用支持拼音检索的地址匹配服务接口,把输入码转换为通过地址匹配返回的结果地址汉字字符串,从而完成在应用程序窗口输入地址的过程。
地址IME结构和工作流程如图2所示。用户的键盘输入被键盘驱动程序(KEYBORD.DRV)截获,转换为Windows内部定义的键盘事件,并发送给USER.EXE模块,USER.EXE模块接着将接收到键盘事件转换为IMM接口对应的键盘消息,然后发送给WINNLS.DLL,其中的IMM模块将这些键盘消息传递给与当前线程对应的地址IME。地址IME的转换接口获得这个键盘消息,判别键盘消息的类型,或进行状态处理,或根据此消息以及IMC环境中的数据信息进行用户输入地址的拼音编码到地址的汉字码的转换,或提示重码供选择,或以字符消息的形式返回给WINNLS.DLL中的IMM模块,IMM模块将返回的结果作为WM_IME_CHAR消息的参数通过USER.EXE发送到应用程序窗口的消息队列中去,这样就把结果返回给了应用程序。
3 系统实现及应用实例
3.1 地址IME转换接口的实现
IME转换接口相当于转换引擎,这些接口函数供IMM在适当的时候调用,从而完成输入的转换功能。这些函数的具体接口和详细功能由输入法编辑器开发接口规范给出,在微软公司的输入法开发规范中,共设计了19个接口函数,但并不是所以接口函数都需要实现,其中ImeToAsciiEx函数和ImeProcessKey函数一起构成键盘输入方式下输入法编辑器转换引擎的主体[4]。接口中主要函数的功能及其调用流程如图3如示。
地址IME中ImeToAsciiEx函数的实现,主要是根据输入法上下文的内容,即中文地址的汉语拼音全拼字符或首字母简拼的字符串组合,当每次输入单个字符而字符串组合有变化时,把新的字符串组合作为请求参数,构造调用地址匹配服务http接口的URL,然后通过CInternetSession建立http连接和发送http请求,实现地址匹配服务的调用,从而返回候选地址汉字字符串列表。
例如,用户输入地址全拼或首字母简拼的组合字符sdsjmsd,组成请求地址匹配服务的URL:http://10.0.0.11:7001/PADD_S_Match/addressService?type=GetByPinYin&TypingI
nfo=sdsjmsd,然后用CInternetSession对此URL发起http请求。请求地址匹配与引用服务后返回结果(按相似度排序)如下:
{"success":true,"data":[{"id":"C004932EDF6540C6B1804
DA2112E8464",
"address":"天津市和平区鞍山道168号院13号楼",
"stdFormAddrElemString":"/天津市/和平区/鞍山道/168号院/13号楼",
"stdFormAddrElemTypeString":"/市/区/道/院/楼",
"x":120.30962,"y":36.41125,
"score":1.0},
{"id":"D001BE4434104580AAF06D025841F05E",
"address": "天津市和平区鞍山道168号院13号楼",
"stdFormAddrElemString":"/天津市/和平区/鞍山道/168号院/13号楼",
"stdFormAddrElemTypeString":"/市/区/道/院/楼",
"x":120.31211,"y":36.41068,
"score":1.0},
{"id":"BBA1CA62CC794B7D860F86F6BA3B46D3",
"address":天津市和平区鞍山道41号",
"stdFormAddrElemString":"/天津市/和平区/鞍山道/168号院/13号楼",
"stdFormAddrElemTypeString":"/市/区/道/院/楼",
"x":120.31083,"y":36.41138,
"score":1.0},
{"id":"AAC12572C0F8430F9D84F4BBDE5BE94E",
“address": "天津市和平区鞍山道168号院13号楼",
"stdFormAddrElemString":"/天津市/和平区/鞍山道/168号院/13号楼",
"stdFormAddrElemTypeString":"/市/区/道/院/楼",
"x":120.31254,"y":36.41221,
"score":1.0},
。。。}]}
地址输入法从返回的结果数据中把主要的地址信息、地理坐标信息进行提取处理,形成输入法候选窗口中的候选地址列表,提供给用户选择应用。
3.2 支持全拼与首字母简拼的地址匹配服务的实现
本文基于中文分词和全文检索技术,采用开源lucene搜索引擎,开发了标准地址引用匹配服务,接口采用http协议,接口形式如前所述。其中输入参数TypingInfo即是用户键盘输入的内容。服务首先对警用标准地址库中的地址数据进行中文分词,得到分词的最小单位;然后通过pinyin4j开源类库将分词最小单位的汉字转成分词的全拼、分词的首字母简拼、正向组合的全拼、正向组合的首字母简拼;之后将分词最小单位及其全拼与首字母简拼分别创建全文索引,以便于支持全拼以及首字母简拼搜索。地址全拼与首字母简拼分词索引创建流程如图4所示。
3.3 地址IME用户界面的实现
用户界面包括用户界面窗口(窗口类和窗口过程)、用户界面组件窗口(3个窗口类和窗口过程)、输入法的配置窗口、任务条上的指示器窗口(图标、菜单、工具提示)和输入法热键等。其中,在用户界面窗口过程中主要是根据当前输入上下文处理由缺省的IME窗口传入的一些消息,完成对用户界面组件窗口的创建和控制。
(1)WM_CREATE:UI窗口接收此消息后,将创建状态窗口、编码窗口和候选窗口。
(2)WM_IME_SETCONTEXT:UI窗口接收此消息后,表明应用程序窗口中的IME被激活或隐藏。 如果输入法被激活,调用函数MoveCandWindow()和MoveCompWindow()显示和移动候选窗口和编码窗口;如果输入法被隐藏,调用函数HideCandWindow()和HideCompWindow()隐藏候选窗口和编码窗口。
(3)WM_IME_STARTCOMPOSITON: UI窗口接收此消息后,表明用户开始输入编码串,IME将打开编码窗口,并准备显示。
(4)WM_IME_COMPOSITON:UI窗口接收此消息后,表明用户正在对编码串编辑并使其状态发生改变,它将调用IMM函数重新 获得当前编码串的状态,并更新编码窗口。
(5)WM_IME_ENDCOMPOSITION:UI窗口接收此消息后,表明用户结束编码串的编辑,相应的需要隐藏编码窗口和候选窗口。
(6)WM_IME_SELECT:应用程序窗口选定一个新的IME时发送该消息。它将创建当前IME的UI窗口,并传递与IME相关的消息。系统同时还会调用ImeSelect(在打开IME时先调用ImeSelect然后处理WM_IME_SELECT,关闭时与之相反),并将消息传入缺省的IME 窗口,由此窗口过程来处理。
(7)WM_IME_NOTIFY:UI窗口可以根据该消息中的子消息获得IME的状态(例如UI组件窗口的最新状态)。根据这些状态参数值,调用相关的函数对IME进行更新。系统同时还会调用NotifyIME。
(8)WM_DESTROY:UI窗口接收此消息后,将销毁状态窗口、编码窗口和候选窗口。
地址输入法实现了用户可以用键盘的PageUp键向上翻、PageDown键向下翻进行地址的选择,也可以用鼠标在地址列表中进行地址选择、支持Enter回车键和鼠标的左键点击选择。
3.4 录入中文地址的PGIS地图定位展示
用户从地址输入法候选窗口中由地址匹配服务所返回的候选地址列表里选择目标地址汉字字符串后,通过输入法上下文,再由业务应用程序在目标区域显示汉字。同时为实现所录入的地址的地图可视化定位效果,地址输入法需要利用Windows操作系统提供的WinAPI ShellExecute函数,该函数可运行一个外部程序或打开一个文件。通过该函数可用来打开默认浏览器并链接到指定的URL地址的特性,将URL地址设为PGIS地图定位展示页面服务的http请求URL,浏览器作为PGIS地图的客户端浏览程序,就可以实现录入的中文地址基于PGIS地图的定位展示效果。这里的PGIS地图定位展示页面服务是基于PGIS地图API(Javascript)二次开发实现的http协议请求页面,接口形式如下:
http://10.0.0.11:7003/PGIS_MapLocate/index?keyword=天津市河东区卫国道临池里20号楼 &X=117.2547569274902&Y=
39.1385307312012。
输入参数为地址的关键字keyword和其坐标x,y,返回结果如图5所示。
4 结语
本文通过引入IMM-IME输入法框架,对目前公安行业警用标准地址数据和地址匹配服务的应用模式进行了扩展,形成了一种新的应用思路。通过IME API,集成并设计开发了支持地址全拼和首字母简拼的地址匹配服务http接口,以及PGIS地图定位展示页面服务接口,从而实现了基于汉语拼音键盘输入法的地址匹配引用与录入系统。同时该系统既有一般中文输入法录入速度快、分词效果、简单易用的特点,又很好解决了在现有公安各业务系统中无需系统改造的情况下即可实现标准地址匹配引用、快速录入和地图定位的问题,取得了比较好的应用效果。
参考文献
[1]刘广涛,向煜.基于中文分词的地址匹配技术在警用地理信息系统中的应用[J].科技创新导报2013,NO.02.:56-58.
[2]林天淼.地理信息系统中地址匹配服务设计与实现.哈尔滨工业大学硕士论文.2007.10:3.
[3]胡宇晓,马少平,夏莹.基于IMM-IME输入法接口的实现方法[J].计算机工程与应用,2002(1):117-124.
[4]刘政怡,李炜,吴建国.基于IMM-IME的汉字键盘输入法编程技术研究[J].计算机技术与发展,2006,16(12):43-48.