SpringBoot Hanlp的集成

本小白打算开始搞知识图谱惹,今天第一步打算干掉hanlp,MARK一下步骤怕以后忘了

1. 添加Maven依赖

以下代码块中是此刻的依赖写法,最新的依赖写法可以从hanlp的GitHub的README文件里直接复制:
https://github.com/hankcs/HanLP/tree/1.x

<!-- hanlp-->
        <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.7.7</version>
        </dependency>
2. 下载hanlp的数据文件(data文件包)
  • data压缩包同样可以从HanlpGithub的README里找到地址下载,下好后解压到任意文件夹即可
  • 不具备科学上网的条件的话,记得走官网中提供的网盘通道,否则亲测巨无霸慢~
  • hanlp采用程序(hanlp)与数据(data)分离的模式,不下载data的话依然可以使用静态分词器(官网说明中一系列Tokenizer结尾的方法)
3. 导入配置文件hanlp.properties
  • 在README里找到hanlp-release.zip文件下载后解压,然后取出hanlp.properties 文件,我是直接把它存放到resources文件夹中
    在这里插入图片描述
  • 注意需要修改hanlp.properties文件中root的地址,改为之前存放data文件包的位置
root=G:/hanlp/data-for-1.7.5
  • 同样无法科学上网的话,下载起来也是巨无霸慢QAQ,可以百度下康康前辈们是否有这份文件的资源(比如我看见这位前辈就有~)
4.开始写第一个demo
System.out.println(HanLP.segment("你好,欢迎使用HanLP汉语处理包!"));

输出:

[你好/l,/w, 欢迎/v, 使用/v, HanLP/nx, 汉语/nz, 处理/v,/v,/w]
5.NLP分词
List<Term> termList = NLPTokenizer.segment("狭义的知识组织是指文献的分类、标引、编目、文摘、索引等一系列整序;广义的知识组织是针对知识的两要素进行的,是知识因子(结点)的有序化和知识关联(结点间的关系)的网络化。");
System.out.println(termList);

输出:

[狭义/b,/u, 知识/n, 组织/n,/v,/v, 文献/n,/u, 分类/vn,/w, 标引/gm,/w, 编目/v,/w, 文摘/n,/w, 索引/n,/u, 一系列/m, 整序/n,/w, 广义/n,/u, 知识/n, 组织/n,/v, 针对/p, 知识/n,/u,/m, 要素/n, 进行/v,/u,/w,/v, 知识/n, 因子/n,/w, 结点/n,/w,/u, 有序/a,/vn,/c, 知识/n, 关联/vn,/w, 结点/n,/f,/u, 关系/n,/w,/u, 网络化/vn,/w]
6.简易的词频统计

统计词频部分参考这位前辈写的

    @Test
    void testFrequency() {
        //0.准备语料
        String content = " 盼望着,盼望着,东风来了,春天的脚步近了。\n" +
                "  一切都像刚睡醒的样子,欣欣然张开了眼。山朗润起来了,水涨起来了,太阳的脸红起来了。\n" +
                "  小草偷偷地从土里钻出来,嫩嫩的,绿绿的。园子里,田野里,瞧去,一大片一大片满是的。坐着,躺着,打两个滚,踢几脚球,赛几趟跑,捉几回迷藏。风轻悄悄的,草软绵绵的。\n" +
                "  桃树、杏树、梨树,你不让我,我不让你,都开满了花赶趟儿。红的像火,粉的像霞,白的像雪。花里带着甜味儿,闭了眼,树上仿佛已经满是桃儿、杏儿、梨儿。花下成千成百的蜜蜂嗡嗡地闹着,大小的蝴蝶飞来飞去。野花遍地是:杂样儿,有名字的,没名字的,散在花丛里,像眼睛,像星星,还眨呀眨的。\n" +
                "  “吹面不寒杨柳风”,不错的,像母亲的手抚摸着你。风里带来些新翻的泥土的气息,混着青草味儿,还有各种花的香,都在微微润湿的空气里酝酿。鸟儿将巢安在繁花嫩叶当中,高兴起来了,呼朋引伴地卖弄清脆的喉咙,唱出宛转的曲子,跟轻风流水应和着。牛背上牧童的短笛,这时候也成天在嘹亮地响着。\n" +
                "  雨是最寻常的,一下就是三两天。可别恼。看,像牛毛,像花针,像细丝,密密地斜织着,人家屋顶上全笼着一层薄烟。树叶儿却绿得发亮,小草也青得逼你的眼。傍晚时候,上灯了,一点点黄晕的光,烘托出一片这安静而和平的夜。在乡下,小路上,石桥边,有撑起伞慢慢走着的人;还有地里工作的农民,披着蓑戴着笠。他们的草屋,稀稀疏疏的,在雨里静默着。\n" +
                "  天上风筝渐渐多了,地上孩子也多了。城里乡下,家家户户,老老小小,也赶趟儿似的,一个个都出来了。舒活舒活筋骨,抖擞抖擞精神,各做各的一份儿事去,“一年之计在于春”;刚起头儿,有的是工夫,有的是希望。\n" +
                "  春天像刚落地的娃娃,从头到脚都是新的,它生长着。\n" +
                "  春天像小姑娘,花枝招展的,笑着,走着。\n" +
                "  春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我们上前去。"//————材料自朱自清《春》
                ;
        //1.这里用了Hanlp的标准分词(可以不需要data)
        List<Term> termList = StandardTokenizer.segment(content);
        //2.统计词频,并存入哈希表
        HashMap<String, Integer> pplHashMap = new HashMap<String, Integer>();//用HashMap存词频数据
        for (Term term : termList) {
            if (term.nature.startsWith('m')) continue; // 数词过滤
            if (term.nature.startsWith('q')) continue; // 量词过滤
            if (term.nature.startsWith('t')) continue; // 时间词过滤
            if (term.nature.startsWith("w")) continue; // 标点符号过滤
            if (CoreStopWordDictionary.contains(term.word)) continue; // 停用词过滤
            if (!pplHashMap.containsKey(termSplit[0])) {
                pplHashMap.put(termSplit[0], 1);
            } else {
                int tmp_count = pplHashMap.get(termSplit[0]);
                pplHashMap.put(termSplit[0], tmp_count + 1);
            }
        }
        //3.还想根据词频高低排个序,所以转化为List处理
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(pplHashMap.entrySet()); //转换为list
        list.sort(new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        //4.输出前5个
        for (int i=0;i<5;i++){
            System.out.println(list.get(i).getKey()+": "+list.get(i).getValue());
        }
    }

输出:

: 7
起来: 4: 3: 3
名字: 2

Hanlp还有好多功能,刚开始就先试到这儿了,接下来打算学学neo4j~~
但愿能坚持到最后一步~~

参考资料:
https://github.com/hankcs/HanLP/tree/1.x
https://blog.csdn.net/qiuyushuofeng/article/details/80991960

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值