薛京生 朱瑞華
摘要:本文通過windows操作系統(tǒng)提供的IMM-IME輸入法開發(fā)框架,集成調(diào)用地址匹配服務(wù)和PGIS地圖服務(wù)接口,實現(xiàn)了基于漢字鍵盤輸入法的標準地址匹配引用與錄入。該輸入法程序解決了現(xiàn)有公安業(yè)務(wù)系統(tǒng)在無需改造的情況下即可嵌入地址匹配、檢索定位和標準地址引用功能,實現(xiàn)中文地址信息的規(guī)范登記和快捷錄入的問題。
關(guān)鍵詞:IMM-IME架構(gòu) 地址匹配服務(wù) 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 問題的提出
地址匹配也稱地理編碼,是指將地址映射成地理坐標的過程,是用戶輸入一個地址串,即可返回其空間坐標,從而可以將這個地址在地圖上進行定位。在使用地址匹配時,首先要建立一個標準地址庫作為基礎(chǔ),標準地址庫包括了街路巷、門牌樓址等大量地址信息,并按照相應(yīng)的標準規(guī)范進行了編碼整理。地址匹配可以利用該標準地址編碼數(shù)據(jù)庫來建立地址與地理坐標空間的對應(yīng)關(guān)系,將各種興趣點或文本地址與標準地址數(shù)據(jù)庫進行匹配[1]。地址匹配起到了現(xiàn)實帶地址的信息或其他MIS系統(tǒng)中帶文本地址的信息和地理信息系統(tǒng)中的空間位置關(guān)聯(lián)的橋梁作用,是快速實現(xiàn)大量業(yè)務(wù)數(shù)據(jù)向空間數(shù)據(jù)轉(zhuǎn)換的關(guān)鍵技術(shù)。作為警用地理信息平臺(PGIS)的一個核心服務(wù),地址匹配服務(wù)主要應(yīng)用于公安業(yè)務(wù)部門長期以來積累的警情、人口、重點單位等包含地址描述的業(yè)務(wù)信息在地圖上的空間定位,利用PGIS技術(shù)所特有的空間分析功能和強有力的可視化表現(xiàn)能力,實現(xiàn)警情分析、情報研判和領(lǐng)導(dǎo)決策支持等高級應(yīng)用,從而拓展了地理信息系統(tǒng)應(yīng)用范圍[2]。
目前隨著公安部門警用標準地址編碼數(shù)據(jù)庫的建設(shè),報警定位、地址搜索定位、標準地址引用、業(yè)務(wù)數(shù)據(jù)定位上圖、信息關(guān)聯(lián)等公安基礎(chǔ)業(yè)務(wù)流程,對標準地址和地址匹配提出了更多應(yīng)用需求。各業(yè)務(wù)警種利用地址匹配服務(wù)接口及二次開發(fā)API對現(xiàn)有業(yè)務(wù)系統(tǒng)進行升級改造,或新建業(yè)務(wù)系統(tǒng),來滿足公安民警日常工作中對地址信息不同層次的應(yīng)用需求。本文通過windows操作系統(tǒng)提供的IMM-IME輸入法開發(fā)框架,集成調(diào)用地址匹配服務(wù)接口,實現(xiàn)了基于漢字鍵盤輸入法的標準地址匹配引用與錄入,即地址拼音輸入法程序。該輸入法能夠在現(xiàn)有公安業(yè)務(wù)系統(tǒng)中無需系統(tǒng)改造,即可實現(xiàn)中文地址信息的檢索匹配、快捷錄入。
2 基于輸入法的標準地址引用匹配與錄入法的架構(gòu)
本文所提出的地址拼音輸入法程序的設(shè)計是利用windows系統(tǒng)所提供的輸入法管理器-輸入法編輯器(Input Method Manager-Input Method Editor,IMM-IME)的結(jié)構(gòu),在其框架內(nèi)使用輸入法程序編程接口(IME API),為各部分編寫程序代碼,從而實現(xiàn)地址輸入法(地址IME)的功能。
2.1 IMM-IME結(jié)構(gòu)概念
IMM-IME結(jié)構(gòu)是Windows內(nèi)部輸入法管理接口,是系統(tǒng)自己定義的一套框架程序。其中IMM是輸入法管理器,操作系統(tǒng)通過IMM管理當前系統(tǒng)活動的各個輸入法編輯器,維護輸入法編輯器和應(yīng)用程序之間的消息傳遞;IME即輸入法編輯器,是開發(fā)人員要實現(xiàn)的轉(zhuǎn)換引擎或輸入法程序。每一個運行的輸入法編輯器相當于混合語言鍵盤布局中的一種,將用戶輸入的編碼轉(zhuǎn)換成相應(yīng)的漢字字符。IME實現(xiàn)鍵盤編碼輸入到輸出漢字的轉(zhuǎn)換,提供用戶界面;應(yīng)用程序是輸入法編輯器的用戶,接收經(jīng)過轉(zhuǎn)換后的漢字字符消息。每一個可以接收用戶輸入的應(yīng)用程序的窗口都包含一個輸入法上下文(IMC,Input,Method Context)結(jié)構(gòu),其中記錄著與IME有關(guān)的數(shù)據(jù)信息,如轉(zhuǎn)換狀態(tài),候選列表等內(nèi)容。IMM通過此數(shù)據(jù)結(jié)構(gòu)保存和維護與IME有關(guān)的數(shù)據(jù),實現(xiàn)與IME和應(yīng)用程序之間的數(shù)據(jù)通信[3]。IME將轉(zhuǎn)換結(jié)果存儲在輸入上下文中,應(yīng)用程序再將其中內(nèi)容顯示在目標區(qū)域中。如圖1為IMM-IME結(jié)構(gòu)的組成。
IME由用戶界面和轉(zhuǎn)換接口兩部分組成。IME用戶界面是由用戶實現(xiàn)的一組窗口,由缺省的IME窗口、用戶界面窗口和用戶界面組件窗口組成;這些窗口將接收和處理由IMM發(fā)來的輸入消息,提供與用戶交互的界面。其中缺省的IME窗口是當應(yīng)用程序線程初始化的時候,操作系統(tǒng)會基于USER.EXE模塊中預(yù)定義的全局類IME類為其創(chuàng)建一個窗口,它管理輸入法編輯器的用戶界面和從IME,IMM及應(yīng)用程序發(fā)出的所有控制消息,并由此應(yīng)用程序的所有窗口所共享;用戶界面窗口是系統(tǒng)在缺省的IME窗口中接到WM-IME-SELECT消息時確定當前輸入法編輯器使用的用戶界面窗口類后所創(chuàng)建的窗口,其作用是接收由IMM和應(yīng)用程序發(fā)送來的消息,并根據(jù)消息進行相應(yīng)的處理;用戶界面組件窗口包括狀態(tài)窗口、編碼輸入窗口和漢字候選窗口。這些組件窗口的窗口過程中主要完成消息的處理、窗口的更新和數(shù)據(jù)顯示。狀態(tài)窗口用于顯示輸入法的狀態(tài),如中西文狀態(tài)、輸入法名稱、半角/全角等信息和對輸入法屬性進行設(shè)置。編碼輸入窗口用于顯示當前輸入的編碼、部分結(jié)果字符串等提示內(nèi)容。漢字候選窗口顯示當前輸入編碼轉(zhuǎn)換成的漢字重碼-全部漢字(串)候選列表,供用戶選擇。
IME轉(zhuǎn)換接口以函數(shù)集的形式出現(xiàn),由開發(fā)人員按照IME接口規(guī)范給出的具體接口和詳細功能實現(xiàn);這些函數(shù)一般由IMM調(diào)用,實現(xiàn)從用戶的輸入編碼到漢字字符的轉(zhuǎn)換等功能。
2.2 地址IME工作流程
由于輸入法是Windows操作系統(tǒng)的重要組成部分,與所有的窗口都密切相關(guān),屬于系統(tǒng)級的多語言支持組件,因此它的編程技術(shù)不同于一般的程序設(shè)計,受到不少限制。只能按照系統(tǒng)定義的IMM-IME結(jié)構(gòu)的規(guī)范,為用戶界面和轉(zhuǎn)換接口編寫代碼,從而完成地址IME的用戶界面的設(shè)計和輸入編碼到地址漢字字符的轉(zhuǎn)換工作。地址輸入法的工作原理是從鍵盤接收拼音按鍵并進行處理,通過集成調(diào)用支持拼音檢索的地址匹配服務(wù)接口,把輸入碼轉(zhuǎn)換為通過地址匹配返回的結(jié)果地址漢字字符串,從而完成在應(yīng)用程序窗口輸入地址的過程。
地址IME結(jié)構(gòu)和工作流程如圖2所示。用戶的鍵盤輸入被鍵盤驅(qū)動程序(KEYBORD.DRV)截獲,轉(zhuǎn)換為Windows內(nèi)部定義的鍵盤事件,并發(fā)送給USER.EXE模塊,USER.EXE模塊接著將接收到鍵盤事件轉(zhuǎn)換為IMM接口對應(yīng)的鍵盤消息,然后發(fā)送給WINNLS.DLL,其中的IMM模塊將這些鍵盤消息傳遞給與當前線程對應(yīng)的地址IME。地址IME的轉(zhuǎn)換接口獲得這個鍵盤消息,判別鍵盤消息的類型,或進行狀態(tài)處理,或根據(jù)此消息以及IMC環(huán)境中的數(shù)據(jù)信息進行用戶輸入地址的拼音編碼到地址的漢字碼的轉(zhuǎn)換,或提示重碼供選擇,或以字符消息的形式返回給WINNLS.DLL中的IMM模塊,IMM模塊將返回的結(jié)果作為WM_IME_CHAR消息的參數(shù)通過USER.EXE發(fā)送到應(yīng)用程序窗口的消息隊列中去,這樣就把結(jié)果返回給了應(yīng)用程序。
3 系統(tǒng)實現(xiàn)及應(yīng)用實例
3.1 地址IME轉(zhuǎn)換接口的實現(xiàn)
IME轉(zhuǎn)換接口相當于轉(zhuǎn)換引擎,這些接口函數(shù)供IMM在適當?shù)臅r候調(diào)用,從而完成輸入的轉(zhuǎn)換功能。這些函數(shù)的具體接口和詳細功能由輸入法編輯器開發(fā)接口規(guī)范給出,在微軟公司的輸入法開發(fā)規(guī)范中,共設(shè)計了19個接口函數(shù),但并不是所以接口函數(shù)都需要實現(xiàn),其中ImeToAsciiEx函數(shù)和ImeProcessKey函數(shù)一起構(gòu)成鍵盤輸入方式下輸入法編輯器轉(zhuǎn)換引擎的主體[4]。接口中主要函數(shù)的功能及其調(diào)用流程如圖3如示。
地址IME中ImeToAsciiEx函數(shù)的實現(xiàn),主要是根據(jù)輸入法上下文的內(nèi)容,即中文地址的漢語拼音全拼字符或首字母簡拼的字符串組合,當每次輸入單個字符而字符串組合有變化時,把新的字符串組合作為請求參數(shù),構(gòu)造調(diào)用地址匹配服務(wù)http接口的URL,然后通過CInternetSession建立http連接和發(fā)送http請求,實現(xiàn)地址匹配服務(wù)的調(diào)用,從而返回候選地址漢字字符串列表。
例如,用戶輸入地址全拼或首字母簡拼的組合字符sdsjmsd,組成請求地址匹配服務(wù)的URL:http://10.0.0.11:7001/PADD_S_Match/addressService?type=GetByPinYin&TypingI
nfo=sdsjmsd,然后用CInternetSession對此URL發(fā)起http請求。請求地址匹配與引用服務(wù)后返回結(jié)果(按相似度排序)如下:
{"success":true,"data":[{"id":"C004932EDF6540C6B1804
DA2112E8464",
"address":"天津市和平區(qū)鞍山道168號院13號樓",
"stdFormAddrElemString":"/天津市/和平區(qū)/鞍山道/168號院/13號樓",
"stdFormAddrElemTypeString":"/市/區(qū)/道/院/樓",
"x":120.30962,"y":36.41125,
"score":1.0},
{"id":"D001BE4434104580AAF06D025841F05E",
"address": "天津市和平區(qū)鞍山道168號院13號樓",
"stdFormAddrElemString":"/天津市/和平區(qū)/鞍山道/168號院/13號樓",
"stdFormAddrElemTypeString":"/市/區(qū)/道/院/樓",
"x":120.31211,"y":36.41068,
"score":1.0},
{"id":"BBA1CA62CC794B7D860F86F6BA3B46D3",
"address":天津市和平區(qū)鞍山道41號",
"stdFormAddrElemString":"/天津市/和平區(qū)/鞍山道/168號院/13號樓",
"stdFormAddrElemTypeString":"/市/區(qū)/道/院/樓",
"x":120.31083,"y":36.41138,
"score":1.0},
{"id":"AAC12572C0F8430F9D84F4BBDE5BE94E",
“address": "天津市和平區(qū)鞍山道168號院13號樓",
"stdFormAddrElemString":"/天津市/和平區(qū)/鞍山道/168號院/13號樓",
"stdFormAddrElemTypeString":"/市/區(qū)/道/院/樓",
"x":120.31254,"y":36.41221,
"score":1.0},
。。。}]}
地址輸入法從返回的結(jié)果數(shù)據(jù)中把主要的地址信息、地理坐標信息進行提取處理,形成輸入法候選窗口中的候選地址列表,提供給用戶選擇應(yīng)用。
3.2 支持全拼與首字母簡拼的地址匹配服務(wù)的實現(xiàn)
本文基于中文分詞和全文檢索技術(shù),采用開源lucene搜索引擎,開發(fā)了標準地址引用匹配服務(wù),接口采用http協(xié)議,接口形式如前所述。其中輸入?yún)?shù)TypingInfo即是用戶鍵盤輸入的內(nèi)容。服務(wù)首先對警用標準地址庫中的地址數(shù)據(jù)進行中文分詞,得到分詞的最小單位;然后通過pinyin4j開源類庫將分詞最小單位的漢字轉(zhuǎn)成分詞的全拼、分詞的首字母簡拼、正向組合的全拼、正向組合的首字母簡拼;之后將分詞最小單位及其全拼與首字母簡拼分別創(chuàng)建全文索引,以便于支持全拼以及首字母簡拼搜索。地址全拼與首字母簡拼分詞索引創(chuàng)建流程如圖4所示。
3.3 地址IME用戶界面的實現(xiàn)
用戶界面包括用戶界面窗口(窗口類和窗口過程)、用戶界面組件窗口(3個窗口類和窗口過程)、輸入法的配置窗口、任務(wù)條上的指示器窗口(圖標、菜單、工具提示)和輸入法熱鍵等。其中,在用戶界面窗口過程中主要是根據(jù)當前輸入上下文處理由缺省的IME窗口傳入的一些消息,完成對用戶界面組件窗口的創(chuàng)建和控制。
(1)WM_CREATE:UI窗口接收此消息后,將創(chuàng)建狀態(tài)窗口、編碼窗口和候選窗口。
(2)WM_IME_SETCONTEXT:UI窗口接收此消息后,表明應(yīng)用程序窗口中的IME被激活或隱藏。 如果輸入法被激活,調(diào)用函數(shù)MoveCandWindow()和MoveCompWindow()顯示和移動候選窗口和編碼窗口;如果輸入法被隱藏,調(diào)用函數(shù)HideCandWindow()和HideCompWindow()隱藏候選窗口和編碼窗口。
(3)WM_IME_STARTCOMPOSITON: UI窗口接收此消息后,表明用戶開始輸入編碼串,IME將打開編碼窗口,并準備顯示。
(4)WM_IME_COMPOSITON:UI窗口接收此消息后,表明用戶正在對編碼串編輯并使其狀態(tài)發(fā)生改變,它將調(diào)用IMM函數(shù)重新 獲得當前編碼串的狀態(tài),并更新編碼窗口。
(5)WM_IME_ENDCOMPOSITION:UI窗口接收此消息后,表明用戶結(jié)束編碼串的編輯,相應(yīng)的需要隱藏編碼窗口和候選窗口。
(6)WM_IME_SELECT:應(yīng)用程序窗口選定一個新的IME時發(fā)送該消息。它將創(chuàng)建當前IME的UI窗口,并傳遞與IME相關(guān)的消息。系統(tǒng)同時還會調(diào)用ImeSelect(在打開IME時先調(diào)用ImeSelect然后處理WM_IME_SELECT,關(guān)閉時與之相反),并將消息傳入缺省的IME 窗口,由此窗口過程來處理。
(7)WM_IME_NOTIFY:UI窗口可以根據(jù)該消息中的子消息獲得IME的狀態(tài)(例如UI組件窗口的最新狀態(tài))。根據(jù)這些狀態(tài)參數(shù)值,調(diào)用相關(guān)的函數(shù)對IME進行更新。系統(tǒng)同時還會調(diào)用NotifyIME。
(8)WM_DESTROY:UI窗口接收此消息后,將銷毀狀態(tài)窗口、編碼窗口和候選窗口。
地址輸入法實現(xiàn)了用戶可以用鍵盤的PageUp鍵向上翻、PageDown鍵向下翻進行地址的選擇,也可以用鼠標在地址列表中進行地址選擇、支持Enter回車鍵和鼠標的左鍵點擊選擇。
3.4 錄入中文地址的PGIS地圖定位展示
用戶從地址輸入法候選窗口中由地址匹配服務(wù)所返回的候選地址列表里選擇目標地址漢字字符串后,通過輸入法上下文,再由業(yè)務(wù)應(yīng)用程序在目標區(qū)域顯示漢字。同時為實現(xiàn)所錄入的地址的地圖可視化定位效果,地址輸入法需要利用Windows操作系統(tǒng)提供的WinAPI ShellExecute函數(shù),該函數(shù)可運行一個外部程序或打開一個文件。通過該函數(shù)可用來打開默認瀏覽器并鏈接到指定的URL地址的特性,將URL地址設(shè)為PGIS地圖定位展示頁面服務(wù)的http請求URL,瀏覽器作為PGIS地圖的客戶端瀏覽程序,就可以實現(xiàn)錄入的中文地址基于PGIS地圖的定位展示效果。這里的PGIS地圖定位展示頁面服務(wù)是基于PGIS地圖API(Javascript)二次開發(fā)實現(xiàn)的http協(xié)議請求頁面,接口形式如下:
http://10.0.0.11:7003/PGIS_MapLocate/index?keyword=天津市河?xùn)|區(qū)衛(wèi)國道臨池里20號樓 &X=117.2547569274902&Y=
39.1385307312012。
輸入?yún)?shù)為地址的關(guān)鍵字keyword和其坐標x,y,返回結(jié)果如圖5所示。
4 結(jié)語
本文通過引入IMM-IME輸入法框架,對目前公安行業(yè)警用標準地址數(shù)據(jù)和地址匹配服務(wù)的應(yīng)用模式進行了擴展,形成了一種新的應(yīng)用思路。通過IME API,集成并設(shè)計開發(fā)了支持地址全拼和首字母簡拼的地址匹配服務(wù)http接口,以及PGIS地圖定位展示頁面服務(wù)接口,從而實現(xiàn)了基于漢語拼音鍵盤輸入法的地址匹配引用與錄入系統(tǒng)。同時該系統(tǒng)既有一般中文輸入法錄入速度快、分詞效果、簡單易用的特點,又很好解決了在現(xiàn)有公安各業(yè)務(wù)系統(tǒng)中無需系統(tǒng)改造的情況下即可實現(xiàn)標準地址匹配引用、快速錄入和地圖定位的問題,取得了比較好的應(yīng)用效果。
參考文獻
[1]劉廣濤,向煜.基于中文分詞的地址匹配技術(shù)在警用地理信息系統(tǒng)中的應(yīng)用[J].科技創(chuàng)新導(dǎo)報2013,NO.02.:56-58.
[2]林天淼.地理信息系統(tǒng)中地址匹配服務(wù)設(shè)計與實現(xiàn).哈爾濱工業(yè)大學(xué)碩士論文.2007.10:3.
[3]胡宇曉,馬少平,夏瑩.基于IMM-IME輸入法接口的實現(xiàn)方法[J].計算機工程與應(yīng)用,2002(1):117-124.
[4]劉政怡,李煒,吳建國.基于IMM-IME的漢字鍵盤輸入法編程技術(shù)研究[J].計算機技術(shù)與發(fā)展,2006,16(12):43-48.