吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1437|回复: 19
收起左侧

[求助] 求助,快速匹配地址所在的居委会

[复制链接]
狂笑一君 发表于 2022-4-15 12:12
由于工作需求,我每天都需要把一堆填写的不怎么规范的地址通过地址册中查找出门牌号所属居委,找了个大佬写了个python程序,但是发现两个问题,一个是电脑系统,办公室现在的电脑基本是win7和win10,大佬在开发的时候用的平台是win10的python3.9,导致办公室的win7无法使用,我太菜了,不会改;第二个是,匹配的结果达不到理想状态,即使手动清洗了地址剩下了很容易分辨的地址后再使用程序进行匹配也不行,导致还是得人工去匹配。希望有大佬可以指教或者帮忙完善一下程序。
地址册是记录了所有归属居委的门牌地址,所需要的匹配的地址里面不一定全是在辖区范围内的门牌,也就是说有些地址不一定是我们辖区内的,最主要的问题是,有些人填些地址的时候不一定按照正常思路来填,我举个几个栗子:规范地址:广州市越秀区解放北路盘福横18号,不规范地址:越秀区解放北盘福横18号003,规范地址:广州市越秀区第一津街866号,不规范地址:越秀区第一津866号,规范地址:广州市越秀区司马坊街999号,不规范地址:越秀区西华路司马坊999号。

题外:现在每天都要收表然后拼表,数量繁多,大佬有没有什么经验方法可以分享一下?用过在线填报给他们多个部门填,但是,有些笨蛋部门会在填信息的时候把别人填写的资料删掉还自己不知道的所以放弃了。选择了稳健的人工收表拼表。目前手上的资源有个甲骨文的免费服务器。


以下是大佬写的python代码:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# __author__ = '__zx-coder__'
import re
from openpyxl import Workbook, load_workbook
import cpca

class Handler:
    def __init__(self):
        self.input_filename = './测试.xlsx' # 输入文件
        self.book_filename = './地址册.xlsx' # 地址册
        self.input_idx = 0
        self.output_filename = './测试1.xlsx' # 输出文件
        self.wb = Workbook()
        self.ws_writer = self.wb.active

    def reader(self, path):
        wb = load_workbook(path)
        ws = wb.active
        rows = ws.rows
        return [[col.value for col in row] for row in rows]
    def start(self):
        if input('请确认输入文件是:测试.xlsx文件吗?Y:确认;任意键:否认,重新更名. :') == 'Y':
            input_col = input('请输入该文件所在地址信息列,例:A,B:')
            uppercase_list = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
            self.input_idx = uppercase_list.index(input_col) if input_col in uppercase_list else 0
    def handle_input_file(self):
        addrList = self.reader(self.input_filename)
        addListT = list(map(list, zip(*addrList)))
        df = cpca.transform(addListT[0])
        # 越秀区判断
        iloc_2 = df.iloc[:, [2]]
        _addr_list = [item[0] for item in iloc_2.values.tolist()]
        iloc_3 = df.iloc[:, [3]]
        _addr_list_3 = [item[0] for item in iloc_3.values.tolist()]
        # 清洗越秀
        clear_list = []
        for idx, qu in enumerate(_addr_list):
            if qu and qu == '越秀区':
                clear_list.append(_addr_list_3[idx])
            else:
                clear_list.append('')
        # print(clear_list)
        # 号
        clear_list = [search.group() if (search := re.search('.*?号', x)) else x for x in clear_list]
        for idx, item in enumerate(addrList):
            item.append(clear_list[idx])
        # 结构:···原来的数据, 拆分后的地址
        return addrList
    def handle_book_file(self):
        book = self.reader(self.book_filename)
        bookT = list(map(list, zip(*book)))
        return bookT
    def main(self):
        self.start()
        addrList = self.handle_input_file()
        #写入第一行
        first_line = addrList[0]
        self.ws_writer.append(first_line)
        addrList = self.handle_input_file()[1:]
        book_list, COM_LIST = self.handle_book_file()
        book_list = book_list[1:]
        COM_LIST = COM_LIST[1:]
        for pure_idx, item in enumerate(addrList):
            print(f'正匹配 ··· {item[self.input_idx]}')
            pure_addr = item[-1]
            for book_idx, book in enumerate(book_list):
                if book.strip() == pure_addr.strip():
                    item[-1] = COM_LIST[1:][book_idx]
                    break
            if '居委会' not in item[-1]:
                item[-1] = ''
            self.ws_writer.append(item)
        self.wb.save(self.output_filename)
        print('执行结束!')

if __name__ == '__main__':
    handler = Handler()
    # print(handler.reader())
    handler.main()


下面是地址册和地址。
「text.xlsx」https://www.aliyundrive.com/s/Cxug1o2EXu5 提取码: z50d
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

echocccc 发表于 2022-4-15 14:54
每个居委设置好关键字,对地址字符串查找文本,找到关键字就归属到这个居委会

例如
规 范 地 址 :广州市越秀区解放北路盘福横18号
不规范地址:越秀区解放北盘福横18号003

设置福横为所在A居委会的关键字
当发现地址字符串中有福横就归属到A居委会名下。

这样就筛选出了99%的了,剩下的奇葩建议每个居委分几个让他们手动归属好再反馈给你
Perry 发表于 2022-4-15 16:13
asky800 发表于 2022-4-15 16:15
做一个规范的地址册给他们

比如广州市越秀区解放北路盘福横18号,把(广州市-越秀区)这两个设置成可选择项,后面的详细地址才是他们自己填写的


话说这种活你压下去居委那边干不就行了,让他们按规范弄好再给你。
zpy2 发表于 2022-4-15 16:30
有些笨蛋部门会在填信息的时候把别人填写的资料删掉还自己不知道的

不可能吧。
在线表单,只能新增记录,或修改自己的记录,如下。
https://club.excelhome.net/forum.php?mod=viewthread&tid=1520437&mobile=&_dsign=b91b51b2
zpy2 发表于 2022-4-15 16:32
zpy2 发表于 2022-4-15 16:30
有些笨蛋部门会在填信息的时候把别人填写的资料删掉还自己不知道的

不可能吧。

另外,可以像填快递单一样,自动解析地址。可以用高德地图或百度地图逆向地理解析api
zpy2 发表于 2022-4-15 16:38
zpy2 发表于 2022-4-15 16:32
另外,可以像填快递单一样,自动解析地址。可以用高德地图或百度地图逆向地理解析api

广州市越秀区解放北路盘福横18号,不规范地址:越秀区解放北盘福横18号003

一种是填写时进行数据校验,路名必须在一个固定列表内。
还有,就是后期进行模糊匹配最多相似字符串。
清江堤畔 发表于 2022-4-16 09:53
本帖最后由 清江堤畔 于 2022-4-16 10:07 编辑

假设整个越秀区共有居委会222个,每整条街、路、巷均属同一社区居委会,如整个“解放北路”是在一个社区居委会内,应该做一个居委会所属街、路、巷的列表,假如“解放北路”一般简称“解放北”是唯一的,则可以再进行简化。这前置工作做得好,后期就会省时省力。

这其实就是沙发所说的,对于一条路分属2个社区的就要后期调整了。
 楼主| 狂笑一君 发表于 2022-4-16 13:02
echocccc 发表于 2022-4-15 14:54
每个居委设置好关键字,对地址字符串查找文本,找到关键字就归属到这个居委会

例如

通常这些老城区一个路名会出现两个或以上的居委,只能靠路名+门牌号来分辨,属于奇葩划分太多了
 楼主| 狂笑一君 发表于 2022-4-16 13:07
asky800 发表于 2022-4-15 16:15
做一个规范的地址册给他们

比如广州市越秀区解放北路盘福横18号,把(广州市-越秀区)这两个设置成可选 ...

填地址给我们的公安那边,不是每个人都对地址有很清楚的认识,只能是居民那边怎么说他怎么记,居民出来的地址大部分是清晰,人工可以很容易分辨出来属不属于街道辖区,但是要准确到居委范围比较难,那个py已经可以分辨部分出来的了,只是不够理想,希望能匹配出70%,现在大概只能匹配出40%左右。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-29 05:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表