董潔鈺,馬夢宇,陳 犖,景 寧
(國防科學(xué)技術(shù)大學(xué) 電子科學(xué)與工程學(xué)院,湖南 長沙 410073)
隨著數(shù)字城市建設(shè)的不斷推進(jìn),地名地址服務(wù)作為天地圖的基礎(chǔ)地理信息,對實(shí)現(xiàn)智慧城市和地理信息化具有重要的作用[1]。在地名地址服務(wù)體系中,地名地址的匹配是空間數(shù)據(jù)和非空間數(shù)據(jù)關(guān)聯(lián)的重要途徑[2],直接關(guān)系到地名地址服務(wù)平臺的質(zhì)量[3]。但是,目前現(xiàn)有的服務(wù)模式較為生硬,只是基于全文索引實(shí)現(xiàn)地名地址檢索,用自然語言對地名地址進(jìn)行搜索時準(zhǔn)確性和效率都有待提高。本文基于postgreSQL數(shù)據(jù)庫,立足如何利用好分詞字典和信息分級提高地名地址服務(wù)的搜索效率和準(zhǔn)確性,為城市市民帶來更好的數(shù)字城市服務(wù)體驗(yàn),進(jìn)行研究總結(jié)。
中文分詞技術(shù)和地名地址匹配技術(shù)是地名地址檢索服務(wù)中的兩個關(guān)鍵技術(shù)[4]。利用SCWS對檢索關(guān)鍵字和數(shù)據(jù)集進(jìn)行分詞,通過修改分詞詞典提高分詞準(zhǔn)確性。在postgreSQL中建立gin索引提高檢索效率,并通過添加分級分類信息來縮小檢索范圍,提高檢索精度。
在地名搜索功能中,將地名地址短語進(jìn)行分割,就能將地名數(shù)據(jù)的相關(guān)信息的文字描述以及用戶輸入的查詢文本拆分成有意義的詞供系統(tǒng)進(jìn)行檢索匹配[5],分詞的準(zhǔn)確性直接關(guān)系到檢索服務(wù)是否能正確地識別用戶的檢索意圖,進(jìn)而影響用戶的檢索體驗(yàn)[6]。
相對于普通文本來說,地名地址具有以下幾個特點(diǎn)[7]:①地名地址語句較為短小,上下文對詞語的分割幾乎沒有影響。②地名地址中專有名詞較多,具有獨(dú)特性,對詞語分割會造成困難。③地名地址中有具有明顯分割標(biāo)識的詞語,如“路”“鎮(zhèn)”“超市”等。④地名地址服務(wù)的詞語中可能會有分割歧義,如“北馬路”,可能會被錯誤地分割為“北”“馬路”。因?yàn)榈孛刂范陶Z的特殊性,對地名地址短語的分割技術(shù)有著特殊的要求。目前大多分詞技術(shù)都是使用了混合算法,其中SCWS算法就是一種使用了詞頻詞典的分詞算法。
SCWS采用標(biāo)準(zhǔn)C代碼開發(fā),用在地名地址檢索研究中有著以下優(yōu)勢:①SCWS沒有任何第三方庫函數(shù)依賴,提供了C的接口和PHP擴(kuò)展,是目前使用最方便的開源免費(fèi)中文分詞軟件之一,可以輕松植入任何現(xiàn)有的軟件系統(tǒng),適合做地名地址檢索研究;②SCWS支持 GBK、UTF-8、BIG5 等漢字編碼,切詞效率高,可以提高地名地址檢索的效率;③SCWS采用的是自行采集的詞頻詞典,并輔以一定程度上的專有名詞、人名、地名、數(shù)字年代等規(guī)則集,并且默認(rèn)提供通用的互聯(lián)網(wǎng)信息詞庫,提供 PHP編寫的詞典導(dǎo)入導(dǎo)出工具。用戶可以自定義文本詞典,可以定義基于詞性的規(guī)則權(quán)重,從而人為地更新詞典,提高檢索的準(zhǔn)確性;④SCWS 特別為全文索引考慮,提供了自創(chuàng)的復(fù)合分詞,可以把長詞再分成短詞,把散字按二元切詞法進(jìn)行結(jié)合的功能,這適合地名地址檢索名詞的特殊性,適用于地名地址檢索應(yīng)用。
本文使用postgreSQL數(shù)據(jù)庫進(jìn)行地名地址數(shù)據(jù)存儲,并采用基于SCWS的zhparser分詞工具來進(jìn)行分詞檢索。實(shí)驗(yàn)環(huán)境為Ubuntu系統(tǒng),安裝SCWS和zhparser之后,即可在postgreSQL數(shù)據(jù)庫中確立要進(jìn)行分級的檢索對象。確定分詞對象后,SCWS可以自動地根據(jù)對象的詞頻建立詞頻詞典,其流程如圖1所示。然后,就可以根據(jù)其詞典進(jìn)行分詞,為地名地址全文檢索奠定基礎(chǔ)。
圖1 詞頻詞典的建立流程Fig.1 The establishment of a dictionary of word frequency
在地名地址服務(wù)中,SCWS建立的詞頻詞典也是一個地名地址詞典,其中的專有名詞較多,可能會影響系統(tǒng)自動分辨的準(zhǔn)確率。在地名地址檢索服務(wù)中提供修正服務(wù),發(fā)現(xiàn)檢索分詞錯誤的用戶可以參與構(gòu)建錯誤字典,提交開發(fā)者統(tǒng)一修正。
SCWS提供 PHP編寫的詞典導(dǎo)入導(dǎo)出工具,通過修改工具開發(fā)者可以將詞典導(dǎo)入到txt文本中進(jìn)行修改和編輯;同時也可以自定義文本詞典和基于詞性的規(guī)則權(quán)重,將之導(dǎo)入SCWS中,從而提高詞典分詞的準(zhǔn)確性,進(jìn)一步提高檢索精度。修正詞典服務(wù)的流程如圖2所示。
圖2 詞頻詞典修正服務(wù)流程Fig.2 The service process for correcting the dictionary of word frequency
地址匹配技術(shù)是指根據(jù)輸入的包含地址信息的文字按照一定的地址匹配策略與地理編碼庫中的地址信息進(jìn)行比對,服務(wù)按照特定的步驟為地址查找匹配對象,從而獲得相應(yīng)的空間位置[8]。為了能直接定位數(shù)據(jù)庫中的記錄,本文對搜索字段建立索引,大大提高了地名地址匹配的效率。
建立索引要考慮多種因素,如檢索效率、時間空間開銷等[9]。常用的B-tree索引是一種簡單的樹狀索引,檢索的綜合效率較高,但在將檢索字段分詞后,B-tree索引檢索的準(zhǔn)確性和效率都有所下降,不適用于地名地址檢索系統(tǒng)。百度、Google等檢索使用了即時索引,檢索的準(zhǔn)確性和即時性高,可以最大程度地滿足用戶需求,但是較為復(fù)雜,開銷較大,也不適用于本文的地名地址檢索系統(tǒng)。
PostgreSQL中還有很多獨(dú)特的索引,其中g(shù)in索引是一種將列(比如數(shù)組,全文檢索類型)中的值拿出來,再存儲到樹形結(jié)構(gòu)中的索引。它適合多字段和模糊檢索,適用于地名地址檢索服務(wù)。在本文的地名地址檢索服務(wù)中,利用gin索引對關(guān)鍵詞字段進(jìn)行檢索,可以優(yōu)化檢索效率。
服務(wù)中,首先要讀出需要建立索引的關(guān)鍵字字段,對其進(jìn)行分詞,然后對分詞后的字段建立索引,生成索引文件。用戶輸入檢索關(guān)鍵字后,也是先經(jīng)過同樣的分詞器進(jìn)行分詞,然后再設(shè)計(jì)檢索器,對索引文件進(jìn)行檢索,生成檢索結(jié)果返回。具體流程如圖3所示。
圖3 檢索服務(wù)體系流程圖Fig.3 The complete process of retrieve service system
在數(shù)據(jù)量大的情況下,同名數(shù)據(jù)很多,會很大程度上影響檢索精度[10]。若用戶想吃火鍋,如果只是檢索關(guān)鍵字“火鍋”或者“火鍋店”,那么賣火鍋底料的店家也在檢索結(jié)果之中,屬于冗余信息;若用戶想找“工商銀行(公交站)”,則會檢索出很多地區(qū)的公交站共31條,其中部分信息見表1,在用戶期望地區(qū)之外的檢索結(jié)果均為冗余信息。紛雜的信息會干擾用戶的判斷,影響用戶的檢索。因此,對地名地址數(shù)據(jù)進(jìn)行級別和類型的劃分,可以在檢索時提高準(zhǔn)確性,給用戶帶來更好的檢索體驗(yàn)。
在級別的劃分上,本文將興趣點(diǎn)(Points of Interest,POI)的級別信息定為省市區(qū)三級。在檢索服務(wù)中,可以選擇級別信息,從而限制檢索結(jié)果的區(qū)域范圍,提高檢索精度。
在類別的劃分上,本文根據(jù)POI數(shù)據(jù)的特點(diǎn),參考高德地圖POI的分類標(biāo)準(zhǔn),將POI數(shù)據(jù)進(jìn)行三級分類。在檢索服務(wù)中,可以選擇分類信息,從而限制檢索結(jié)果的類別,提高檢索精度。其中部分分類標(biāo)準(zhǔn)如圖4所示。
表1 “工商銀行(公交站)”部分檢索結(jié)果Tab.1 Partial search results of “ICBC(bus station)”
圖4 部分分類準(zhǔn)則Fig.4 Partial classification criteria
為了確定服務(wù)的質(zhì)量和效率,本文對研究的地名地址檢索服務(wù)進(jìn)行了測試實(shí)驗(yàn)。具體實(shí)驗(yàn)環(huán)境見表2。
表2 實(shí)驗(yàn)環(huán)境Tab.2 Experiment environment
在檢索同一關(guān)鍵字時,使用分級分類信息和不使用分級分類信息所得到的結(jié)果是不同的。如若用戶想在長沙市吃火鍋,在不同檢索條件下會返回不同結(jié)果,如圖5所示。圖5a中的柱狀圖表示檢索“火鍋店”時所有返回的所有結(jié)果,其中只有長沙市餐飲服務(wù)類型中的火鍋店是用戶實(shí)際需要的。圖5b表示用戶檢索“長沙市”“火鍋店”時的返回結(jié)果,其中藍(lán)色部分是用戶需要的結(jié)果,紅色部分是冗余信息。圖5c表示用戶檢索“餐飲服務(wù)”“火鍋店”時的返回結(jié)果,其中藍(lán)色部分是用戶需要的結(jié)果,紅色部分是冗余信息。從圖中可以看出,如果分級分類信息不明確則會有很多冗余結(jié)果,對用戶造成干擾。中,可以在輸入時進(jìn)行地理位置的聯(lián)想,如圖7所示。
圖5 不同檢索方式結(jié)果組成對比圖Fig.5 Comparison results of diあerent search methods
圖6 檢索“廣場”的結(jié)果展示Fig.6 The retrieval results of "square"
圖7 路徑規(guī)劃模塊中的聯(lián)想功能Fig.7 Association function in path planning module
根據(jù)對地名地址檢索方法的研究和優(yōu)化,本文設(shè)計(jì)并實(shí)現(xiàn)了地名地址檢索服務(wù),并集成到本實(shí)驗(yàn)室higis系統(tǒng)中,為路徑規(guī)劃功能的實(shí)現(xiàn)奠定了基礎(chǔ)。服務(wù)可以實(shí)現(xiàn)地理位置的檢索,并在地圖相應(yīng)地點(diǎn)進(jìn)行顯示,如圖6所示。地名地址服務(wù)集成到路徑規(guī)劃功能
在大數(shù)據(jù)的環(huán)境下,隨著數(shù)據(jù)量的增加,檢索時間的變化尤為重要。本文對地名地址服務(wù)進(jìn)行性能測試,不同情況下檢索時間的測試結(jié)果如圖8所示,圖中曲線分別是僅檢索關(guān)鍵字加上分級分類信息時的檢索時間隨數(shù)據(jù)量的增長而變化的曲線。從圖中可以看出,檢索時間隨數(shù)據(jù)量的增長變化不大,這說明本文的地名地址檢索服務(wù)在數(shù)據(jù)量較大的情況下,也會有很高的運(yùn)行效率,適用于大數(shù)據(jù)的地理信息系統(tǒng)。
圖8 檢索時間隨數(shù)據(jù)量變化曲線Fig.8 The curves of the retrieval time with the diあerent amount of data
本文針對基于全文索引實(shí)現(xiàn)的傳統(tǒng)地名地址服務(wù)在實(shí)際應(yīng)用中的不足,基于PostgreSQL建立索引實(shí)現(xiàn)地名地址快速檢索,探討了地名地址全文檢索技術(shù)與優(yōu)化方案,通過修改分詞字典和使用分級分類信息來優(yōu)化檢索結(jié)果。同時設(shè)計(jì)并實(shí)現(xiàn)了地名地址檢索服務(wù)架構(gòu),進(jìn)行了性能測試,證明其適用于大數(shù)據(jù)環(huán)境,并可以提供給用戶更好的檢索體驗(yàn)。