在失蹤兒童信息保存在本地以後,有一個字段是失蹤地點,字段內容一般比較詳細,具體到了失蹤的街道或者村,我打算經過某種方法將失蹤地點中的省、市、縣/區三級地址提取出來。php
知道要幹什麼以後,那就將這個「某種方法」肯定下來,根據以往的知識積累,利用分詞的原理來作,可能會更簡單。此次就不用php來寫了,換成python,在個人電腦上已經安裝了python的開發環境,在python下使用的分詞組件,搜索了一下,jieba用的比較多,並且調用也很是的容易。python
爲了更加準確的將失蹤地址中的省、市、縣三級單位提取出來,最好可以直接以省、市、縣、區的名稱爲字典,這樣經過分詞99%以上的詞都能準確的切分出來。
在網上搜索發現,根據最新的國家統計區位碼之做的現成的字典文件,並無。可是有同窗以前開發過爬蟲將這些區位關係存在了mysql數據庫,而且在網上有他放出來的sql備份文件,下載下來恢復到數據庫中便可。
這個文件包含70多萬行數據,在導入數據庫的過程大約花了十來分鐘。數據表以下:
mysql
所以,還須要將數據表中province_name,city_name,county_name提取出來便可,逐行存入文件就成爲可使用的字典文件。sql
import pymysql class AnManMysql: phost = '127.0.0.1' pyuer = 'root' password = '123456' database = 'anman_org' def pyMyConnection(phost,pyuser,password,database): db = pymysql.connect(phost,pyuser,password,database,charset="utf8") # cursor = db.cursor() return db # 導出省市縣鎮村字典 def getDict(db): cursor = db.cursor() cursor.execute("select distinct province_name from j_position") data = cursor.fetchall() # 打開字典文件my.dict fo = open("my.dict","w+") for da in data: print(da[0]) fo.seek(0,2) fo.write(da[0]+"\n") print(len(data)) cursor.execute("select distinct city_name from j_position") data = cursor.fetchall() for da in data: print(da[0]) fo.seek(0, 2) fo.write(da[0] + "\n") print(len(data)) cursor.execute("select distinct county_name from j_position") data = cursor.fetchall() for da in data: print(da[0]) fo.seek(0, 2) fo.write(da[0] + "\n") print(len(data)) cursor.execute("select distinct town_name from j_position") data = cursor.fetchall() for da in data: print(da[0]) fo.seek(0, 2) fo.write(da[0] + "\n") print(len(data)) # cursor.execute("select distinct village_name,village_id from j_position") # data = cursor.fetchall() # for da in data: # print(da[0]) # print(da[1]) # fo.seek(0, 2) # fo.write(da[0] + "\n") # print(len(data)) fo.close()
在python裏新建一個類,增長一個方法,打開一個字典文件,逐個從數據庫中distinct字段,而後逐行追加到字典文件中。數據庫
cursor = AnManMysql.pyMyConnection(AnManMysql.phost,AnManMysql.pyuer,AnManMysql.password,AnManMysql.database) AnManMysql.getDict(cursor)