hanlp中文智能分词自动识别文字提取实例

简介:

需求:客户给销售员自己的个人信息,销售帮助客户下单,此过程需要销售人员手动复制粘贴收获地址,电话,姓名等等,一个智能的分词系统可以让销售人员一键识别以上各种信息

经过调研,找到了一下开源项目

1、word 分词器

2、ansj 分词器

3、mmseg4j 分词器

4、ik-analyzer 分词器

5、jcseg 分词器

6、fudannlp 分词器

7、smartcn 分词器

8、jieba 分词器

9、stanford 分词器

10、hanlp 分词器

11、spaCy:工业级的自然语言处理工具

最后选择了hanlp(斯坦福nlp 包也可以,参考另外文档),步骤官网都有,下面演示智能匹配地址

List<Term> list = HanLP.newSegment().seg("汤姆江西省南昌市红谷滩新区111号电话12023232323");

System.out.println(list);

输出

1   [汤姆/nrf, 江西省/ns, 南昌市/ns, 红谷滩/nz, 新区/n, 111/m, 号/q, 电话/n, 12023232323/m]

大公告成,不过前提必须下载那个600多M的data包并导入,才可以识别地址,否则只是做了初步的识别

附上完整代码

 String str = "汤姆   江西省南昌市红谷滩新区111号     12023232323";                                            
                                                                                                 
 String address = "";                                                                            
                                                                                                 
 String phone = "";                                                                              
                                                                                                 
 String name = "";                                                                               
                                                                                                 
 List<Term> terms = NLPTokenizer.segment(str);                                                   
                                                                                                 
 System.out.println(terms);                                                                      
                                                                                                 
 for (Term term : terms) {                                                                       
                                                                                                 
     if (term.nature.startsWith("nr")){                                                          
                                                                                                 
         //nr代表人名                                                                                
                                                                                                 
          name = term.word;                                                                      
                                                                                                 
          System.out.println("name: " + term.word);                                              
                                                                                                 
      }else if (term.nature.startsWith("m") && term.word.length() == 11){                        
                                                                                                 
          //m代表数字                                                                                
                                                                                                 
          phone = term.word;                                                                     
                                                                                                 
          System.out.println("电话: " + term.word);                                                
                                                                                                 
      }                                                                                          
                                                                                                 
  }                                                                                              
                                                                                                 
                                                                                                 
                                                                                                 
  //由于地址包含了数字,解析的时候数字成为单独的个体,与实际不符,所以通过差集求出地址                                                    
                                                                                                 
  address = str.replace(phone, "").replace(name, "").trim();                                     
                                                                                                 
  System.out.println("address: " + address);                                                     

运行结果

1    name: 汤姆

2    电话: 12023232323

3    address: 江西省南昌市红谷滩新区111号

参考官网:Releases · hankcs/HanLP · GitHub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值