METADATA 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. Metadata-Version: 2.1
  2. Name: addressparser
  3. Version: 0.2.4
  4. Summary: Chinese Address Parser and Extraction Tool,Chinese Province, City and Area Recognition Utilities
  5. Home-page: https://github.com/shibing624/addressparser
  6. Author: XuMing
  7. Author-email: xuming624@qq.com
  8. License: MIT
  9. Keywords: NLP,Simplified Chinese,Chinese geographic information
  10. Platform: UNKNOWN
  11. Classifier: Intended Audience :: Developers
  12. Classifier: Operating System :: OS Independent
  13. Classifier: Natural Language :: Chinese (Simplified)
  14. Classifier: Natural Language :: Chinese (Traditional)
  15. Classifier: Programming Language :: Python
  16. Classifier: Programming Language :: Python :: 2.7
  17. Classifier: Programming Language :: Python :: 3
  18. Classifier: Topic :: Text Processing
  19. Classifier: Topic :: Text Processing :: Indexing
  20. Classifier: Topic :: Text Processing :: Linguistic
  21. Description-Content-Type: text/markdown
  22. Requires-Dist: jieba
  23. Requires-Dist: pandas
  24. # addressparser
  25. [![PyPI version](https://badge.fury.io/py/addressparser.svg)](https://badge.fury.io/py/addressparser)
  26. [![Downloads](https://pepy.tech/badge/addressparser)](https://pepy.tech/project/addressparser)
  27. [![MIT](https://img.shields.io/badge/MIT-blue.svg)](LICENSE)
  28. ![Python3](https://img.shields.io/badge/Python-3.6-red.svg)
  29. ![Python2.7](https://img.shields.io/badge/Python-2.7-red.svg)
  30. [![GitHub issues](https://img.shields.io/github/issues/shibing624/addressparser.svg)](https://github.com/shibing624/addressparser/issues)
  31. [![Wechat Group](http://vlog.sfyc.ltd/wechat_everyday/wxgroup_logo.png?imageView2/0/w/60/h/20)](#Contact)
  32. 中文地址提取工具,支持中国三级区划地址(省、市、区)提取和级联映射,支持地址目的地热力图绘制。适配python2和python3。
  33. ## Feature
  34. #### 地址提取
  35. ["徐汇区虹漕路461号58号楼5楼", "福建泉州市洛江区万安塘西工业区"]
  36. ↓ 转换
  37. |省 |市 |区 |地名 |
  38. |上海市|上海市|徐汇区|虹漕路461号58号楼5楼 |
  39. |福建省|泉州市|洛江区|万安塘西工业区 |
  40. > 注:“地名”列代表去除了省市区之后的具体地名
  41. #### 数据集:中国行政区划地名
  42. 数据源:爬取自[国家统计局](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/),[中华人民共和国民政局全国行政区划查询平台](http://xzqh.mca.gov.cn/map)
  43. 数据文件存储在:[addressparser/resources/pca.csv](./addressparser/resources/pca.csv),数据为[2021年统计用区划代码和城乡划分代码(截止时间:2021-10-31,发布时间:2021-12-30)](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/index.html)
  44. ## Demo
  45. http://42.193.145.218/product/address_extraction/
  46. ## Install
  47. ```
  48. pip install addressparser
  49. ```
  50. or
  51. ```
  52. git clone https://github.com/shibing624/addressparser.git
  53. cd addressparser
  54. python3 setup.py install
  55. ```
  56. ## Usage
  57. - 省市区提取
  58. 示例[base_demo.py](examples/base_demo.py)
  59. ```python
  60. location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "朝阳区北苑华贸城"]
  61. import addressparser
  62. df = addressparser.transform(location_str)
  63. print(df)
  64. ```
  65. output:
  66. ```
  67. 省 市 区 地名
  68. 0 上海市 上海市 徐汇区 虹漕路461号58号楼5楼
  69. 1 福建省 泉州市 洛江区 万安塘西工业区
  70. 2 北京市 北京市 朝阳区 北苑华贸城
  71. ```
  72. > 程序的此处输入`location_str`可以是任意的可迭代类型,如list,tuple,set,pandas的Series类型等;
  73. > 输出的`df`是一个Pandas的DataFrame类型变量,DataFrame可以非常轻易地转化为csv或者excel文件,Pandas的官方文档:http://pandas.pydata.org/pandas-docs/version/0.20/dsintro.html#dataframe
  74. - 带位置索引的省市县提取
  75. 示例[pos_sensitive_demo.py](examples/pos_sensitive_demo.py)
  76. ```python
  77. location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "朝阳区北苑华贸城"]
  78. import addressparser
  79. df = addressparser.transform(location_str, pos_sensitive=True)
  80. print(df)
  81. ```
  82. output:
  83. ```
  84. 省 市 区 地名 省_pos 市_pos 区_pos
  85. 0 上海市 上海市 徐汇区 虹漕路461号58号楼5楼 -1 -1 0
  86. 1 福建省 泉州市 洛江区 万安塘西工业区 -1 0 3
  87. 2 北京市 北京市 朝阳区 北苑华贸城 -1 -1 0
  88. ```
  89. - 切词模式的省市区提取
  90. 默认采用全文匹配模式,不进行分词,直接全文匹配,这样速度慢,准确率高。
  91. 示例[enable_cut_demo.py](examples/enable_cut_demo.py)
  92. ```python
  93. location_str = ["浙江省杭州市下城区青云街40号3楼"]
  94. import addressparser
  95. df = addressparser.transform(location_str)
  96. print(df)
  97. ```
  98. output:
  99. ```
  100. 省 市 区 地名
  101. 0 浙江省 杭州市 下城区 青云街40号3楼
  102. ```
  103. 可以先通过jieba分词,之后做省市区提取及映射,所以我们引入了切词模式,速度很快,使用方法如下:
  104. ```python
  105. location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "朝阳区北苑华贸城"]
  106. import addressparser
  107. df = addressparser.transform(location_str, cut=True)
  108. print(df)
  109. ```
  110. output:
  111. ```
  112. 省 市 区 地名
  113. 0 上海市 上海市 徐汇区 虹漕路461号58号楼5楼
  114. 1 福建省 泉州市 洛江区 万安塘西工业区
  115. 2 北京市 北京市 朝阳区 北苑华贸城
  116. ```
  117. 但可能会出错,如下所示,这种错误的结果是因为jieba本身就将词给分错了:
  118. ```python
  119. location_str = ["浙江省杭州市下城区青云街40号3楼"]
  120. import addressparser
  121. df = addressparser.transform(location_str, cut=True)
  122. print(df)
  123. ```
  124. output:
  125. ```
  126. 省 市 区 地名
  127. 0 浙江省 杭州市 城区 下城区青云街40号3楼
  128. ```
  129. > 默认情况下transform方法的cut参数为False,即采用全文匹配的方式,这种方式准确率高,但是速度可能会有慢一点;
  130. > 如果追求速度而不追求准确率的话,建议将cut设为True,使用切词模式。
  131. - 地址经纬度、省市县级联关系查询
  132. 示例[find_place_demo.py](examples/find_place_demo.py)
  133. ```python
  134. ## 查询经纬度信息
  135. from addressparser import latlng
  136. latlng[('北京市','北京市','朝阳区')] #输出('39.95895316640668', '116.52169489108084')
  137. ## 查询含有"鼓楼区"的全部地址
  138. from addressparser import area_map
  139. area_map.get_relational_addrs('鼓楼区') #[('江苏省', '南京市', '鼓楼区'), ('江苏省', '徐州市', '鼓楼区'), ('福建省', '福州市', '鼓楼区'), ('河南省', '开封市', '鼓楼区')]
  140. #### 注: city_map可以用来查询含有某个市的全部地址, province_map可以用来查询含有某个省的全部地址
  141. ## 查询含有"江苏省", "鼓楼区"的全部地址
  142. from addressparser import province_area_map
  143. province_area_map.get_relational_addrs(('江苏省', '鼓楼区')) # [('江苏省', '南京市', '鼓楼区'), ('江苏省', '徐州市', '鼓楼区')]
  144. ```
  145. - 绘制echarts热力图
  146. 使用echarts的热力图绘图函数之前需要先用如下命令安装它的依赖(为了减少本模块的体积,所以这些依赖不会被自动安装):
  147. ```
  148. pip install pyecharts==0.5.11
  149. pip install echarts-countries-pypkg
  150. pip install pyecharts-snapshot
  151. ```
  152. 使用本仓库提供的一万多条地址数据[tests/addr.csv](./tests/addr.csv)测试。
  153. 示例[draw_demo.py](examples/draw_demo.py)
  154. ```python
  155. #读取数据
  156. import pandas as pd
  157. origin = pd.read_csv("tests/addr.csv")
  158. #转换
  159. import addressparser
  160. addr_df = addressparser.transform(origin["原始地址"])
  161. #输出
  162. processed = pd.concat([origin, addr_df], axis=1)
  163. processed.to_csv("processed.csv", index=False, encoding="utf-8")
  164. from addressparser import drawer
  165. drawer.echarts_draw(processed, "echarts.html")
  166. ```
  167. output:
  168. ```
  169. 1) processed.csv:1万多地址的省市县提取结果
  170. 2)echarts.html:echarts热力图
  171. ```
  172. 浏览器打开`echarts.html`后:
  173. ![echarts热力图](./docs/echarts.png)
  174. - 绘制分类信息图
  175. 样本分类绘制函数,通过额外传入一个样本的分类信息,能够在地图上以不同的颜色画出属于不同分类的样本散点图,以下代码以“省”作为类别信息绘制分类散点图(可以看到,属于不同省的样本被以不同的颜色标记了出来,这里以“省”作为分类标准只是举个例子,实际应用中可以选取更加有实际意义的分类指标):
  176. 示例[draw_demo.py](examples/draw_demo.py),接上面示例代码:
  177. ```python
  178. from addressparser import drawer
  179. drawer.echarts_cate_draw(processed, processed["省"], "echarts_cate.html")
  180. ```
  181. 浏览器打开输出的`echarts_cate.html`后:
  182. ![echarts分类散点图](./docs/echarts_cate.png)
  183. ## Command line usage
  184. - 命令行模式
  185. 支持批量提取地址的省市区信息:
  186. 示例[cmd_demo.py](examples/cmd_demo.py)
  187. ```
  188. python3 -m addressparser address_input.csv -o out.csv
  189. usage: python3 -m addressparser [-h] -o OUTPUT [-c] input
  190. @description:
  191. positional arguments:
  192. input the input file path, file encode need utf-8.
  193. optional arguments:
  194. -h, --help show this help message and exit
  195. -o OUTPUT, --output OUTPUT
  196. the output file path.
  197. -c, --cut use cut mode.
  198. ```
  199. > 输入文件:`address_input.csv`;输出文件:`out.csv`,省市县地址以`\t`间隔,`-c`表示使用切词
  200. ## Todo
  201. - [x] bug修复,吉林省、广西省部分地址和上海浦东新区等三级区划地址匹配错误
  202. - [x] 增加定期从民政局官网,统计局官网爬取最新省市县镇村划分的功能,延后,原因是2018年后官网未更新
  203. - [x] 解决路名被误识别为省市名的问题,eg"天津空港经济区环河北路80号空港商务园"
  204. - [x] 添加省市区提取后的级联校验逻辑
  205. - [x] 大批量地址数据,准召率效果评估
  206. - [x] 补充香港、澳门、台湾三级区划地址信息
  207. # Contact
  208. - Issue(建议):[![GitHub issues](https://img.shields.io/github/issues/shibing624/text2vec.svg)](https://github.com/shibing624/text2vec/issues)
  209. - 邮件我:xuming: xuming624@qq.com
  210. - 微信我:
  211. 加我*微信号:xuming624, 备注:个人名称-公司-NLP* 进NLP交流群。
  212. <img src="docs/wechat.jpeg" width="200" />
  213. ## Citation
  214. 如果你在研究中使用了**addressparser**,请按如下格式引用:
  215. APA:
  216. ```latex
  217. Xu, M. Addressparser: Chinese address parser toolkit (Version 0.2.4) [Computer software]. https://github.com/shibing624/addressparser
  218. ```
  219. BibTeX:
  220. ```latex
  221. @software{Xu_Addressparser_Chinese_address,
  222. author = {Xu, Ming},
  223. title = {{Addressparser: Chinese address parser toolkit}},
  224. url = {https://github.com/shibing624/addressparser},
  225. version = {0.2.4}
  226. }
  227. ```
  228. ## License
  229. 授权协议为 [The Apache License 2.0](/LICENSE),可免费用做商业用途。请在产品说明中附加addressparser的链接和授权协议。
  230. ## Contribute
  231. 项目代码还很粗糙,如果大家对代码有所改进,欢迎提交回本项目,在提交之前,注意以下两点:
  232. - 在`tests`添加相应的单元测试
  233. - 使用`python pytest`来运行所有单元测试,确保所有单测都是通过的
  234. 之后即可提交PR。
  235. ## Reference
  236. * [chinese_province_city_area_mapper](https://github.com/DQinYuan/chinese_province_city_area_mapper)
  237. * [smartParsePro](https://github.com/wzc570738205/smartParsePro)