当前位置:   article > 正文

SpringBoot Hanlp的集成_springboot集成hanlp

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
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
  • 1
  • 同样无法科学上网的话,下载起来也是巨无霸慢QAQ,可以百度下康康前辈们是否有这份文件的资源(比如我看见这位前辈就有~)
4.开始写第一个demo
System.out.println(HanLP.segment("你好,欢迎使用HanLP汉语处理包!"));
  • 1

输出:

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

输出:

[狭义/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]
  • 1
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());
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

输出:

: 7
起来: 4: 3: 3
名字: 2
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/172892
推荐阅读
相关标签
  

闽ICP备14008679号