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}; }

五、效果

相关推荐
阿里云华为云天翼云腾讯云代理商_小李2 分钟前
‌腾讯云国际站代理商:如何搭建邮件服务器?
后端
洛卡卡了7 分钟前
Go + Gin 实现动态定时任务系统:从静态注册到动态调度与日志记录
后端·go
AronTing9 分钟前
13-Java并发编程性能优化终极指南:从原理到企业级实战
java·后端·面试
拖拉机9 分钟前
Python(五)字典
后端·python
星星电灯猴13 分钟前
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业
后端
布道谷24 分钟前
锁的可重入性:概念、原理与Java实现深度解析
java·后端
林太白26 分钟前
学到了,强大的企业级NestJS必须了解一下
前端·后端·nestjs
雷渊28 分钟前
谈一谈在分布式系统中,如何保证数据一致性?
java·后端·面试
省长32 分钟前
使用 Sa-Token CORS 策略处理跨域问题(三种方式全版)
java·后端·开源
堕落年代1 小时前
SpringBoot使用Redisson时候进行Redis事务回滚
spring boot·redis·后端