千家论坛--智能建筑-智慧安防-智慧社区-智能家居论坛

人工智能
收藏本版 (4) |订阅

人工智能 今日: 2813 |主题: 1057|排名: 24 

发新帖

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

[复制链接]
hadoop小学生 发布于: 2018-11-30 15:03 49 次浏览 0 位用户参与讨论
跳转到指定楼层
需求:客户给销售员自己的个人信息,销售帮助客户下单,此过程需要销售人员手动复制粘贴收获地址,电话,姓名等等,一个智能的分词系统可以让销售人员一键识别以上各种信息
经过调研,找到了一下开源项目
1、** 分词器
2、ansj 分词器
3、mmseg4j 分词器
4、ik-analyzer 分词器
5、jcseg 分词器
6、fudannlp 分词器
7、smartcn 分词器
8、jieba 分词器
9、stanford 分词器
10、hanlp 分词器

最后选择了hanlp,步骤官网都有,下面演示智能匹配地址
1   List<Term> list = HanLP.newSegment().seg("汤姆江西省南昌市红谷滩新区111号电话12023232323");
2    System.out.println(list);

输出

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

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

   1     String str = "汤姆   江西省南昌市红谷滩新区111号     12023232323";
   2     String address = "";
   3     String phone = "";
   4     String name = "";
   5     List<Term> terms = NLPTokenizer.segment(str);
   6     System.out.println(terms);
   7     for (Term term : terms) {
   8         if (term.nature.startsWith("nr")){
   9             //nr代表人名
   10             name = term.**;
   11             System.out.println("name: " + term.**);
   12         }else if (term.nature.startsWith("m") && term.**.length() == 11){
   13             //m代表数字
    14            phone = term.**;
    15            System.out.println("电话: " + term.**);
    16        }
    17    }

    18    //由于地址包含了数字,解析的时候数字成为单独的个体,与实际不符,所以通过差集求出地址
    19    address = str.replace(phone, "").replace(name, "").trim();
    20    System.out.println("address: " + address);

运行结果

1    name: 汤姆
2    电话: 12023232323
3    address: 江西省南昌市红谷滩新区111号
---------------------



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆 千家通行证登陆

本版积分规则

千家智客微信号
千家智客微信
玩物说商城
玩物说商城