公司每天需處理大量快遞地址,需要將一段字串進行解析出省、市、區、街道、詳細地址、手機、姓名。類似淘寶的地址自動識別,並且需要解析到具體的樓棟單元戶室。
研究了好久,終於寫出了一個Java版的解析演算法。
下載地址:
https://download.csdn.net/download/u011024436/89035851
演算法非常簡單,直接呼叫recognition函式就完成了地址解析,以下時程式碼示例
import org.address.AddressTool;
import org.address.tool.AddressRecognition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class RecognitionTest {
public static void main(String[] args) {
AddressRecognition recog = new AddressRecognition();
ArrayList<String> address = new ArrayList<>();
address.add("太陽鮮鮮 鹽田區山海四季城F棟17A,13111111111");
address.add("鹽田區山海四季城F棟2f,13111111111 太陽鮮鮮");
address.add("謝先生,深圳市龍崗區南灣街道尚峰花園4C2231 13111111111");
address.add("測試 江西九江市湖口縣武山鎮 15912344321");
address.add("鹽田區山海四季城D棟17A\n周敏 13111111111");
address.add("廣東省深圳市鹽田區東海三街山海四季城F4E,李侯明,13111111111");
address.add("深圳市鹽田區,大梅沙萬科東海岸221棟,周女士13111111111");
address.add("收貨人: 楊燕豔\n手機號碼: 13111111111\n所在地區: 廣東省深圳市龍崗區龍崗街道\n詳細地址: 格水村三巷十號三樓");
address.add("地址:深圳市鹽田區山海四季城A棟32D\n張歡 13111111111");
address.add("地址:深圳市龍華新區樟坑一區通博花園181棟\n收件人:於生生\n電話:13111111111");
address.add("所在地區: 湖南省株洲市醴陵市白兔潭鎮\n詳細地址: 金牛居委會金牛路5號國超\n劉嬌 131 1111 1111");
address.add("江西南昌市青山湖區廣蘭大道418號東華理工大學核工系南區9棟1112室 131 1111 1111 孫軼念");
address.add("湖北黃石市牧羊湖水機路華瑞南岸星城一棟一單元2202。\n\n劉月紅13111111111");
address.add("鹽田區北山道山海四季城F20D 韓先生 13111111111");
// address.add("深圳市鹽田區鹽田街道東海三街8號山海四季花園 曾候麗 13111111111");
// address.add("深圳市羅湖區鳳凰路中山花園1棟582室,劉藍琴,電話13111111111");
// address.add("袁月青13111111111四川省成都市高新西區百葉路1號電子科技大學成都學院計算機(分院)");
// address.add("鹽田區山海四季城F棟1B,盧燕13111111111");
// address.add("地址:廣東省佛山市順德區樂從天佑城E座2005室;\n聯絡人:熊翠花\n聯絡電話:13111111111;");
// address.add("深圳市南山區南光路龍坤居2棟D座714,收件人:張珍雲,電話:13111111111");
// address.add("深圳市鹽田區萬科東海岸21-102,收件人:葉俠,電話:131 1111 1111");
// address.add("地址:深圳市 南山區 南商路碧海天家園A89B 聯絡電話:13111111111 黃髮猜");
// address.add("都勻市水岸綠洲小區2棟二單元2033 李玉 13111111111");
// address.add("貴州省都勻市。甘塘鎮綠茵湖村一組2號 劉雪莉 13111111111");
// address.add("湛江市廉江市車板鎮人才市場,0755-22107333.曹建林 郵編:713200");
// address.add("廣東省清遠市 清城區洲心街道,金茂家園一棟一樓100號商鋪 13111111111 聶小姐");
// address.add("江蘇省 蘇州市 吳江區 干將東路678號江蘇大廈11樓 215000 徐天宇 13911111111");
// address.add("王小梅13911111111湖南省郴州市桂東縣桂東縣清泉鎮");
// address.add("莫席輝13911111111廣西壯族自治區柳州市柳北區躍進路42號4棟20樓");
// address.add("韓仁偉,13911111111,安徽省安慶市太湖縣新倉鎮,塔山村,前進組");
// address.add("北京市北京市東城區建設路紫薇花園 13311111111 何曉旭");
// address.add("13311111111 上海市黃浦區 建設路 紫薇花園 何曉旭");
// address.add("王曉光 重慶市 墊江縣 太平鎮,13311111111");
// address.add("瓦麗麗,13311111111,甘肅省 蘭州市 城關區 東崗街道向陽街道");
// address.add("劉海江13311111111河南省省直轄縣級行政區劃濟源市沁園路丹尼斯");
// address.add("13311111111 廣東省 東莞市 中堂鎮潢湧大坦村二街四巷1號");
// address.add("韓麗麗 13311111111 廣東省 東莞市 望牛墩鎮赤滘村南昌南路53號");
// address.add("蔡麗鳳,13311111111,江蘇省鹽城市其它區神州路御景灣7#1104");
// address.add("張彤,13311111111,黑龍江省 大興安嶺地區 加格達奇區 鐵路南小區29號樓4單元5658sf");
// address.add("黃梅, 13311111111, 江西省 撫州市 臨川區 上頓渡鎮江西省撫州市臨川區上頓渡鎮老公安局");
// address.add("何花菊,86-13311111111,遼寧省 盤錦市 盤山縣 東郭鎮 遼寧省盤錦市盤山縣東郭鎮 ,000000");
// address.add("雁平 86-13311111111 廣東省 江門市 恩平市 牛江鎮 嶺南娟姑水果店");
// address.add("北京 北京市 順義區 勝利街道宜賓南區2-2-401 李俊南 18210997754");
// address.add(" 順義區 勝利街道宜賓南區2-2-401 ");
for (String s : address) {
System.out.println(recog.recognition(s));
}
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
Date date = new Date(System.currentTimeMillis());
System.out.println("開始時間 : " + formatter.format(date));
int cnt=0;
for(int i=0;i<20000;i++){
for (String s : address) {
recog.recognition(s);
cnt = cnt + 1;
}
}
System.out.println("解析地址條數 : " + cnt + "條");
date = new Date(System.currentTimeMillis());
System.out.println("結束時間 : " + formatter.format(date));
}
}
速度超級快,地址處理速度達到8000條/秒
結果列印
{address=鹽田區山海四季城f棟17a, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城f棟17a, name=太陽鮮鮮, county=鹽田區}
{address=鹽田區山海四季城f棟2f, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城f棟2f, name=太陽鮮鮮, county=鹽田區}
{address=深圳市龍崗區南灣街道尚峰花園4c2231, town=南灣街道, province=廣東省, phone=13111111111, city=深圳市, detail_address=尚峰花園4c2231, name=謝先生, county=龍崗區}
{address=江西九江市湖口縣武山鎮, province=江西省, town=武山鎮, phone=15912344321, city=九江市, name=測試, county=湖口縣}
{address=鹽田區山海四季城d棟17a, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城d棟17a, name=周敏, county=鹽田區}
{address=廣東省深圳市鹽田區東海三街山海四季城f4e, province=廣東省, phone=13111111111, city=深圳市, detail_address=東海3街山海四季城f4e, name=李侯明, county=鹽田區}
{address=深圳市鹽田區,大梅沙萬科東海岸221棟, province=廣東省, phone=13111111111, city=深圳市, detail_address=,大梅沙萬科東海岸221棟, name=周女士, county=鹽田區}
{address=廣東省深圳市龍崗區龍崗街道 格水村三巷十號三樓, province=廣東省, town=龍崗街道, phone=13111111111, city=深圳市, detail_address= 格水村3巷10號, name=楊燕豔, county=龍崗區}
{address=深圳市鹽田區山海四季城a棟32d, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城a棟32d, name=張歡, county=鹽田區}
{address=深圳市龍華新區樟坑一區通博花園181棟, phone=13111111111, city=深圳市, detail_address=龍華新區樟坑通博花園181棟, name=於生生}
{address=湖南省株洲市醴陵市白兔潭鎮 金牛居委會金牛路5號國超, province=湖南省, town=白兔潭鎮, phone=13111111111, city=株洲市, detail_address= 金牛居委會金牛路5國超, name=劉嬌, county=醴陵市}
{address=江西南昌市青山湖區廣蘭大道418號東華理工大學核工系南區9棟1112室, province=江西省, phone=13111111111, city=南昌市, detail_address=廣蘭大道418東華理工大學核工系南區9棟1112室, name=孫軼念, county=青山湖區}
{address=湖北黃石市牧羊湖水機路華瑞南岸星城一棟一單元2202, province=湖北省, phone=13111111111, city=黃石市, detail_address=牧羊湖水機路華瑞南岸星城一棟一單元2202, name=劉月紅}
{address=鹽田區北山道山海四季城f20d, province=廣東省, phone=13111111111, city=深圳市, detail_address=北山道山海四季城f20d, name=韓先生, county=鹽田區}
開始時間 : 2024-03-28 at 17:09:24 CST
解析地址條數 : 280000條
結束時間 : 2024-03-28 at 17:09:56 CST
這麼簡單,就完成啦!
如果想進一步解析出地址中的道路、樓棟、單元、戶室等,可使用地址分詞功能
AddressTool ss = new AddressTool();
System.out.println(ss.getStdAddress("湖北武漢江夏區猴王街道中前社群宏運大道2299號秦淮綠洲北苑9棟1單元1001室"));
分詞結果列印
[city:武漢市, county:江夏區, town:猴王街道, community:中前社群, road:宏運大道, road_no:2299, aoi:秦淮綠洲, sub_aoi:北苑, building:9, unit:1, room:1001]
如果想了解更多addresstool用法,歡迎關注我的部落格
如有問題或者建議,歡迎聯絡郵箱addresstool@163.com
java下載地址 > https://download.csdn.net/download/u011024436/89035851