Skip to main content

全国五级地址查询

Project description

PyUnit-Address

字符串地址查询,支持自定义地址词库

安装

pip install pyunit-address

说明

该算法有两个词库,一个是全国五级地址,统计时间是2019年。这个地址库是默认加载。不能删除也不能替换。
如果需要提取非规则的地址,则实用深度模型:  https://github.com/PyUnit/pyunit-ner
建议两者一起使用,互相补足。

测试

from pyunit_address import *
import time

address = Address(is_max_address=True)
address.add_vague_text(['红花岗', '花溪']) # 加入地址名称
address.add_vague_text('贵州省-遵义市-遵义县-虾子镇-乐安村-乐石台') # 加入一串有顺序的地址
address.add_vague_text('自定义词库.txt')  # 加载词库文件,词库文件中的每一行,可以是一串顺序地址,也可以是一个地址

def all_test():
    string_ = '我家在红花岗,你家在贵州贵阳花溪区,他家在贵州省遵义市花溪区'
    finds = find_address(address, string_)
    for find in finds:
        print()
        print('地址', find)
        print('补全地址', supplement_address(address, find))
        print('纠错地址', correct_address(address, find))
        print('--------------------------')

# 地址 红花岗
# 补全地址 ['贵州省-遵义市-红花岗区']
# 纠错地址 贵州省-遵义市-红花岗区
# --------------------------
# 
# 地址 贵州贵阳花溪区
# 补全地址 ['贵州省-贵阳市-花溪区']
# 纠错地址 贵州省-贵阳市-花溪区
# --------------------------
# 
# 地址 贵州省遵义市花溪区            注:这个地址是错误的
# 补全地址 []                      注:错误的地址无法补全
# 纠错地址 贵州省-贵阳市-花溪区      注:错误的地址被纠正为对的地址
# --------------------------


if __name__ == '__main__':
    start = time.time()
    all_test()
    print(time.time() - start)  # 0.0002001047134399414秒

查询地址

from pyunit_address import Address,find_address

def test():
    address = Address(is_max_address=True)

    # 添加词库,可以是一个字符串、可以是列表字符串、可以是词库文件,一个词语占一行
    address.add_vague_text('红花岗')   # 在默认词库上追加地址词库
    address.add_vague_text('贵州省-遵义市-遵义县-虾子镇-乐安村') # 添加补全地址
    address.add_vague_text(['花溪', '贵州省-遵义市-遵义县-虾子镇-乐安村'])  # 加载词库列表,替换默认词库
    address.add_vague_text('自定义词库.txt')  # 加载词库文件,替换默认词库
    af = find_address(address,'我家在贵州遵义红花岗区')
    print(af)

if __name__ == '__main__':
    test()

自动补全地址:输入一句话

from pyunit_address import Address,supplement_address

def test_supplement_address():
    address = Address(is_max_address=True)
    asu = supplement_address(address,'我家在遵义县') # [贵州省-遵义市-遵义县]
    print(asu)

if __name__ == '__main__':
    test_supplement_address()

自动纠错地址

from pyunit_address import Address,correct_address

def correct_address_test():
    address = Address(is_max_address=True)
    print(correct_address(address, '贵州省遵义市花溪区'))  # 贵州省-贵阳市-花溪区

if __name__ == '__main__':
    correct_address_test()

Docker部署

docker pull jtyoui/pyunit-address
docker run -d -p 2312:5000 pyunit-time

寻找地址的请求参数

参数名 类型 是否可以为空 说明
data string YES 输入一句带有地址的句子
is_max_address bool No 是否开启最大粒度寻词
ignore_special_characters bool NO 是否开启过滤特殊符号

请求示例

Python3 Requests测试

import requests

url = "http://127.0.0.1:2312/pyunit/address/find_address"
data = {
    'data': '我在贵州贵阳观山湖公园',
    'is_max_address': False,
    'ignore_special_characters': True
}
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response = requests.post(url, data=data, headers=headers).json()
print(response)

返回结果

{
	"code": 200,
	"result": ["贵州", "贵阳", "观山湖"]
}

自动补全请求参数

参数名 类型 是否可以为空 说明
data string YES 输入一句带有地址的句子
is_max_address bool No 是否开启最大粒度寻词
is_order bool NO 是否开启排序功能

请求示例

Python3 Requests测试

import requests

url = "http://127.0.0.1:2312/pyunit/address/supplement_address"
data = {
    'data': '我在贵州贵阳观山湖',
    'is_max_address': True,
    'is_order': True
}
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response = requests.post(url, data=data, headers=headers).json()
print(response)

返回结果

{
	"code": 200,
	"result": ["贵州省-贵阳市-观山湖区"]
}

自动纠错请求参数

参数名 类型 是否可以为空 说明
data string YES 输入一句带有地址的句子

请求示例

Python3 Requests测试

import requests

url = "http://127.0.0.1:2312/pyunit/address/correct_address"
data = {
    'data': '我在贵州遵义观山湖'   # 遵义下面没有观山湖区,贵州下的观山湖区只有贵阳有,如果有多个则返回list
}
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response = requests.post(url, data=data, headers=headers).json()
print(response)

返回结果

{
	"code": 200,
	"result": ["贵州省-贵阳市-观山湖区"]
}

增加地址词库请求参数

参数名 类型 是否可以为空 说明
data string YES 输入一句带有地址的句子
separators string NO 分割词语的分隔符

请求示例

Python3 Requests测试

import json
import requests

url = "http://127.0.0.1:2312/pyunit/address/add"
data = {
    'data': json.dumps(['贵州省-贵阳市-观山湖区-观山湖公园', '金融大街', '小吃城']),
    'separators': '-'
}
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response = requests.post(url, data=data, headers=headers).json()
print(response)

删除地址词库请求参数

参数名 类型 是否可以为空 说明
data string YES 输入一句带有地址的句子

请求示例

Python3 Requests测试

import json

import requests

url = "http://127.0.0.1:2312/pyunit/address/del"
data = {
    'data': json.dumps(['金融大街', '小吃城']),
}
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response = requests.post(url, data=data, headers=headers).json()
print(response)

返回结果

{
	"code": 200,
	"result": "del success"
}

TODO

  • 自动寻找最长地址长度
  • 全国五级地址新词库
  • 支持自定义地址词库
  • 不支持非规则地址
  • 支持地址自动补全
  • 支持快速高效搜索
  • 支持纠错地址

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyunit_address-2020.6.19.tar.gz (2.3 MB view hashes)

Uploaded Source

Built Distribution

pyunit_address-2020.6.19-py3-none-any.whl (2.3 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page