薛京生 朱瑞華



摘要:本文通過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.