Sign inSign up

jtyoui/pyunit-address

By jtyoui

•Updated over 5 years ago

字符串地址查询,支持自定义地址词库,解析地址,地址识别,地址抽取,中文地址.

Image
0

1.5K

jtyoui/pyunit-address repository overview

⁠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
⁠寻找地址的请求参数
参数名类型是否可以为空说明
datastringYES输入一句带有地址的句子
is_max_addressboolNo是否开启最大粒度寻词
ignore_special_charactersboolNO是否开启过滤特殊符号
⁠请求示例
⁠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": ["贵州", "贵阳", "观山湖"]
}
⁠自动补全请求参数
参数名类型是否可以为空说明
datastringYES输入一句带有地址的句子
is_max_addressboolNo是否开启最大粒度寻词
is_orderboolNO是否开启排序功能
⁠请求示例
⁠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": ["贵州省-贵阳市-观山湖区"]
}
⁠自动纠错请求参数
参数名类型是否可以为空说明
datastringYES输入一句带有地址的句子
⁠请求示例
⁠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": ["贵州省-贵阳市-观山湖区"]
}
⁠增加地址词库请求参数
参数名类型是否可以为空说明
datastringYES输入一句带有地址的句子
separatorsstringNO分割词语的分隔符
⁠请求示例
⁠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)
⁠删除地址词库请求参数
参数名类型是否可以为空说明
datastringYES输入一句带有地址的句子
⁠请求示例
⁠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

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

Tag summary

Content type

Image

Digest

Size

46.2 MB

Last updated

over 5 years ago

docker pull jtyoui/pyunit-address