柴潔
(重慶市勘測院航測遙感所,重慶 400020)
基于IKAnalyzer和Lucene的地理編碼中文搜索引擎的研究與實現(xiàn)
柴潔?
(重慶市勘測院航測遙感所,重慶 400020)
為實現(xiàn)帶有地址信息的屬性數(shù)據(jù)的空間化,依據(jù)數(shù)據(jù)采集相關(guān)規(guī)范和標準,通過建立地址模型中地理實體的一一對應(yīng)關(guān)系組建空間參照數(shù)據(jù)庫,地理編碼索引建立以及搜索都基于多元分詞算法,因此研究采用IKAnalyzer中文分詞術(shù)實現(xiàn)詞庫的建立,基于Lucene開源框架開發(fā)出一套地理編碼系統(tǒng),進而實現(xiàn)了地理編碼標準地址入庫、地址匹配搜索引擎正向、逆向、分級搜索、模糊查詢。
地理編碼;IKAnalyzer;Lucene;分級搜索;模糊查詢
目前,各行業(yè)領(lǐng)域的大部分業(yè)務(wù)信息都與地理空間位置有著密切聯(lián)系,而對這些數(shù)據(jù)的空間位置特征描述都是以中文語言文字的屬性記錄形式存在,未包含能夠確定其具體空間位置的坐標信息。在地理信息系統(tǒng)的展示及應(yīng)用過程中,系統(tǒng)無法直接通過這些文字描述將其定位到實際的空間位置。因此,迫切需要通過某種手段,實現(xiàn)對帶有地址信息的屬性數(shù)據(jù)空間化[1~3]。
互聯(lián)網(wǎng)已經(jīng)逐漸成為人們生活不可或缺的一部分,每天產(chǎn)生海量的信息中隱含著難以估量的地理信息,如何才能將其挖掘出來,值得我們思考與實踐。要整合大量歷史不規(guī)范的地名地址數(shù)據(jù),不僅是技術(shù)層面的問題,還有部門之間的溝通協(xié)調(diào)、共享機制的問題。因此為有效利用地址編碼數(shù)據(jù)[4~6],應(yīng)建立有效的、良性循環(huán)的地址編碼數(shù)據(jù)更新機制,建立地址編碼數(shù)據(jù)共享交換機制,保障數(shù)據(jù)的應(yīng)用、更新與數(shù)據(jù)現(xiàn)勢性。
地理編碼是基于位置的應(yīng)用服務(wù)系統(tǒng)的核心技術(shù)之一,負責將大量的地址信息通過地址匹配服務(wù)與空間地理信息相關(guān)聯(lián)。通過建立相應(yīng)的地址編碼,實現(xiàn)對地址匹配[7~8],使得這些信息快速、準確的轉(zhuǎn)換為空間地理數(shù)據(jù),從而實現(xiàn)空間與非空間信息的資源整合。地理編碼技術(shù)是實現(xiàn)大量管理信息(MIS數(shù)據(jù))基于地理信息系統(tǒng)(GIS)空間定位和可視化分析應(yīng)用的橋梁[9-11]。
本文采用了IKAnalyzer中文分詞技術(shù)和Lucene開源框架開發(fā)一套地理編碼系統(tǒng),實現(xiàn)了地理編碼標準地址入庫、地址匹配搜索引擎正向、逆向、分級搜索、模糊查詢等功能。
2.1 可伸縮地址模型
國家標準《數(shù)字城市地理信息公共平臺地名/地址編碼規(guī)則》(GB/T23705-2009)中規(guī)定了不同粒度范圍地名/地址的描述規(guī)則,可以看做是一種在層次上可伸縮的地名/地址模型,如表1所示。
可伸縮地址模型中地址要素采用的地址級別 表1
可伸縮地址模型規(guī)則:
(1)存在門(樓)牌號時,使用“道路名(小區(qū)名)+門(樓)牌號”表述地址;
(2)存在標志物時,使用“行政區(qū)劃+標志物名”表述地址;
(3)第二種表述的標志物多于一個時,對行政區(qū)劃的粒度進行延伸,直至唯一確定此地址。
2.2 空間參照數(shù)據(jù)庫
空間參照數(shù)據(jù)庫是數(shù)據(jù)采集的規(guī)范和標準,也是地理編碼技術(shù)的核心基礎(chǔ)。空間參照數(shù)據(jù)庫組成地址模型中所包含的地理實體種類一一對應(yīng);按庫表結(jié)構(gòu)依次錄入(批量導入)全市所有區(qū)縣、街道、道路、小區(qū)、標志物、門(樓)牌的名稱(簡稱、別名)和地理坐標即可構(gòu)建一個城市的空間參照數(shù)據(jù)庫。地理編碼標準空間參照數(shù)據(jù)表結(jié)構(gòu)如表2所示。
地理編碼標準空間參照數(shù)據(jù)表 表2
IKAnalyzer是一個開源的、基于Java語言開發(fā)的中文分詞工具包,分詞器結(jié)構(gòu)如圖1所示:
圖1 IKAnalyzer分詞器結(jié)構(gòu)圖
本設(shè)計分詞算法流程建立如圖2所示:
地理編碼索引建立以及搜索都基于多元分詞算法,分詞效果的好壞取決于分詞字典的完備性。針對分詞字典需要具備以下特性:
(1)選取通用漢語詞條作為系統(tǒng)分詞詞典,盡可能多的容納日常用詞;
(2)增加停詞詞典,過濾敏感詞匯,用戶可以根據(jù)需要過濾掉包含特定詞匯的記錄,避免被搜索引擎搜索到;
(3)用戶自定義詞典,可提供增、刪、改功能,用戶根據(jù)實際需要修改自定義詞典。
圖2 分詞算法流程圖
采用IKAnalyzer分詞詞典作為系統(tǒng)詞典,包含數(shù)十萬日常用詞,能夠滿足用戶常用的分詞搜索。分詞示例:
北京市東城區(qū)建國門街道蘇州社區(qū)北京站前街1號北京市郵政公司==
北京市北京東城區(qū)東城城區(qū)建國門建國國門街道蘇州社區(qū)北京站北京站前街1號北京市北京郵政公司
Lucene是一個開放源代碼的全文檢索引擎工具包,Lucene版本:3.0.2,全文檢索分兩個部分:索引創(chuàng)建(Indexing)和搜索索引(Search)。
索引過程包括:①有一系列被索引文件(此處所指即數(shù)據(jù)庫數(shù)據(jù));②被索引文件經(jīng)過語法分析和語言處理形成一系列詞(Term);③經(jīng)過索引創(chuàng)建形成詞典和反向索引表;④通過索引存儲將索引寫入硬盤。
搜索過程包括:①用戶輸入查詢語句;②對查詢語句經(jīng)過語法分析和語言分析得到一系列詞(Term);③通過語法分析得到一個查詢樹;④通過索引存儲將索引讀入到內(nèi)存;⑤利用查詢樹搜索索引,從而得到每個詞(Term)的文檔鏈表,對文檔鏈表進行交差,并得到結(jié)果文檔;⑥將搜索到的結(jié)果文檔對查詢的相關(guān)性進行排序;⑦返回查詢結(jié)果給用戶。
本設(shè)計索引和搜索的流程圖如圖3所示:
圖3 索引和搜索的流程圖
4.1 索引創(chuàng)建(Indexing)
索引過程創(chuàng)建如下:
(1)創(chuàng)建一個IndexWriter用來寫索引文件,它有幾個參數(shù),INDEX_DIR就是索引文件所存放的位置, Analyzer便是用來對文檔進行詞法分析和語言處理的。
(2)創(chuàng)建一個Document代表要索引的文檔。
(3)將不同的Field加入到文檔中。不同類型的信息用不同的Field來表示,在本研究中,一共有兩類信息進行了索引,一個是文件路徑,一個是文件內(nèi)容。其中FileReader的SRC_FILE就表示要索引的源文件。
(4)IndexWriter調(diào)用函數(shù)addDocument將索引寫到索引文件夾中。
本設(shè)計和開發(fā)中文分詞器將標準地址進行拆分,完善中文分詞詞庫,通過語言處理組件將詞源進行標準化處理,使用索引組件將標準化之后的詞條創(chuàng)建字典表,并生成文檔倒排鏈表,索引文件存入硬盤。本設(shè)計索引過程創(chuàng)建如下:
(1)分詞:使用IKAnalyzer中文分詞組建將查詢語句進行拆分,除去“停詞”。IKAnalyzer中文分詞組建自帶強大的中文分詞詞庫,同時還可以拓展應(yīng)用詞庫,將地理編碼應(yīng)用城市的專有地址地名錄入應(yīng)用詞庫,進行定制性的分詞處理;
(2)標準化:語言處理組件將詞源進行標準化處理,將“北京市”處理成“北京”,去掉通用的“街”、“巷”、“路”等詞匯;
(3)索引:使用索引組件將標準化之后的詞條創(chuàng)建字典表,并合成同義詞,生成文檔倒排鏈表。索引文件列表如圖4所示:
4.2 搜索索引(Search)
搜索過程創(chuàng)建如下:
(1)IndexReader將磁盤上的索引信息讀入到內(nèi)存,INDEX_DIR就是索引文件存放的位置。
(2)創(chuàng)建IndexSearcher準備進行搜索。
圖4 索引文件列表圖
(3)創(chuàng)建Analyer用來對查詢語句進行詞法分析和語言處理。
(4)創(chuàng)建QueryParser用來對查詢語句進行語法分析。
(5)QueryParser調(diào)用parser進行語法分析,形成查詢語法樹,放到Query中。
(6)IndexSearcher調(diào)用search對查詢語法樹Query進行搜索,得到結(jié)果TopScoreDocCollector。
本設(shè)計索引和搜索的建立過程如下:
(1)用戶輸入查詢語句;
(2)對查詢語句進行詞法分析,語法處理及語言處理:生成語法樹;
(3)搜索索引,得到符合語法樹的記錄:對分詞之后的各詞元,找出其對應(yīng)的文檔鏈表,對多個鏈表進行邏輯操作,得到終鏈表;
(4)根據(jù)最終鏈表,查詢語句的相關(guān)性,對結(jié)果進行排序:采用空間向量模型算法(VSM),計算次元權(quán)重,根據(jù)相關(guān)性對結(jié)果進行排序,得到類似Baidu、Google搜索排序效果。
地理編碼引擎將地址編碼中地址字符串輸入到地理坐標值輸出分為兩個過程:字符串拆分、數(shù)據(jù)庫匹配。系統(tǒng)通過字符串拆分將地址字符串分解成若干個地址要素和得出相應(yīng)的地址公式,通過數(shù)據(jù)庫匹配找出與地址串相對應(yīng)的地理坐標值,如圖5所示:
圖5 地理編碼-地址匹配的實現(xiàn)過程
地理編碼搜索引擎工作流程圖如圖6所示:
圖6 搜索引擎工作流圖
在地理編碼搜索引擎的支撐下,可以提供根據(jù)地址串生成位置(包括坐標信息和位置圖)、根據(jù)位置查詢地址串、獲得地址串的標準地址等功能,具體過程如圖7所示:
圖7 搜索過程圖
本設(shè)計采用Lucene+IKAnalyzer開源框架搭建地址匹配搜索引擎,地理編碼-地址搜索引擎功能結(jié)構(gòu)圖如圖8所示:
圖8 地理編碼搜索引擎功能結(jié)構(gòu)
6.1 關(guān)鍵字搜索引擎
(1)模糊查詢
根據(jù)用戶輸入的關(guān)鍵詞檢索索引詞條,將匹配結(jié)果按相似度排序之后返回并高亮顯示關(guān)鍵字,如圖9所示:
圖9 模糊查詢-關(guān)鍵字搜索匹配結(jié)果圖
(2)分級查詢
可以依據(jù)模糊查詢的結(jié)果進行分層精細查詢,也可以按照用戶需求分區(qū)域分類型進行定制查詢,查詢結(jié)果按匹配相似度排序返回,搜索效果如圖10所示:
圖10 分級查詢-分區(qū)域分類型查詢匹配結(jié)果圖
6.2 拼音搜索引擎
搜索引擎增加拼音搜索功能,主要包括以下幾種方式:
(1)拼音簡拼
拼音簡拼搜索如圖11所示:
圖11 拼音簡拼搜索效果圖
(2)拼音全拼
拼音全拼搜索如圖12所示:
圖12 拼音全拼搜索效果圖
(3)拼音漢字混合
拼音漢字搜索如圖13所示:
圖13 拼音漢字搜索效果圖
6.3 正向、逆向、分級搜索引擎
地址搜索引擎分別提供通過地址描述搜索空間位置,通過空間坐標搜索地址描述以及通過分級過濾搜索記錄的功能。
(1)正向搜索
“正查”:類似Google和Baidu,實現(xiàn)對自然語言地址信息的語義分析、詞法分析,自動和標準地址庫匹配,提供精確的或接近的地理坐標(X,Y);根據(jù)用戶輸入的關(guān)鍵詞檢索索引詞條,將匹配結(jié)果按相似度排序之后返回并高亮顯示關(guān)鍵字,搜索如圖14所示:
圖14 正向搜索效果圖
(2)分級搜索
通過區(qū)、街道、社區(qū)、道路聯(lián)合關(guān)鍵字進行分級過濾搜索。通過空間位置獲得地址描述;可以依據(jù)模糊查詢的結(jié)果進行分層精細查詢,也可以按照用戶需求分區(qū)域分類型進行定制查詢,查詢結(jié)果按匹配相似度排序返回,如圖14所示:
圖14 分級搜索效果圖
(3)空間逆向搜索
“逆查”:通過空間位置獲得地址描述。在城市范圍內(nèi),根據(jù)任意位置坐標(X,Y),快速解析出合理的地址描述文字,能夠生成查詢位置點和返回POI點的相對關(guān)系,支持多個記錄的返回,返回的方式要求以最近的方式而不是以查詢順序的方式,返回包括POI點相對位置關(guān)系的描述;根據(jù)用戶輸入的坐標串,搜索在制定范圍之內(nèi)的所有地址,搜索如圖15所示:
圖15 空間逆向搜索效果圖
本文采用了IKAnalyzer中文分詞技術(shù)和Lucene開源框架開發(fā)一套地理編碼服務(wù)系統(tǒng),實現(xiàn)了地理編碼標準地址入庫流程、地址匹配搜索引擎正向、逆向、模糊查詢、分級搜索。本文所闡述的地理編碼引擎,在互聯(lián)網(wǎng)地理信息挖掘方面做出有益的嘗試和積極的探索。目前,搜索引擎原型應(yīng)用系統(tǒng)尚待完善,在今后的學習工作當中,進一步完善本文所論述的地理信息編碼引擎及原型系統(tǒng),下一步研究還需要優(yōu)化軟件體系結(jié)構(gòu)與數(shù)據(jù)庫設(shè)計,提高匹配效率,對中文分詞算法和語義分析算法進一步完善,提高地名地址的識別效率。
[1] 蔣景瞳.我國地理信息標準化政策研究[J].測繪科學,2008,33(1).
[2] 張磊,張代遠.中文分詞算法解析[J].電腦知識與技術(shù), 2009,5(1):192~193.
[3] 李琦,羅志清等.基于不規(guī)則網(wǎng)格的城市管理網(wǎng)格體系與地理編碼[J].武漢大學學報·信息科學版,2005,30 (5):408~410.
[4] 高昭良.城市地理空間字典——地理編碼[J].城市勘測,2008,2(2):20~22.
[5] 張鶴,孔令彥.城市地址編碼發(fā)展歷史及現(xiàn)狀分析[J].測繪通報,2008(007):58~60.
[6] 薛明,肖學年.關(guān)于地理編碼幾個問題的思考[J].北京測繪,2007(2):54~56.
[7] 洪瑩.城市地名地址匹配方法研究及實驗[D].遼寧:遼寧工程技術(shù)大學碩士論文,2009.
[8] Morad M.British Standard 7666 as a Framework for Geocoding Land and Property Information the UK[Z].Compute, Environ·and Urban Systems,2002,26:483~492.
[9] LANGRAN G.Time in Geographic Information Systems [M].Taylor&Francis Ltd,Lond,UK,1992.
[10] LANGRAN G,CHRISMAN N R.A Framework for Temporal Geographic Information[J].Cartographica,1988,25 (3).
[11] Oracle Corp.Oracle Spatial Users'Guide and Reference Release 9.0.2[Z].2002.
Research and Implementation of Chinese Search Engine in Geocoding Based on IKAnalyzer and Lucene
Chai Jie
(Chongqing Survey Institute,Remote Sensing department,Chongqing 400020,China)
To realize the spatialization of attribute data with address information,based on relevant norms and standards of data collecting,this study formed a spatial reference database by establishing the one-to-one correspondence and relationship of geographical entities in the address model.Geocoding indexing and searching based on multiple segmentation algorithm.The establishment of thesaurus adopted the chinese word segmentation technology of IKAnalyze.A geocoding service system is based on the open source framework of Lucene,realizing the Warehousing processes of geocoding standard address,forward searching,backward searching,classification searching,and fuzzy query in address-matching searching engine.
Geocoding;IKAnalyzer;Lucene;classification search;fuzzy query
1672-8262(2014)06-45-06
P208.1
B
2014—03—23
柴潔(1988—),女,工程師,主要從事地理信息系統(tǒng)開發(fā)及應(yīng)用技術(shù)工作。