SpringBoot2.3整合HanLP1.7.7

一、需求场景

提取地址字符串中的 区、街乡镇、村的字段,使用获取到的字段向经信局发起请求获取经纬度和点位名称,保存至数据库。

二、使用技术

HanLP+SpringBoot

三、设计思路

四、具体实现

  1. pom引入jar

    com.hankcs hanlp 1.7.7 com.hankcs hanlp-sources 1.7.7

  2. 自定义词典,设置自定义词典中的词属性为na:

    #自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用"文件名 词性"形式则表示这个词典的词性默认是该词性。优先级递减。 #所有词典统一使用UTF-8编码,每一行代表一个单词,格式遵从单词 词性A A的频次 词性B B的频次 ... 如果不填词性则表示采用词典的默认词性。 CustomDictionaryPath=data/dictionary/custom/add_place.txt na; non-place.txt n;

  3. 获取属性为na的字符串,拼接到一起:

    /**

    • 获取ns nt类型字符串,一旦遇到非规定类型直接结束
    • ns 地名
    • nt 机构团体名 */ public static String\[\] getNaStr(String address) { List termList = StandardTokenizer.segment(address); String word = ""; String hasNa = "false"; for (Term term : termList) { if ("na".equals(term.nature.toString())) { if (word.length() <= term.word.length()) { word = term.word; hasNa = "true"; } } } // 结果第一个是是否找到na属性字符串,第二个是最长的na字符串 return new String\[\]{hasNa, word}; }

五、效果

相关推荐
一条泥憨鱼3 小时前
苍穹外卖【day11| 用户统计,订单统计,销量排名统计功能实现】
java·后端·苍穹外卖
她的男孩3 小时前
缓存明明命中了却报 ClassCastException:拆完多级缓存控制面,我挖出 5 个静默失效的坑
java·后端·架构
孙启超3 小时前
【AI开发之Rust】第 13 课:async/await 与 tokio 异步运行时
开发语言·后端·rust
SimonKing4 小时前
SpringBoot 集成 SSE 实现服务端推送或可代替Websocket
java·后端·程序员
字节探索4 小时前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
Sam_Deep_Thinking4 小时前
关于java final关键字的可见性
java·后端·面试·程序员
Thneonl4 小时前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
zihan5185 小时前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
乌暮5 小时前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习
一条泥憨鱼5 小时前
苍穹外卖【day12| 工作台,通过Apache POI导入/导出运营数据】
java·后端·苍穹外卖