程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 神器!自動識別文字中的省市區並繪圖

編輯:Python

在做NLP(自然語言處理)相關任務時,經常會遇到需要識別並提取省、城市、行政區的需求。雖然我們自己通過關鍵詞表一個個查找也能實現提取目的,但是需要先搜集省市區關鍵詞表,相對而言比較繁瑣。

今天給大家介紹一個模塊,你只需要把字符串傳遞給這個模塊,他就能給你返回這個字符串內的省、市、區關鍵詞,並能給你在圖片上標注起來,它就是 Cpca 模塊。

1.准備

開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

(可選1) 如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南。

請選擇以下任一種方式輸入命令安裝依賴
1. Windows 環境 打開 Cmd (開始-運行-CMD)。
2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install cpca

注意,目前 cpca 模塊僅支持Python3及以上版本。

在 windows 上可能會出現類似如下問題:

Building wheel for pyahocorasick (setup.py) ... error

先閱讀原文去下載 Microsoft Visual C++ Build Tools 安裝VC++構建工具,再重新 pip install cpca,即可解決問題。

2.基本使用

通過兩行代碼就能實現最基本的省市區提取:

# 公眾號: Python 實用寶典
# 2022/06/23
import cpca
location_str = [
    "廣東省深圳市福田區巴丁街深南中路1025號新城大廈1層",
    "特斯拉上海超級工廠是特斯拉汽車首座美國本土以外的超級工廠,位於中華人民共和國上海市。",
    "三星堆遺址位於中國四川省廣漢市城西三星堆鎮的鴨子河畔,屬青銅時代文化遺址"
]
df = cpca.transform(location_str)
print(df)

效果如下:

省 市 區 地址 adcode
0 廣東省 深圳市 福田區 巴丁街深南中路1025號新城大廈1層 440304
1 上海市 None None 。310000
2 四川省 德陽市 廣漢市 城西三星堆鎮的鴨子河畔,屬青銅時代文化遺址 510681

注意第三條的廣漢市,cpca 不僅識別到了語句中的縣級市廣漢市,還能自動匹配到其代管市的德陽市,不得不說非常強大。

如果你想獲知程序是從字符串的那個位置提取出省市區名的,可以添加一個 pos_sensitive=True 參數:

# 公眾號: Python 實用寶典
# 2022/06/23
import cpca
location_str = [
    "廣東省深圳市福田區巴丁街深南中路1025號新城大廈1層",
    "特斯拉上海超級工廠是特斯拉汽車首座美國本土以外的超級工廠,位於中華人民共和國上海市。",
    "三星堆遺址位於中國四川省廣漢市城西三星堆鎮的鴨子河畔,屬青銅時代文化遺址"
]
df = cpca.transform(location_str, pos_sensitive=True)
print(df)

效果如下:

(base) G:\push\20220623>python 1.py
     省 市 區 地址 adcode 省_pos 市_pos 區_pos
0  廣東省 深圳市 福田區 巴丁街深南中路1025號新城大廈1層 440304      0      3      6
1  上海市 None None 。310000     38     -1     -1
2  四川省 德陽市 廣漢市 城西三星堆鎮的鴨子河畔,屬青銅時代文化遺址 510681      9     -1     12

它標記出了識別到省、市、區的關鍵位置(index),當然如果是德陽市這種特殊的識別會被標記為-1.

3.高級使用

它還可以從大段文本中批量識別多個地區:

# 公眾號: Python 實用寶典
# 2022/06/23
import cpca
long_text = "對一個城市的評價總會包含個人的感情。如果你喜歡一個城市,很有可能是喜歡彼時彼地的自己。"\
    "在廣州、香港讀過書,工作過,在深圳買過房、短暫生活過,去北京出了幾次差。"\
    "想重點比較一下廣州、深圳和香港,順帶說一下北京。總的來說,覺得廣州舒適、"\
    "香港精致、深圳年輕氣氛好、北京大氣又粗糙。答主目前選擇了廣州。"
df = cpca.transform_text_with_addrs(long_text, pos_sensitive=True)
print(df)

效果如下:

(base) G:\push\20220623>python 1.py
          省 市 區 地址 adcode 省_pos 市_pos 區_pos
0       廣東省 廣州市 None     440100     -1     44     -1
1   香港特別行政區 None  None     810000     47     -1     -1
2       廣東省 深圳市 None     440300     -1     58     -1
3       北京市 None  None     110000     71     -1     -1
4       廣東省 廣州市 None     440100     -1     86     -1
5       廣東省 深圳市 None     440300     -1     89     -1
6   香港特別行政區 None  None     810000     92     -1     -1
7       北京市 None  None     110000    100     -1     -1
8       廣東省 廣州市 None     440100     -1    110     -1
9   香港特別行政區 None  None     810000    115     -1     -1
10      廣東省 深圳市 None     440300     -1    120     -1
11      北京市 None  None     110000    128     -1     -1
12      廣東省 廣州市 None     440100     -1    143     -1

不僅如此,模塊中還自帶一些簡單繪圖工具,可以在地圖上將上面輸出的數據以熱力圖的形式畫出來:

# 公眾號: Python 實用寶典
# 2022/06/23
import cpca
from cpca import drawer
long_text = "對一個城市的評價總會包含個人的感情。如果你喜歡一個城市,很有可能是喜歡彼時彼地的自己。"\
    "在廣州、香港讀過書,工作過,在深圳買過房、短暫生活過,去北京出了幾次差。"\
    "想重點比較一下廣州、深圳和香港,順帶說一下北京。總的來說,覺得廣州舒適、"\
    "香港精致、深圳年輕氣氛好、北京大氣又粗糙。答主目前選擇了廣州。"
df = cpca.transform_text_with_addrs(long_text, pos_sensitive=True)
drawer.draw_locations(df[cpca._ADCODE], "df.html")

運行的時候可能會報這個錯:

(base) G:\push\20220623>python 1.py
Traceback (most recent call last):
  File "1.py", line 12, in <module>
    drawer.draw_locations(df[cpca._ADCODE], "df.html")
  File "G:\Anaconda3\lib\site-packages\cpca\drawer.py", line 41, in draw_locations
    import folium
ModuleNotFoundError: No module named 'folium'

使用pip安裝即可:

pip install folium

然後重新運行代碼,會在當前目錄下生成 df.html, 雙擊打開,效果如下:

怎麼用,是不是感覺非常方便?以後地點的識別用這個模塊就完全夠了。

還有更多的細節你可以訪問這個項目的Github主頁閱讀,該項目的README完全中文編寫,非常容易閱讀:

https://github.com/DQinYuan/chinese_province_city_area_mapper

如果你無法訪問GitHub,也可以在Python實用寶典公眾號後台回復:cpca 下載完整項目。

我們的文章到此就結束啦,如果你喜歡今天的Python 實戰教程,請持續關注Python實用寶典。

有任何問題,可以在公眾號後台回復:加群,回答相應紅字驗證信息,進入互助群詢問。

原創不易,希望你能在下面點個贊和在看支持我繼續創作,謝謝!

點擊下方閱讀原文可獲得更好的閱讀體驗

Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關注公眾號:Python實用寶典


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved