首页 > 其他分享 >springboot集成hnlp

springboot集成hnlp

时间:2024-10-23 15:47:26浏览次数:3  
标签:集成 springboot System String 算法 println data hnlp out

基本功能

添加maven依赖即可使用由字构词,依存句法分析之外的全部功能。

<dependency>
    <groupId>com.hankcs</groupId>
    <artifactId>hanlp</artifactId>
    <version>portable-1.8.4</version>
</dependency>

自定义

下载数据包和配置文件

官方原版 :        data.zip        hnlp.properties                百度网盘:      data.zip    

data包下有 dictionary 和 model ,dictionary是词法分析必须的,model是句法分析必须的,model如果用不到可以选择删掉。

hnlp.properties

修改rootl路径为data的父目录,如下 data 在        E:/java/hnlp/data

#本配置文件中的路径的根目录,根目录+其他路径=完整路径(支持相对路径,请参考:https://github.com/hankcs/HanLP/pull/254)
#Windows用户请注意,路径分隔符统一使用/
root=E:/java/hnlp/

#核心词典路径
#CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt
#2元语法词典路径
#BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt
#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。
#所有词典统一使用UTF-8编码,每一行代表一个单词,格式遵从[单词] [词性A] [A的频次] [词性B] [B的频次] ... 如果不填词性则表示采用词典的默认词性。
CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf;
#停用词词典路径
#CoreStopWordDictionaryPath=data/dictionary/stopwords.txt
#同义词词典路径
#CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt
#人名词典路径
#PersonDictionaryPath=data/dictionary/person/nr.txt
#人名词典转移矩阵路径
#PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt
#繁简词典根目录
#tcDictionaryRoot=data/dictionary/tc
#HMM分词模型
#HMMSegmentModelPath=data/model/segment/HMMSegmentModel.bin
#分词结果是否展示词性
#ShowTermNature=true
#IO适配器,实现com.hankcs.hanlp.corpus.io.IIOAdapter接口以在不同的平台(Hadoop、Redis等)上运行HanLP
#默认的IO适配器如下,该适配器是基于普通文件系统的。
#IOAdapter=com.hankcs.hanlp.corpus.io.FileIOAdapter
#感知机词法分析器
#PerceptronCWSModelPath=data/model/perceptron/pku1998/cws.bin
#PerceptronPOSModelPath=data/model/perceptron/pku1998/pos.bin
#PerceptronNERModelPath=data/model/perceptron/pku1998/ner.bin
#CRF词法分析器
#CRFCWSModelPath=data/model/crf/pku199801/cws.txt
#CRFPOSModelPath=data/model/crf/pku199801/pos.txt
#CRFNERModelPath=data/model/crf/pku199801/ner.txt
#更多配置项请参考 https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/HanLP.java#L59 自行添加

测试

删掉data包下 data\dictionary\custom\CustomDictionary.txt.bin 文件,执行下方代码

System.out.println(HanLP.segment("你好,欢迎使用HanLP汉语处理包!"));

观察控制台:正常分词则部署成功。有打印红色错误日志 应该是data里的字典没加载到。

看下是不是上海地名.txt变成了????.txt。如果是点idea->file->settings->file encodings设置为utf8

重启ides,删掉 CustomDictionary.txt.bin 文件 重新运行,控制台不报错且CustomDictionary.txt.bin文件重新生成则部署成功。

自定义词典

data\dictionary\custom\目录下新建  diy.txt 名字任意 修改hnlp.properties里CustomDictionaryPath的值,仿造其它字典填写即可。

然后删掉 CustomDictionary.txt.bin 文件 重新运行

官方案例

仅粘贴示例代码,详情在这里 README.md

标准分词
List<Term> termList = StandardTokenizer.segment("商品和服务");
System.out.println(termList);
NLP分词
System.out.println(NLPTokenizer.segment("我新造一个词叫幻想乡你能识别并标注正确词性吗?"));
// 注意观察下面两个“希望”的词性、两个“晚霞”的词性
System.out.println(NLPTokenizer.analyze("我的希望是希望张晚霞的背影被晚霞映红").translateLabels());
System.out.println(NLPTokenizer.analyze("支援臺灣正體香港繁體:微软公司於1975年由比爾·蓋茲和保羅·艾倫創立。"));
索引分词
List<Term> termList = IndexTokenizer.segment("主副食品");
for (Term term : termList){
    System.out.println(term + " [" + term.offset + ":" + (term.offset + term.word.length()) + "]");
}
N-最短路径分词
Segment nShortSegment = new NShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
Segment shortestSegment = new DijkstraSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
String[] testCase = new String[]{
        "今天,刘志军案的关键人物,山西女商人丁书苗在市二中院出庭受审。",
        "刘喜杰石国祥会见吴亚琴先进事迹报告团成员",
        };
for (String sentence : testCase){
    System.out.println("N-最短分词:" + nShortSegment.seg(sentence) + "\n最短路分词:" + shortestSegment.seg(sentence));
}
CRF分词
CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();
String[] tests = new String[]{
            "商品和服务",
            "上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观",
            "微软公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。" // 支持繁体中文
        };
for (String sentence : tests){
    System.out.println(analyzer.analyze(sentence));
}
急速词典分词
System.out.println(SpeedTokenizer.segment("江西鄱阳湖干枯,中国最大淡水湖变成大草原"));
用户自定义词典
CustomDictionary.add("攻城狮");// 动态增加
CustomDictionary.insert("白富美", "nz 1024");// 强行插入       
//CustomDictionary.remove("攻城狮");// 删除词语(注释掉试试)
System.out.println(CustomDictionary.add("单身狗", "nz 1024 n 1"));
System.out.println(CustomDictionary.get("单身狗"));
String text = "攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰";  // 怎么可能噗哈哈!
// AhoCorasickDoubleArrayTrie自动机扫描文本中出现的自定义词语
final char[] charArray = text.toCharArray();
CustomDictionary.parseText(charArray, new AhoCorasickDoubleArrayTrie.IHit<CoreDictionary.Attribute>(){
    @Override
    public void hit(int begin, int end, CoreDictionary.Attribute value){
          System.out.printf("[%d:%d]=%s %s\n", begin, end, new String(charArray, begin, end - begin), value);
            }
        });

System.out.println(HanLP.segment(text));// 自定义词典在所有分词器中都有效
中国人名识别
String[] testCase = new String[]{
        "签约仪式前,秦光荣、李纪恒、仇和等一同会见了参加签约的企业家。",
        "王国强、高峰、汪洋、张朝阳光着头、韩寒、小四",
        "张浩和胡健康复员回家了",
        "王总和小丽结婚了",
        "编剧邵钧林和稽道青说",
        "这里有关天培的有关事迹",
        "龚学平等领导,邓颖超生前",
        };
Segment segment = HanLP.newSegment().enableNameRecognize(true);
for (String sentence : testCase){
    List<Term> termList = segment.seg(sentence);
    System.out.println(termList);
}
音译人名识别
String[] testCase = new String[]{
                "一桶冰水当头倒下,微软的比尔盖茨、Facebook的扎克伯格跟桑德博格、亚马逊的贝索斯、苹果的库克全都不惜湿身入镜,这些硅谷的科技人,飞蛾扑火似地牺牲演出,其实全为了慈善。",
                "世界上最长的姓名是简森·乔伊·亚历山大·比基·卡利斯勒·达夫·埃利奥特·福克斯·伊维鲁莫·马尔尼·梅尔斯·帕特森·汤普森·华莱士·普雷斯顿。",
        };
Segment segment = HanLP.newSegment().enableTranslatedNameRecognize(true);
for (String sentence : testCase){
    List<Term> termList = segment.seg(sentence);
    System.out.println(termList);
}
日本人名识别
String[] testCase = new String[]{
        "北川景子参演了林诣彬导演的《速度与激情3》",
        "林志玲亮相网友:确定不是波多野结衣?",
};
Segment segment = HanLP.newSegment().enableJapaneseNameRecognize(true);
for (String sentence : testCase){
    List<Term> termList = segment.seg(sentence);
    System.out.println(termList);
}
地名识别
String[] testCase = new String[]{
        "武胜县新学乡政府大楼门前锣鼓喧天",
        "蓝翔给宁夏固原市彭阳县红河镇黑牛沟村捐赠了挖掘机",
};
Segment segment = HanLP.newSegment().enablePlaceRecognize(true);
for (String sentence : testCase)
{
    List<Term> termList = segment.seg(sentence);
    System.out.println(termList);
}
机构名识别
String[] testCase = new String[]{
    "我在上海林原科技有限公司兼职工作,",
    "我经常在台川喜宴餐厅吃饭,",
    "偶尔去地中海影城看电影。",
};
Segment segment = HanLP.newSegment().enableOrganizationRecognize(true);
for (String sentence : testCase){
    List<Term> termList = segment.seg(sentence);
    System.out.println(termList);
}
关键词提取
String content = "程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。";
List<String> keywordList = HanLP.extractKeyword(content, 5);
System.out.println(keywordList);
自动摘要
String document = "算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n" +
        "算法可以宽泛的分为三类,\n" +
        "一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。\n" +
        "二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。\n" +
        "三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。";
List<String> sentenceList = HanLP.extractSummary(document, 3);
System.out.println(sentenceList);
短句提取
String text = "算法工程师\n" +
                "算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。\n" +
                "\n" +
                "1职位简介\n" +
                "算法工程师是一个非常高端的职位;\n" +
                "专业要求:计算机、电子、通信、数学等相关专业;\n" +
                "学历要求:本科及其以上的学历,大多数是硕士学历及其以上;\n" +
                "语言要求:英语要求是熟练,基本上能阅读国外专业书刊;\n" +
                "必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。\n" +
                "\n" +
                "2研究方向\n" +
                "视频算法工程师、图像处理算法工程师、音频算法工程师 通信基带算法工程师\n" +
                "\n" +
                "3目前国内外状况\n" +
                "目前国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。\n" +
                "在计算机音视频和图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。\n" +
                "在通信物理层等一维信息领域目前常用的算法:无线领域的RRM、RTT,传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。\n" +
                "另外数据挖掘、互联网搜索算法也成为当今的热门方向。\n" +
                "算法工程师逐渐往人工智能方向发展。";
List<String> phraseList = HanLP.extractPhrase(text, 10);
System.out.println(phraseList);
拼音转换
String text = "重载不是重任";
List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
System.out.print("原文,");
for (char c : text.toCharArray()) {
    System.out.printf("%c,", c);
}
System.out.print("拼音(数字音调),");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin);
}
System.out.print("拼音(符号音调),");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getPinyinWithToneMark());
}
System.out.print("拼音(无音调),");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getPinyinWithoutTone());
}
System.out.print("声调,");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getTone());
}
System.out.print("声母,");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getShengmu());
}
System.out.print("韵母,");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getYunmu());
}
System.out.print("输入法头,");
for (Pinyin pinyin : pinyinList) {
    System.out.printf("%s,", pinyin.getHead());
}
简繁转换
System.out.println(HanLP.convertToTraditionalChinese("用笔记本电脑写程序"));
System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當上皇后,就能買士多啤梨慶祝了」"));
文本推荐
Suggester suggester = new Suggester();
String[] titleArray =(
                "威廉王子发表演说 呼吁保护野生动物\n" +
                "《时代》年度人物最终入围名单出炉 普京马云入选\n" +
                "“黑格比”横扫菲:菲吸取“海燕”经验及早疏散\n" +
                "日本保密法将正式生效 日媒指其损害国民知情权\n" +
                "英报告说空气污染带来“公共健康危机”"
        ).split("\\n");
for (String title : titleArray){
     suggester.addSentence(title);
    }
System.out.println(suggester.suggest("发言", 1));       // 语义
System.out.println(suggester.suggest("危机公共", 1));   // 字符
System.out.println(suggester.suggest("mayun", 1));      // 拼音
语义距离
WordVectorModel wordVectorModel = trainOrLoadModel();
printNearest("中国", wordVectorModel);
printNearest("美丽", wordVectorModel);
printNearest("购买", wordVectorModel);

// 文档向量
DocVectorModel docVectorModel = new DocVectorModel(wordVectorModel);
String[] documents = new String[]{
            "山东苹果丰收",
            "农民在江苏种水稻",
            "奥运会女排夺冠",
            "世界锦标赛胜出",
            "中国足球失败",
        };

System.out.println(docVectorModel.similarity(documents[0], documents[1]));
System.out.println(docVectorModel.similarity(documents[0], documents[4]));

for (int i = 0; i < documents.length; i++){
            docVectorModel.addDocument(i, documents[i]);
    }

printNearestDocument("体育", documents, docVectorModel);
printNearestDocument("农业", documents, docVectorModel);
printNearestDocument("我要看比赛", documents, docVectorModel);
printNearestDocument("要不做饭吧", documents, docVectorModel);
依存句法分析
CoNLLSentence sentence = HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");
System.out.println(sentence);
// 可以方便地遍历它
for (CoNLLWord word : sentence){
      System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
    }
// 也可以直接拿到数组,任意顺序或逆序遍历
CoNLLWord[] wordArray = sentence.getWordArray();
for (int i = wordArray.length - 1; i >= 0; i--){
      CoNLLWord word = wordArray[i];
      System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
     }
// 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根
CoNLLWord head = wordArray[12];
while ((head = head.HEAD) != null){
       head == CoNLLWord.ROOT ? System.out.println(head.LEMMA) : System.out.printf("%s --(%s)--> ", head.LEMMA, head.DEPREL);
     }

标签:集成,springboot,System,String,算法,println,data,hnlp,out
From: https://blog.csdn.net/m0_70720259/article/details/143176952

相关文章

  • 高效集成:小满OKKICRM与金蝶云星空的数据对接案例
    小满OKKICRM数据集成到金蝶云星空的技术案例分享在企业信息化建设中,数据的高效集成和管理是关键环节。本文将聚焦于一个实际运行的系统对接集成案例:小满客户=>金蝶客户(覆盖)--ok_copy,通过数据集成平台实现小满OKKICRM的数据无缝对接到金蝶云星空。为了确保数据集成过程的高效性和......
  • Springboot车辆充电桩管理系统的设计与实现mv56d(程序+源码+数据库+调试部署+开发环境)
    系统程序文件列表项目功能:用户,员工,电桩类别,充电桩,报修信息,报修处理开题报告内容Springboot车辆充电桩管理系统的设计与实现开题报告一、研究背景与意义随着电动汽车的快速发展和普及,充电桩作为电动汽车的重要配套设施,其数量和管理效率直接影响到电动汽车的推广和使......
  • Springboot车辆充电桩3l3fa(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表项目功能:用户,电桩类别,充电桩,充电桩报修,维修员,维修回复开题报告内容Springboot车辆充电桩管理系统开题报告一、研究背景随着电动汽车的普及和推广,充电桩作为电动汽车的主要充电设备,在城市中得到了广泛的应用。然而,目前存在着充电桩数量不足、充电速......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘 要大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在网络小说的要求下,开发一款整体式结构的小说网站,将复杂的系统进行拆分,能够实现对需求的变化快速响应、系统稳定性的保......
  • 高效集成:旺店通旗舰版与MySQL的数据对接方案
    旺店通旗舰版-其他入库单-->BI泰海-其他入库单表_原始查询(2024年起)数据集成方案在现代企业的数据管理中,如何高效、可靠地实现系统间的数据对接是一个关键挑战。本文将分享一个具体的技术案例,展示如何通过轻易云数据集成平台,将旺店通·旗舰奇门的数据无缝集成到MySQL数据库中。......
  • 金蝶云星辰与旺店通的库存数据集成实现
    PACKAGE-金蝶云星辰商品库存对接旺店通盘点单在企业信息化管理中,数据的高效集成和实时同步至关重要。本文将分享一个具体的系统对接集成案例:如何将金蝶云星辰V2的数据无缝集成到旺店通·企业奇门,以实现商品库存的精准盘点。本次方案命名为“PACKAGE-金蝶云星辰商品库存对接旺店......
  • 金蝶云星空与聚水潭的高效数据集成案例
    在企业信息化管理中,数据的高效流动和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例:如何通过数据集成平台,将金蝶云星空中的直接调拨单数据无缝集成到聚水潭的其他出库单中。技术要点API接口调用:金蝶云星空:我们使用executeBillQuery接口来抓取直接......
  • 旺店通-销售退货单集成到金蝶云星空的技术实现
    旺店通-销售退货单集成到金蝶云星空的技术实现在企业日常运营中,销售退货单的数据处理和管理是一个至关重要的环节。为了提升数据处理效率和准确性,我们将旺店通·旗舰奇门平台中的销售退货单数据集成到金蝶云星空系统中。本案例将详细探讨如何利用轻易云数据集成平台,实现这一复杂......
  • Springboot计算机毕业设计滁州市电动车牌照管理系统cfc49
    Springboot计算机毕业设计滁州市电动车牌照管理系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,法律法规,车辆类型,牌照申请,可选牌号,上牌业务,上牌预约,选定牌号,挂失登记,牌照信息,牌照......
  • Springboot餐饮结算系统v20h7
    Springboot餐饮结算系统v20h7本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,菜品分类,菜品信息开题报告内容一、研究背景与意义随着餐饮行业的快速发展,餐饮企业对高效、准确、智能化的餐饮......