香港地址解析器介紹

Holok
11 min readFeb 21, 2019

--

坑主︰Brian Leung

(源碼及網站請見最底)

介紹︰

大家好,今日我想做嗰樣嘢,就係做一個Tool去breakdown香港嘅中文地址。其實好多時我哋平時做一啲分析嘅時候呢,都會牽涉到同地址相關嘅嘢︰好多時地址都係unstructural嘅,你知好多layman既寫法,有好多奇怪嘅combination。當我哋用Geocode嘅時候就會有問題。

而家有兩個方法去用Geocode︰一係就用ALS用政府嘅OGCIO,或者你可以用Google嘅Geocoding API,不過嗰個係有limit同埋要收錢,同埋佢係加左格。

咁點解要做一個新嘅呢一個Parser呢? 因為而家嘅OGCIO佢嘅product呢,係你入啲乜嘢呢,佢都會出個result出黎嘅 。即是你打在a字入去呢 ,佢點樣都會嘔到個result畀你,所以你唔會知道佢嘅準確度。例如我打個a入去佢點都會嘔一個例如「阿公岩道」。當我哋做一個Bulk嘅processing,例如一千個,其實唔會知道佢係啱定錯。

另外,而家ALS 佢係唔會process樓、層數。至於Google嘅API除咗話佢加價同埋有limit之外,如果佢search到有multiple嘅result嘅話,因為你入果個地址係好頹嘅地址,淨係得一個building嘅話,其實佢係唔會畀個result你嘅。

或者例如你打「將軍澳富麗花園」,其實未必搵到,或者最後會出左觀塘。因為佢裏面嘅data都係唔準嘅。

我哋想做啲咩呢?而家外國有一個open source嘅library叫做nib postal,佢入面已經整咗好多open street map入面嘅data。佢可以break down一個text address去唔同嘅compliment,包括district,building,street name。

另外我哋已經喺郵政局,即係政府網站,撈咗一啲街道嘅名以及Building既名,已經知道曬嗰條街有幾多號、係啲咩building之類嘅資料。

報告環節︰

咁趁而家仲插緊線嘅時候,介紹下今日做左啲咩︰我係Brian,佢係Ronald,另外有幾位朋友都係幫我哋嘅。我哋做嘅就係好多時我哋都要處理唔同嘅中文地址,但係呢啲中文地址可能係unstructural,好亂嘅。

我都可能有500個地址,但係你會見到裏面好多嘢都好亂,咁要做嘅目標就係將呢一啲唔同嘅format嘅地址拆番開︰佢係邊一區邊條街、邊一號?

咁有咩用呀?咁我咪好快可以知道呢一啲distribution係點樣——18區邊啲多啲、邊啲少啲。或者我可以做一啲Geocoding,方便遲啲port落去個map度。呢個就係所謂香港既Address Parser。

其實外國已經有啲差唔多嘅嘢,佢已經有個web既frontend,你入咗個地址落去撳Parse,咁其實佢就會嘔番佢嗰個地址唔同嘅component係啲乜嘢。

同埋佢可以support你一次過擺500個地址落去,佢都可以拆返開,你有唔同嘅field,咁做data analysis就好方便。

香港有一啲相關嘅tool,你可以用Google map API,或者用OGCIO嘅address lookup service。但係政府嘅address lookup service,其實你入個a字入去佢都會俾答案你,所以要做番validation。

講番今日做咗啲咩︰我哋搵咗外國有個open source嘅library叫nib postal,佢會認低個地址嘅唔同component 拆返出黎。咁佢係support好多唔同嘅language,但如果中文果個…但係前提就係我哋會feed一啲中文嘅地址落去。之前我哋撈咗一堆香港嘅正確地址,即係乜乜街、乜乜街、乜乜building、乜乜building。

咁我地今日花咗好多時間去理解嗰個library係點樣用。點樣feed嗰啲data,呢個就仍在努力中嘅。

好,咁跟住另外就講講ALS嗰個 schema。咁正如頭先所講啦,因為始終nib postal 嗰個係外國嘢,第一樣最重要嘅嘢呢就係要比對返究竟香港嗰個地址嘅層級,要點樣拼返入去nib postal 果個嘅component?

咁我就嘗試同組員一齊傾︰例如講香港、九龍、新界咩區,然後細啲範圍,咩屋苑、咩邨、幾多樓、幾多號、幾多室……嘗試去砌番個對等嘅location。

除咗講緊傳統屋苑之外,亦都可以講下鄉村點樣呀,或者喺公園或者公共設施點樣呀?另外有一啲不知名嘅地區得返個Lot number,咁我都嘗試諗下點樣可以好簡單咁拼返落去。

咁呢度只不過係個開始,最終嘅目標就梗係可以做到有一個web 嘅frontend。大家如果唔識programming,淨係得一堆地址嘅,入咗嚟個frontend嗰度,咁就會出番曬佢coordinate嘅一啲資料。

例如逸東酒店就會出番曬九龍|彌敦道|幾多號…方便你做分析。加埋一個coordinate嘅number。

咁我哋需要啲咩呢未來?就需要唔同嘅高手:

第一就係如果做開一啲同C有關嘅,即係處理一啲C library,咁就可以一齊研究外國open source nib postal點樣用。

咁第二呢就係想睇下有冇一啲Web developer,幫手揼一個one page嘅web frontend。

咁如果你話做一個嘅database用來做返啲資料,儲一啲machine-learning或者training,都需要有一啲人幫手畀意見或者maintain。

第二次Hackathon

介紹

大家好我係brian,我之前做過記者。其實做記者嘅時候呢成日都會見到一啲case。例如你有一大堆資料,比如呢個就係香港唔同銀行嘅地址︰咁就有地址啦,同埋銀行名。

如果你想做一啲數據分析睇下邊一區係最多?例如呢一區係最多銀行嘅;邊條街最多銀行啦;或者做一啲data visualization……

你得地址你冇用既,其實要coordinate黎去處理。咁你會點處理呢?你可以用Google嘅API 可以轉coordinate。但係佢係要收錢嘅,你可以畀一筆錢。

咁依家政府有個service叫OGCIO,咁最高你有個地址啦,基本上你打個地址,咁佢就會出番曬所有地址嘅資料。

咁我哋諗住利用呢樣嘢做一個係人都會用到嘅 Address Parser。比如話我哋呢度有一大堆地址…例如你呢度做好多地址…例如呢度有一個「香港仔鴨脷洲利東商場第二期」咁樣。其實如果我哋將地址放落嚟呢度,呢度應該見到最底嗰度「香港」呢一度,我撳完之後,如果佢望一望個result,佢應該可以幫你拆開曬。

佢係香港仔、佢係鴨脷洲、佢係利東商場、邊一條街、幾多號,甚至有一啲extra嘅資料。換言之,其實如果你將呢一堆資料揼落去,將佢拆出嚟就好方便咁做到數據分析,之後呢可以做到map嘅visualization,咁對於分析一啲土地或者地址就好有裨益。

其實今次係第二次來,上次在hackathon已經開咗個頭,我哋持續嘅progress有一個python嘅file。我哋長遠想做啲咩呢?就係想有一個網站,即係你可以貼好多地址落去,咁你撳粒掣,就可以幫你拆返啲地址出嚟,顯示佢係邊區,甚至可以俾埋coordinate佢。

我哋需要啲咩幫手呢?

第一就係其實呢,呢度因為小弟係半途出家,同埋之前有啲高人幫手呢,先至勉強寫到一個好簡單嘅拆地址嘅簡單嘅profile。第一就需要大家code review。

第二就係想將佢擺上網希望今日可以做到一個簡單嘅網站,貼落去就可以拆。

第三就係佢有好多功能嘅,即係你打英文地址會轉番做中文地址,或者你打land lot,佢都可以出到result嘅。

咁呢啲可以陣間再去討論。

報告環節

大家好 我係Brian,我今日想講Address Parser 嘅嘢。頭先大家見到浩華呢

佢整理區議會資料嘅時候呢,你應該會見到沙田有個有一啲波波嘅嘢。但其實你要有啲波波喺度呢,大前題係你要知道嗰啲地方嘅coordinate,或者你要識得讀嗰啲地方係咩意思。

咁呢件事其實都係好困難嘅,因為你可以去Google map度,逐個search嗰啲地址 搵返啲coordinate,都可以犀利啲用Google嘅API做,但係依家就要收錢。所以我哋就要處理呢個問題,即係咩意思呢?例如你見到呢度有一個呢……你見到呢度左上角有「香港仔香港仔大道162號至166號」,其實呢個係冇意思嘅,其實我哋要有後面「22」同「114」,我講緊Line two果度……

其實我哋嘅目標呢,就要將「香港仔香港仔大道」變成有意思嘅嘢,如果大家仲係望住第二行嘅話,即係最高嗰度嘅話,你應該會見到我哋會將呢度拆咗做「香港仔大道、幾多號」,係啦highlight緊嗰度,好細隻啲字。

點解要將地址拆做啲咁細嘅嘢呢?係因為要方便整理數據,例如你「逸東酒店」四個字係冇意思㗎,你要知道逸東酒店係在彌敦道、在九龍、佢係幾多號,你先可以做 further嘅數據分析。

想像就係你有一千個銀行地址、有一千個唔同嘅地址format,我將佢哋都砌返做唔同嘅attribute。

咁我哋做緊呢類,「十八區嘅邊間銀行多啲?」,或者做其他,你要port返啲銀行嘅coordinate,在地圖做visualization就好有用啦。

咁我哋今日做咗啲乜嘢呢?咁你見到有一堆好多唔同嘅字,其實如果大家唔係technical嘅人呢係唔會識用。所以我哋今日係做一個,將佢變返做大家都會識用嘅。有個例如話呢個「銅鑼灣謝斐道488號」,我地search完之後,理論上就會 Parse 就會將呢度啲嘢拆開佢。

你會見到樓下例如呢度,match係因為佢嘅街道名中,同埋街號都中嘅,例如銅鑼灣呢度佢就會出番,原來佢係匯創大廈,佢會畀啲additional嘅資料你。

我哋今日將佢變做一個有UI嘅嘢,就已經爭好遠喇,因為有UX同無UX。咁點解要將佢變成一個有UX嘅嘢呢?因為唔係大家個個都識寫programme。想像下如果一個普通人要做呢啲,佢有一千個地址要做嘅咁樣。如果有UX貼落嚟一次過做佢就會處理曬。

例如呢度係「香港仔」、「香港大道」、「168號」、「利東樓」,就已經拆開咗五個 attribute。ssph 應該係講緊南區,咁你遲啲做分析嘅話就方便好多。咁呢個就係我哋今日做嘅嘢。

你想像遲啲我哋可以再做啲咩呢?佢可以匯出coordinate。你想像如果我有一千個地址落去,佢就會畀返一千個 coordinate。

你留意下match街道名稱都係好重要嘅,佢會話畀你知呢個結果嘅準確度。因為你想像如果你哋打大埔落去,其實個個coordinate係冇意思,因為大埔得area係polygon嚟嘅。我哋其實可以根據佢match去邊個位,去再validate個result 係點樣。因為始終好多時,你做呢啲分析嘅時候係要準。當然越準越好,同埋要知道有幾準。

咁佢遲啲嘅roadmap係點呢?你見到而家淨係得中文啦,但係目標就係未來可以打英文落去,佢會出英文地址;或者你打英文地址落去,佢會出中英地址畀你。

同埋或者你可能打50個地址落去,佢樓下有個地圖可以出返曬啲point畀你。甚至係或者你有一個csv 畀你download返落嚟。

所以如果大家希望 contribute或者有咩意見嘅話,歡迎你黎搵我,多謝!

媒體報導

曾任職記者的梁逸風,過往報道數據新聞時面對過千個地址就非常「頭痛」,「資料雜亂無章,有中英、格式不一,無門牌等,要逐個入Google地圖轉換成座標,才能製圖。」他續說,「見到美國有免費、大量處理的服務,但香港這麼小,沒有理由無,但又真的沒有。」

去年6月首屆黑客松工作坊,梁逸風分享該想法,提出製作 「香港地址解析器(Hong Kong Address Parser)」。項目令任職軟件工程師逾10年、曾想做餐廳分佈研究的黃漢斌感興趣。二人主力編寫程式,連同其他成員協助修改程式,目前解析器可將大量地址分拆,得出經緯度座標、中英翻譯出統一格式地址,包括地區、街道、門牌、大廈、區議會選區等資料,方便製作互動地圖及資料分析,並在政府「資料一線通」網站開放供公眾使用。

https://www.hk01.com/社會新聞/297257

============
g0vhk 舉行第三次hackathon

日期︰2019年2月23日
時間︰13:00-19:30
地點︰旺角彌敦道380號逸東酒店一樓
報名︰https://bit.ly/g0vhk3rdhack
Collaction: https://www.collaction.hk/h/g0vhk3rd

--

--

Responses (1)