V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SZhan
V2EX  ›  Java

如何从一段自然语言中识别地址信息?

  •  
  •   SZhan · 2023-09-25 10:50:10 +08:00 · 8447 次点击
    这是一个创建于 423 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近有一个很折腾人的需求。由于推送过来的原始数据里缺少客户需要的字段,所以就产生了一个需求,需要根据一段工单内容,识别涉及的区域、街道、所属社区。我开发又优化了几版,都达不到客户想要的效果。工单的内容因为是人编写的、无规则的,所以就不知道会在哪里产生地址信息:
    例 1:自己是新吴区鸿山街道鸿*苑六二期 xxx 号 xxxx(隐私处理)的住户,想在屋面里面修葺两个小房间,目前就修了一个门框,xx 就直接来拆掉了,但是其他人家都造好了,都已经住进去了,都没有拆。服务对象表示自己家这里有留消防通道,其他人家都没有留。服务对象表示鸿*苑六二期 xxxxxx 号楼十八层的业主(无法具体提供信息,但表示这些楼栋 xxxxx 、xxxx 室都存在该情况),已经造好通水电入住,自己认为处理部门应该一视同仁对待。
    例 2:服务对象来电反映目前通*新村 1 号附近有两条流浪狗将自己车辆的保险杠咬坏,拨打 110 反映表示需要 xx 协助 xx 流浪狗。
    例子是这样的,地址信息可能随时出现在内容中,有可能会直接有区、街道、社区信息,也可能仅仅只有一个地点(如例 2 ),需要识别出具体地点,再反编地理信息获取所属区、街道、社区。所以就整的很困难。我目前是这样处理的:
    先直接查所有的区、街道、社区信息,到工单内容中循环比对匹配是否包含,抓出来明显提到的区、街道、社区(例 1 类似的内容)。如果像例 2 那样内容只提到了一个地点,我的处理是,获取了一批城市的所有 POI 点位(总数几十 w 条,太多了),然后把小区、商场综合体、个体店铺、城市基础设施等一些基础的城市地理 POI 点位去和内容比对 POI 名称是否在内容中包含,但是效果就是识别比对的成功率很低,不知道有没有啥好的解决办法,还是基本上就是无法实现的需求。想向大神门求助!
    第 1 条附言  ·  2023-09-25 11:55:10 +08:00
    真的很感谢帖子里各位大佬们提出的建议,这个需求我已经磨了一个多月了,你们敢想象,这个功能所属的项目,才几 w 块。如果说对接 chatgtp 高德 百度这些三方厂家,那钱怕是只能让我自己掏了。其实本身过来咨询各位的意见,是想了解能否仅仅通过我自己去设计、实现这些功能,但是看起来,很难很难。讲真,别碰 zf 项目,一群领导总想教人去做功能,在他们看来,这就是一简单的识别,“为什么这个单子里提到了 xx 小区,你们识别不到呢”,“你们能不能做到它提了某个小区,就可以抓取到他”,“这个识别率怎么那么低”...听了太多,累了... 不忍心去和各位说这样那样的方案不行,我自己可以去继续琢磨琢磨实现,但是用在这个项目上,它不配。再次谢谢各位啦!我一条一条都会好好看的。后续准备去提实现不了,找原数据提供方重新对接吧,做不到就做不到了。
    113 条回复    2023-09-27 00:01:20 +08:00
    1  2  
    libaili
        1
    libaili  
       2023-09-25 10:55:21 +08:00
    用 chatgpt 试试?
    bybyte
        2
    bybyte  
       2023-09-25 10:56:44 +08:00
    1.chatgpt 结合 prompt
    2.自己生成数据和标签,训练一个 nlp 模型
    SZhan
        3
    SZhan  
    OP
       2023-09-25 11:00:19 +08:00
    @libaili 有想过,但是用在政府项目上似乎不太合适 ,我一直觉得这种需求就是无理需求,奈何就是一群难搞的政府领导
    iv2ex
        4
    iv2ex  
       2023-09-25 11:00:44 +08:00
    原始数据不是 你们平台产生的吗
    SZhan
        5
    SZhan  
    OP
       2023-09-25 11:07:19 +08:00
    @iv2ex 原始数据不是的,是工单受理平台推送过来的,所以就不包含区域、街道、社区。尝试去对接,对方说没有,所以客户就要求我们去内容中做识别,他们也不想用自己的人去做人工匹配
    ho121
        6
    ho121  
       2023-09-25 11:09:37 +08:00 via Android
    印象中高德地图百度地图有这样的服务
    SZhan
        7
    SZhan  
    OP
       2023-09-25 11:11:01 +08:00
    @bybyte 第一种做不到呢,服务器、网络环境都是在政务网。然后第二种方案,我去了解看看。所以说,这一块对于 Java 语言来说,基本上是做不到的对吧
    lopssh
        8
    lopssh  
       2023-09-25 11:11:44 +08:00
    这不就是 NLP 里头的"实体识别"么?
    zyxk
        9
    zyxk  
       2023-09-25 11:12:15 +08:00
    难道这个不应该让受理平台直接登记上吗? 像例 2 ,即使你程序能识别到 *新村 1 号, 也可能本地有多个这样的地址,即使人工也不知道是哪个地址,机器怎么识别出来。
    SZhan
        10
    SZhan  
    OP
       2023-09-25 11:13:25 +08:00
    @ho121 嗯嗯,我第一时间去翻过他们的文档的,高德百度是对一个地址进行地理编码,根据经纬度返回信息或者根据地址进行标准化地址的查询。如果说把这样一段话丢进去让他们识别的话,就整不出来了
    jetflyL
        11
    jetflyL  
       2023-09-25 11:14:58 +08:00
    百度的有识别地址的接口,但是价格那些就 不清楚了,https://ai.baidu.com/tech/nlp_apply/address?_=1695611454087 ,登录后有个试用的输入框,可以粘贴你的文本测试下效果
    aaramsiconm1
        12
    aaramsiconm1  
       2023-09-25 11:15:11 +08:00   ❤️ 1
    命名实体识别算法( NER )是一种自然语言处理技术,用于从文本中识别出具有特定意义的实体,如人名、组织机构、地名、时间、日期等。 命名实体识别算法旨在自动化地识别文本中的实体,以便进行更高级的文本分析和信息提取
    SZhan
        13
    SZhan  
    OP
       2023-09-25 11:19:04 +08:00
    @zyxk 是的呀,这个问题那肯定是的,同样的地点,在全市内是肯定会有多个重名的,我目前的匹配逻辑里已经有这个问题的,所以我这样的情况只能通过区(如果有)去筛掉,然后剩下的 list.get(0)... 受理平台去跟他们对接,他们说这玩意也做不到,他们没有这个字段。
    SZhan
        14
    SZhan  
    OP
       2023-09-25 11:19:32 +08:00
    @jetflyL 我去看下哈
    jetflyL
        15
    jetflyL  
       2023-09-25 11:20:49 +08:00
    registerrr
        16
    registerrr  
       2023-09-25 11:28:35 +08:00
    ME:
    "自己是新吴区鸿山街道鸿*苑六二期 xxx 号 xxxx(隐私处理)的住户,想在屋面里面修葺两个小房间,目前就修了一个门框,xx 就直接来拆掉了,但是其他人家都造好了,都已经住进去了,都没有拆。服务对象表示自己家这里有留消防通道,其他人家都没有留。服务对象表示鸿*苑六二期 xxxxxx 号楼十八层的业主(无法具体提供信息,但表示这些楼栋 xxxxx 、xxxx 室都存在该情况),已经造好通水电入住,自己认为处理部门应该一视同仁对待。" 这段话中存在几个地址,帮我列出来
    ChatGPT:
    在提供的文本中,存在以下地址信息:
    自己是新吴区鸿山街道鸿*苑六二期的住户。
    鸿*苑六二期 xxx 号楼(具体的房号已经隐私处理)。
    鸿*苑六二期 xxxxxx 号楼十八层的业主(具体的房号已经隐私处理)。
    请注意,由于隐私处理,某些地址的具体细节已经被替换成了"xxx"或进行了隐私保护处理。
    registerrr
        17
    registerrr  
       2023-09-25 11:29:32 +08:00
    ME:
    只把地址列出来

    ChatGPT:
    以下是文本中列出的地址信息:
    1. 新吴区鸿山街道鸿*苑六二期
    2. 鸿*苑六二期 xxx 号
    3. 鸿*苑六二期 xxxxxx 号楼十八层(具体的房号已经隐私处理)
    hldnpqzzy
        18
    hldnpqzzy  
       2023-09-25 11:30:07 +08:00
    LBS 和 NER 结合的需求
    看看高德有没有地址解析能力,没有的话看看阿里云腾讯云的 NER 能力是否符合
    你刚刚说的召回全城市的 POI 太多了,试着用 GeoHash6 之类的方法缩减一下
    https://lbs.amap.com/product/smart-address 高德这里有地址抽取能力 应该是你说的那个
    SZhan
        19
    SZhan  
    OP
       2023-09-25 11:30:45 +08:00
    @jetflyL #15 其实还是不太稳定的呢
    zjuster
        20
    zjuster  
       2023-09-25 11:34:50 +08:00   ❤️ 2
    @SZhan

    这个思路没问题,但是在调用此接口之前,你需要用 NER (命名实体识别)的技术,讲文本中的地址、街道分离,然后通过不同层级的地址(城市、道路名称、小区名称等等)来做一个概率匹配,最后得到 1-3 条候选方案(可以打分)。

    最后用这几条结果去尝试高德/百度地图的地址接口来获得反馈,能帮你再处理一次。 (但如果是大规模应用的话,接口可能是要收费的)。

    当然,命名实体识别,需要你首选有一套国内的地址库(省份、城市、区(县)、街道(乡/村)、社区、小区)这样的一个层级的地址,然后在此基础上做一个别名的语料库(比如黔、京、沪)。
    之前做这个行业的时候,也一直没有找到特别官方的数据库,是自己捞了一份数据再请外包清洗的。这个数据还要更新,也是有点点维护成本。比较麻烦的是两个字的重复。(比如杭州有湖州街、上海有河南街),所以在你请求的时候,一定是要有预警( context )限制的。(我们当时是用的图谱,每个实体都是有类型限制的)

    ------
    再补充一下,百度搜索、夸克搜索 这两个平台,内部都做过我上面整个过程的业务的(地址栏搜地址,给出地图卡片),但不清楚是否对外开放商用接口,理论上是有的。

    你可以模拟下用户访问 query 查询这两个网站的 web 端测试一下。
    crissx
        21
    crissx  
       2023-09-25 11:36:20 +08:00
    这是 chatgpt 擅长的
    可以考虑购买国内代理的一些第三方接口
    registerrr
        22
    registerrr  
       2023-09-25 11:37:32 +08:00
    @registerrr
    ME:
    “自己是康桥悦然园 1 期业主,小区 9 号楼前的变电站附近将建造垃圾分类房,服务对象表示垃圾房的位置在沙盘上没有,在合同书上规划在 8 号楼附近。反映后,区城管、街道坏卫、街道、消防都认为垃圾分类房位置不合理,要求开发商拆除,但开发商以区城管未下发红头文件为由迟迟不愿拆除。”

    ChatGPT
    在提供的文本中,存在以下地址信息:

    1. 康桥悦然园 1 期 - 这是小区的名称。
    2. 9 号楼 - 小区中的楼号。
    3. 8 号楼 - 小区中的楼号。
    请注意,这些地址信息用于描述文本中的地点和情境。



    ME:
    服务对象来电反映广益佳苑一期 38 号楼至 0 号楼北侧有业主通为不牵绳,存在安全隐患,服务对象不认可,自己已经反映小区流浪狗的问题,了解到流浪狗是城管负责,目前需要公安同处理业主遛狗不牵绳的问题。

    ChatGPT
    在提供的文本中,存在以下地址信息:

    1. 广益佳苑一期 - 这是小区的名称。
    2. 38 号楼至 0 号楼北侧 - 描述了在小区内的具体位置。
    3. 公安 - 涉及到处理业主遛狗不牵绳问题的相关部门。
    这些地址信息用于描述文本中的地点和情境。


    ChatGPT 依旧稳如老狗啊,可惜不能用
    SZhan
        23
    SZhan  
    OP
       2023-09-25 11:38:38 +08:00
    @lopssh nlp 我只用过他的产物,像分词器,分词器将一段话分开,然后丢到 poi 库里比对,结果带来的缺点是,比对不到内容里真正属于它的那个 poi 地点
    zjuster
        24
    zjuster  
       2023-09-25 11:39:32 +08:00   ❤️ 1
    再补充一下 “获取了一批城市的所有 POI 点位” 这个想法我们在项目实施中也是考虑过,并且爬取过一些邮政网站的地址库。最后放弃了,脏数据太多,时效性也很差。

    你给的 demo 里,最大的问题是单地址信息 POI 的输入。 如果是这样的输入,搜索引擎一定会按照自己的相关性算分额外排序,很难命中第一条结果。 而你通过后台接口(非 web ),有可能获得更多的候选结构自己筛选。

    当然最好的方法是,你既然是给某个地区的机关试用的,访问默认带上地区限制试试。 (有很多大开发商的楼盘是全国都有重名的)。
    ---

    前面没有给具体的案例,如果是你说的这种反馈的话,NER 感觉是不合适的。

    要不要考虑下菜鸟和邮政平台的地址,他们结合访问的 IP ,可以给出更合理的地址建议。
    zjuster
        25
    zjuster  
       2023-09-25 11:42:05 +08:00   ❤️ 2
    NER 要用好,前提是有好的文本分析和分词器,所以我们之前搞搜索的时候,最难的分词已经被解决了。
    所以我前面的回复可能不适合楼主的问题,毕竟前置要求太多了,成本也就太高了。

    建议还是尝试直接找第三方的接口服务来解决。 建议试试菜鸟、京东、甚至其他大型快递物流公司的地址接口,包括邮政管理部分,可能也有类似的标准接口。
    me1onsoda
        26
    me1onsoda  
       2023-09-25 11:45:08 +08:00
    狗屁通不让用,其他国产模型呢
    fengzhongdeyihan
        27
    fengzhongdeyihan  
       2023-09-25 11:45:15 +08:00
    楼主试试看这个.https://wangzc.wang/smartParsePro/
    SZhan
        28
    SZhan  
    OP
       2023-09-25 11:52:39 +08:00   ❤️ 1
    真的很感谢帖子里各位大佬们提出的建议,这个需求我已经磨了一个多月了,你们敢想象,这个功能所属的项目,才几 w 块。如果说对接 chatgtp 高德 百度这些三方厂家,那钱怕是只能让我自己掏了。其实本身过来咨询各位的意见,是想了解能否仅仅通过我自己去设计、实现这些功能,但是看起来,很难很难。讲真,别碰 zf 项目,一群领导总想教人去做功能,在他们看来,这就是一简单的识别,“为什么这个单子里提到了 xx 小区,你们识别不到呢”,“你们能不能做到它提了某个小区,就可以抓取到他”,“这个识别率怎么那么低”...听了太多,累了... 不忍心去和各位说这样那样的方案不行,我自己可以去继续琢磨琢磨实现,但是用在这个项目上,它不配。再次谢谢各位啦!我一条一条都会好好看的。后续准备去提实现不了,找原数据提供方重新对接吧,做不到就做不到了。
    SZhan
        29
    SZhan  
    OP
       2023-09-25 12:04:00 +08:00
    @zjuster #20 是的 我目前往 poi 库匹配这个方向走 就算有匹配上的 也因为脏数据太多 很多都是匹配到一些奇奇怪怪的地址,您看图;然后我们是做市局的项目,虽然是市,但是市内还有很多重复的,比如有的一条路,全市就有 17 条重复的
    theniupa
        30
    theniupa  
       2023-09-25 12:17:48 +08:00   ❤️ 1
    按我理解可以输出一份实现方案和相应的成本预算。推动让商务去沟通解决。
    除非是标书黑纸白字明确写了在当前的合同范围内要实现这个功能。
    要说能不能实现,当然能实现,最终还要看你们项目成本,如果是个内网环境这一套东西还挺多的
    chitanda
        31
    chitanda  
       2023-09-25 13:45:59 +08:00
    不好用 ChatGPT 的话,完全可以换成国内的大模型呀。据我所知,文心一眼,通义千文这些早就备案过了
    iridium945
        32
    iridium945  
       2023-09-25 13:49:15 +08:00
    整个项目才几万块就想自己造轮子?有点搞笑了兄弟…当我看到你居然认真造了一个多月就更绷不住了…
    wateryessence
        33
    wateryessence  
       2023-09-25 14:07:36 +08:00 via iPhone
    opennlp 做 ner 任务,再手动加点规则就差不多了
    x9sec
        34
    x9sec  
       2023-09-25 14:11:52 +08:00
    JioNLP 试试。
    e7
        35
    e7  
       2023-09-25 14:12:39 +08:00
    一个月几百块你玩什么命啊
    bybyte
        36
    bybyte  
       2023-09-25 14:14:26 +08:00
    @SZhan 纯 java 估计很难,java 做个前端可以
    SZhan
        37
    SZhan  
    OP
       2023-09-25 14:20:46 +08:00
    @theniupa 嗯嗯会说的,这个项目不在规划标书里,是另外提出的,本来说没有钱的,后来拨了点款。
    yinmin
        38
    yinmin  
       2023-09-25 14:21:34 +08:00 via iPhone
    这个只能靠 ai 去解决,要么接入国内的 ai 大模型,要么自建 ai 模型,靠关键词匹配是走不通的
    paopjian
        39
    paopjian  
       2023-09-25 14:26:16 +08:00
    我记得 paddlenlp 里有地名识别的项目,你要是自己用可以偷偷用,千万别公开,千万别让领导试用,能人工解决的问题全去人工解决
    SZhan
        40
    SZhan  
    OP
       2023-09-25 14:28:09 +08:00
    @iridium945 可是现实就是,在现场开发,带头的项目经理也不会去拒绝需求,都是顺着他们。然后汇报的时候稍微提出一点和他们相反的意见,就会面临大量的反驳,以及不好的脸色。就是这样,,,围绕这个识别的问题就说了一个多月。心累...
    SZhan
        41
    SZhan  
    OP
       2023-09-25 14:31:05 +08:00
    @paopjian 放心好了 不准备推进了 大模型这种除非他们付钱 我们对接
    lsk569937453
        42
    lsk569937453  
       2023-09-25 14:34:04 +08:00   ❤️ 1
    目前大厂都解决不了的问题,LZ 居然想凭借一己之力就解决掉,我觉得做功能之前还是评估一下这个功能的可行性吧。

    你看美团/饿了吗/京东/淘宝,无一不是在源头上解决这个问题的。即创建新地址的时候直接从你给的省/市/区/小区/楼层里面去选择,这样是最简单的,成功率还是 100%。

    你让用户手写一个地址,你用程序去识别这个地址所属的省市区,我就直说了,目前没有公司能做到这个事情。
    i1258403843
        43
    i1258403843  
       2023-09-25 14:47:08 +08:00
    最简单的方法还是在发工单的时候加上定位
    SZhan
        44
    SZhan  
    OP
       2023-09-25 14:52:00 +08:00
    @lsk569937453 是的,您说的没错,但凡有个需求评估/评审,也不至于在这个鬼需求上耗这么久。但是这整个大的平台,从开发阶段开始以来,都没有评审的过程。
    wqhui
        45
    wqhui  
       2023-09-25 15:15:50 +08:00
    几 w 还想有自然语言处理?跑模型识别有识别错误的问题,而且消耗计算机资源也大很多,项目掏钱吗
    xrzxrzxrz
        46
    xrzxrzxrz  
       2023-09-25 15:16:34 +08:00
    如果技术上不好解决,想想能不能通过产品设计、业务设计上去解决这个问题。例如自动识别用户输入的是地址的时候,让用户手动选个地址啥的,通过其他手段去规避这个后端不好精准识别地址的问题。
    blackmirror
        47
    blackmirror  
       2023-09-25 15:23:28 +08:00
    小螺丝造火箭,真心累
    c2const
        48
    c2const  
       2023-09-25 15:43:48 +08:00
    一定要通过技术手段解决,几万块是远远不够的,感觉得加钱 :)
    MRG0
        49
    MRG0  
       2023-09-25 16:07:36 +08:00
    @SZhan #28 写个正则算球
    iOCZ
        50
    iOCZ  
       2023-09-25 16:19:35 +08:00
    这个功能是很麻烦的,对人来说是简单的
    aeron
        51
    aeron  
       2023-09-25 16:54:38 +08:00 via iPhone
    命名实体识别,搜一下,应该有百度阿里之类应该有现成的接口提供
    aeron
        52
    aeron  
       2023-09-25 16:55:03 +08:00 via iPhone
    @aeron 也可以自己部署模型实现
    RipL
        53
    RipL  
       2023-09-25 17:06:12 +08:00
    技术上肯定是可行的,但是要看成本,一共几 w 块钱,估计很难做到。从产品上看最合理的应该是在源数据上就应该让用户 明确填写地址信息
    brader
        54
    brader  
       2023-09-25 17:08:43 +08:00
    如果你仅仅是要提取出地址信息的话,我觉得你可以试试快递 100 、淘宝、菜鸟等这些平台的 API 接口,他们有提供这样的接口,好像不贵,因为现在好多寄快递的页面,不是支持你粘贴文字,然后智能提取地址、姓名、手机 等等信息么,虽然这个接口是做快递的人用的多,但是我感觉和你需求也很契合,而且这种接口很成熟了,因为快递业和地址打那么久的交道,已经磨合的差不多了
    EminemW
        55
    EminemW  
       2023-09-25 17:34:41 +08:00 via iPhone
    我做过这个需求,先用 hanlp 这个库识别一下地址,然后在加一些限制检验结果,比如识别出来的内容包括省市区,地址结尾是 号 小区 楼 栋
    svipchao
        56
    svipchao  
       2023-09-25 17:50:15 +08:00
    要不加 ip 定位做纠错处理?
    iamdaguduizhang
        57
    iamdaguduizhang  
       2023-09-25 17:51:33 +08:00
    试试能不能抓包 那些快递平台 解析文本地址时候的接口
    aoguai
        58
    aoguai  
       2023-09-25 18:39:33 +08:00 via Android
    yankebupt
        59
    yankebupt  
       2023-09-25 19:08:17 +08:00
    @crissx 政府项目,不能用 chatgpt
    接口偷渡也不行,就 chatgpt 目前这个三天两头挂的情况,挂了的时候怎么办,人工识别么……
    一定得有自己的 NLP ,就算 AI 偷渡也得 ChatGPT+备用识别……
    codehz
        60
    codehz  
       2023-09-25 19:14:17 +08:00
    不能 chatgpt 不代表国内的大模型就不能用了(
    且不说你可以本地 LLaMA 微调一个,国内也不是没别的厂提供了
    keepRun
        61
    keepRun  
       2023-09-25 20:20:38 +08:00   ❤️ 1
    模仿这个代码来写,我以前是把这个代码改成 java 版,然后加入很多我们的业务逻辑,这个代码并不是最完美的: https://github.com/wzc570738205/smartParsePro

    我以前做过地址识别这块,当年给拼多多的几十万商家提供了地址解析接口用于快递地址识别(同时识别出姓名、手机号、地址的省市县),以前做过这个接口每天都有上百万调用。
    首先,这个功能很坑爹,属于是难以做到完美,只能相对完美,识别也有准确率问题,可能识别错误,因为以下原因:1. 一年内总会有一些地方地名会改变 2. 有些地名有别称 3. 用户填写地址可能会少写省市区中任意几项 4. 用户输入的地址可能有缺漏,比如上海市漏写了市。

    我自己做这块是自己模仿上面的 github 代码自己写了一版新的算法,可以实现地址缺漏、地名少字的情况下依然识别。
    我给你解释下我的算法原理:
    首先一定要建立数据库存储全国所有省市县的名称,以及上级单位,杭州市有个 parent_id 指向浙江省,浙江省的 parent 是全国,必须有个字段记录别名,例如:杭州、杭州市都是同一条记录。
    然后针对地址从左到右先匹配省再匹配市再匹配县,匹配过程是从字符串去头 1 个字符、头两个字符,以此类推,在里面 contains 省,然后针对所有匹配出来的省做筛选( github 仓库中的筛选算法), 筛选出匹配的省后要把匹配出省的那个字符串删除,防止极端情况下省名影响到市名的匹配,以此类推继续匹配下级地址。

    如果你需要缺省或者缺市的情况下匹配,其实就建立一个 set 作为候选待匹配地址,例如缺省时,匹配市就相当于把全国所有省下面的市都加入这个候选名单。

    地址解析是个麻烦活,地址数据必然要不断更新的,如果只是演示或者流量比较小也许可以糊弄下,必然存在地址解析错误的情况,因此一定要针对地址解析错误有相应的处理方式。
    Andrue
        62
    Andrue  
       2023-09-25 20:43:28 +08:00
    写个正则然后提供示例给他们,剩下交给对接负责人,如果效果不理想那是预算的问题不是你们技术的问题,要么加钱要么按照模板写
    Archeb
        63
    Archeb  
       2023-09-25 20:50:38 +08:00   ❤️ 1
    这个需求用 ChatGLM-6B 识别起来没什么大问题

    “自己是新吴区鸿山街道鸿福苑六二期 5 号 1503 的住户,想在屋面里面修葺两个小房间,目前就修了一个门框,xx 就直接来拆掉了,但是其他人家都造好了,都已经住进去了,都没有拆。服务对象表示自己家这里有留消防通道,其他人家都没有留。服务对象表示鸿福苑六二期 5 号号楼十八层的业主(无法具体提供信息,但表示这些楼栋 2103 、2004 室都存在该情况),已经造好通水电入住,自己认为处理部门应该一视同仁对待。”
    以纯 json 格式输出以上这段话中涉及的 "address": string

    {
    "address": "新吴区鸿山街道鸿福苑六二期 5 号 1503"
    }

    “服务对象来电反映目前通武新村 1 号附近有两条流浪狗将自己车辆的保险杠咬坏,拨打 110 反映表示需要公安协助处理流浪狗。”
    以纯 json 格式输出以上这段话中涉及的 "address": string

    {
    "address": "通武新村 1 号"
    }

    “自己是康桥悦然园 1 期业主,小区 9 号楼前的变电站附近将建造垃圾分类房,服务对象表示垃圾房的位置在沙盘上没有,在合同书上规划在 8 号楼附近。反映后,区城管、街道坏卫、街道、消防都认为垃圾分类房位置不合理,要求开发商拆除,但开发商以区城管未下发红头文件为由迟迟不愿拆除。”
    以纯 json 格式输出以上这段话中涉及的 "address": string

    {
    "address": "康桥悦然园 1 期"
    }

    “服务对象来电反映广益佳苑一期 38 号楼至 0 号楼北侧有业主通为不牵绳,存在安全隐患,服务对象不认可,自己已经反映小区流浪狗的问题,了解到流浪狗是城管负责,目前需要公安同处理业主遛狗不牵绳的问题。”
    以纯 json 格式输出以上这段话中涉及的 "address": string

    {
    "address": "广益佳苑一期"
    }
    Archeb
        64
    Archeb  
       2023-09-25 20:53:02 +08:00
    不过即使是 6B 也需要 7G 显存的显卡才能跑,响应速度倒是没太大问题。接下来就是用普通的 Geocoding API 就行了。
    keepRun
        65
    keepRun  
       2023-09-25 21:10:28 +08:00
    @Archeb 没必要用到人工智能,而且人工智能太耗算力了
    keepRun
        66
    keepRun  
       2023-09-25 21:11:51 +08:00
    @Andrue 单个正则无法处理复杂的地址情况,而且即使写出来也会太复杂;写个匹配算法会更清晰易懂,性能也好
    iOCZ
        67
    iOCZ  
       2023-09-25 21:16:34 +08:00
    @keepRun 这也不行,那也行,咋整?你看看 63 楼这个,你的省市区县地址库根本不够看
    keepRun
        68
    keepRun  
       2023-09-25 21:29:34 +08:00
    @iOCZ 可以解决,我说的省市县你不会以为就不包括街道吧,省市县代指三级地址结构,要想四、五级都可以,而且地址可以缺失。
    我指出问题有啥不对?你这说话态度能不能好点
    lscho
        69
    lscho  
       2023-09-25 23:56:39 +08:00 via iPhone
    我只能说之前对接过某银行系统,他们直接把全国所有小区名称全部给过来了,大概 100 多万。。。。至于行政区,那就更好处理。

    有时候笨办法才是最快的办法。
    taihengw
        70
    taihengw  
       2023-09-26 00:14:27 +08:00
    我记得 python 有个库可以做简单的行政地理名称划分,比如你第一个例子中的这种信息可以完整识别出来。但是对于例子 2 这样的不知道有没有什么好办法
    kingfalse
        71
    kingfalse  
       2023-09-26 00:19:19 +08:00 via Android
    我司也是一样的需求,但是提取的是学历这些字段,然后用的阿里 NLP ,结果提取 200 条花了两万块,就苦逼。
    nowheremanx
        72
    nowheremanx  
       2023-09-26 03:16:05 +08:00   ❤️ 2
    看回复,时代确实变了。以前这种都需要写一大堆正则去匹配,现在直接 AI 完事。
    zhongjun96
        73
    zhongjun96  
       2023-09-26 08:55:07 +08:00
    @brader #54 不一样的,快递接口是从地址上解析省市区街道。这个是从文本中提取地址。
    liuzhedash
        74
    liuzhedash  
       2023-09-26 09:02:21 +08:00   ❤️ 1
    @keepRun
    我前一段做了个自建地理编码的模块,除了分词算法用的 jieba 之外,地址文本的关键词提取思路和这个基本一样。
    重点是建立一个和输入数据相关的数据库,比如 LZ 这个是无锡市的,首先就可以从
    http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2022/32/3202.html
    把无锡市各个行政区、街道、社区的名字提出来,然后再去找一套 POI 数据,把小区名字提出来,整理成一个数据库。
    在分词之后把分出来的候选词代入这个库,匹配出标准的地址描述词。
    DIO
        75
    DIO  
       2023-09-26 09:03:06 +08:00   ❤️ 1
    顺丰这种行业龙头都没法妥善的解决这个问题。你要跟领导说,要加钱,你的工作重点应该放在收集资料,一些行业大牛的信息说明这点钱打发叫花子都不够,而不是自己哼哧哼哧做。
    season8
        76
    season8  
       2023-09-26 09:29:17 +08:00   ❤️ 1
    这个思路不知道行不行:
    1. 文本预处理,比如特殊字符,空格、连接符等,避免干扰分词
    2. 通过分词,提取地点(街道,社区,区域,城市等,做好类型分类),还可以结合正则匹配
    3. 将以上提取到的关键字根据原文索引位置排序
    4. 地址组合,比如:连续的是一个地址,多个地址中间往往是不相连的
    5. 使用分词关键字 poi 比对
    lrzsw2008
        77
    lrzsw2008  
       2023-09-26 09:39:40 +08:00
    直接和领导说能做出来你们可以上市了。
    要么就类似淘宝、饿了么之类的,选择框选择省市区等地址。
    要么找人工审核
    herozzm
        78
    herozzm  
       2023-09-26 09:49:44 +08:00   ❤️ 1
    顺丰速运小程序中有粘贴地址识别的,感觉挺准的,不知道背后逻辑,好像逃不开 ai 大模型
    SZhan
        79
    SZhan  
    OP
       2023-09-26 10:25:14 +08:00
    @codehz 大模型这一块的话 如果要做 那么对接成熟的产品是不太可能了诶 得自己搭建然后训练一个
    SZhan
        80
    SZhan  
    OP
       2023-09-26 10:27:22 +08:00
    @iOCZ #50 这句话也是我一直憋着没法讲出来的
    SZhan
        81
    SZhan  
    OP
       2023-09-26 10:30:10 +08:00
    @keepRun #61 感谢感谢!我看下,因为我是做 java 开发的,想通过 Java 的方式去解决,所以如果让直接上手大模型训练的话要时间精力去琢磨,那是不容易的
    SZhan
        82
    SZhan  
    OP
       2023-09-26 10:33:05 +08:00
    @svipchao 不是这样的哦,数据来源是这样的,我们不直接和这个工单受理平台对接,是它受理平台推给一个数据中心,然后数据中心通过库表推送的方式给到我们的,不涉及 ip 的哈,所以只有这个内容作为依据去分析
    pengtdyd
        83
    pengtdyd  
       2023-09-26 10:33:24 +08:00
    #18 说的 LBS 和 NER 分别是什么意思,有人能解释一下吗?????????
    SZhan
        84
    SZhan  
    OP
       2023-09-26 10:34:54 +08:00
    @kingfalse 这价格,,,也是没谁了,后面还是继续这么弄得么?
    zrc199021
        85
    zrc199021  
       2023-09-26 10:37:42 +08:00
    去网上找找那种人工标注平台,说不定更便宜…
    SZhan
        86
    SZhan  
    OP
       2023-09-26 10:39:34 +08:00
    @pengtdyd lbs 之前有接触过,定位位置服务吧,这个应该好理解一点,然后 NER 中文对应的就是命名实体识别,从一段话中抓取出一些不同领域的词,像我这种就是,从一段话中抓取出具体地址,就是 NER 干的活,然后我需要 LBS 服务去根据识别到的地址获取具体的位置(经纬度)或者所属信息(区、街道、社区)
    SZhan
        87
    SZhan  
    OP
       2023-09-26 10:40:30 +08:00
    @pengtdyd 希望一点小小拙见能帮到您理解,如果有讲的不对的,各位评论区大佬随时指出
    SZhan
        88
    SZhan  
    OP
       2023-09-26 10:46:36 +08:00
    @liuzhedash
    @keepRun #66 没事没事,大家都是探讨问题,您不要生气哈,AI 的话确实肯定是耗资源,我会去和甲方领导提出的。然后我目前能做到的就是已经有区、县、街道、社区 明显字眼的匹配到,但是对于后面的地点就抓不到,我参考下您之前发的那个学习一下
    SZhan
        89
    SZhan  
    OP
       2023-09-26 10:50:14 +08:00
    @lrzsw2008 是的 人工审核的界面开发了 然后他们说人工的事干了 要你们开发干什么
    zjuster
        90
    zjuster  
       2023-09-26 11:02:09 +08:00   ❤️ 1
    @pengtdyd

    lbs: location based service, 用在业务场景里,就是根据访问者设备的一些地理位置特征,比如通过基站、wifi 、网络 ip 等综合得出此设备所处的实际物理位置,甚至可以得到具体的经纬度坐标(注意国内经纬度应用通常存在故意混淆的偏差)。这个访问地址,就可以帮助 App 和应用程序快速给用户反馈。
    举个例子,打开外卖软件,外卖软件会推荐周围的可以点餐的餐厅,这就是自动根据你的地理位置计算得出的。如果你在系统里把他的地理位置权限关掉,他就做不到了。

    NER: named entity recognition, 命名实体识别。 实体在自然语言分析行业中,可以理解为一个物体,一个对象,可以是具体的也可以是抽象的。在给定的条件下,例如我指明“苹果”是一种水果的名称,那么 NER 就是从文本中,抓到指代“/水果/苹果”的实体词条出来(并且尽量避开手机品牌“苹果”)。 比如“苹果必须削皮吃吗”, 这里就应该识别;“苹果手机啥时候发货”,这里就不能识别。
    这种识别和 chatgpt 是类似的,本质上是一个数学概率和逻辑关系的模型,中间也需要很多的人工标注,可以认为是有间监督的机器学习。

    ---
    @SZhan 这就是 toG 业务的难点了,屁大点预算想发射卫星。我建议在 Github 上找点开源的模型工程(开源大模型,或者开源的 NLP 功能挂件、分词器。),然后搞一个文本地址库做三元组数据库,写一个强匹配的规则引擎,直接用前面的地址文本库做文本相似度匹配,给出 1-2 个结果,让操作员自己去选最后的结果。
    毕竟只设计地理位置这一个领域的文本数据,准确度是可以达到一定程度的(但按照我的经验,到 90%就不错了)

    什么大模型计算,让对接业务的销售去吹:得加钱。
    注意,地址库每年都会有一些变化,比如上面回复的统计局地址,其实都是有过期消息的(毕竟是 年度的),如果用了这种方案,后面更新也得注意,省得被那边客户骂。(同样,得加钱)
    SZhan
        91
    SZhan  
    OP
       2023-09-26 11:16:40 +08:00
    @liuzhedash
    @keepRun #68 两位好,我想到一个问题,我之前也有做过一个测试,我没有用一个一个字从头匹配。我是把一段话,首先进行清洗,把内容中已经有明显的提到区、街道、社区的提取出来,然后使用 jieba 分词 java 版,把分词后的 list 去和 poi list 匹配。这时候分为两种情况:1 、如果第一步清洗的时候已经有了结果,poi 列表就可以缩小了,只需要把对应区的 poi 来字符串匹配 2 、如果没有任何清洗结果,那就全量的 poi 直接丢进来字符串匹配
    不过,设想是好的,但就存在一个问题,poi 里数据虽然多,但是经常抓不到正确的数据,因为分词过后打散的词比如在前两个“服务”、“好”什么的词就能在 poi 库里抓到,但是人家确实是个 poi ,就很绝
    SZhan
        92
    SZhan  
    OP
       2023-09-26 11:25:12 +08:00
    @zjuster #90 大佬说的对,其实不管怎么样,哪怕前期开发实现了,后期维护也是一个痛点!他们想要的是纯机器,不人工介入。人工修改的界面都给他们开发好了,然后他们不想投入人去做。然后我们销售售前只管 tmd 接项目,项目中标,开发入场,他们就啥事不管了,继续去找下一个项目踩雷去了,目前就是这样,从一个坑项目到另一个坑项目循环。
    SZhan
        93
    SZhan  
    OP
       2023-09-26 11:28:31 +08:00
    @lscho 那您是直接把小区的数据丢进去直接匹配么?我这个是全市的,除了小区还有各种基础设施、商业综合体、超市乱七八糟什么的,是给城管用,总共也几十万个兴趣点吧
    SZhan
        94
    SZhan  
    OP
       2023-09-26 11:36:46 +08:00
    @season8 分词的我做过一个类似的实验,把内容分完,如果匹配识别区、街道、社区是没问题的,但是具体的地点,可能一个地点会被拆成零零散散的几个字,也可能是一个完整的地点,那么完整的地点可能就会识别成功,但是被拆成字的话,有的就会直接就会返回一个跟内容里完全不相关的兴趣点,就是兴趣点太多太杂了。
    pengtdyd
        95
    pengtdyd  
       2023-09-26 12:03:17 +08:00
    @zjuster @SZhan 谢谢您的解答
    mmdsun
        96
    mmdsun  
       2023-09-26 12:33:17 +08:00 via iPhone
    政府项目可以用微软的不?申请微软家的 Azure OpenAI 服务
    liuzhedash
        97
    liuzhedash  
       2023-09-26 13:51:24 +08:00
    @SZhan
    这个问题我也没有好的思路,因为本质上看,一个 1-2 个字符的词,脱离了上下文,本身携带的信息量太少了,匹配不准确乃至错误是不可避免的。
    SZhan
        98
    SZhan  
    OP
       2023-09-26 14:08:41 +08:00
    @mmdsun 这个是不行的,服务器通外网被审计了,需要发工单。正常 curl 百度之类的会提示无访问权限,通一个网址要一步步工单申请,走政府领导签字审批
    keepRun
        99
    keepRun  
       2023-09-26 14:12:58 +08:00 via Android
    @SZhan 我以前做快递地址识别处理方式是按我那种算法,省识别完了就把对应字符串删除,以此类推,最终剩下来的就是客户最终留下的可能某某超市附近这样的详细地址
    keepRun
        100
    keepRun  
       2023-09-26 14:20:23 +08:00 via Android
    @SZhan 你要是想了解我的那种算法,可以加我微信

    不过我感觉你这个是业务问题,不管算法怎么提高,总会有错误情况发生,这个问题应该在业务层面能够容忍并有改进措施,比如:信息错误了,有人看到了可以纠错,然后人工审核或者啥其它方式
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.