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