Java中文分词hanlp使用
HanLP介绍:http://hanlp.linrunsoft.com/
github地址:https://github.com/hankcs/HanLP
说明:使用hanlp实现分词、智能推荐、关键字提取、摘要等,更多功能参考官网
项目结构
该项目中,.jar和data文件夹和.properties需要从官网/github下载,data文件夹下载
项目配置
修改hanlp.properties:
/Test/src/hanlp.properties:
本配置文件中的路径的根目录
root=E:/SourceCode/eclipsePlace/Test
root=./
......
配置文件的作用是告诉HanLP数据包即data文件夹的位置,root的值为data文件夹的父目录,可以使用绝对路径或相对路径。
测试代码
package com.test;
import java.util.List;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.suggest.Suggester;
import com.hankcs.hanlp.tokenizer.NLPTokenizer;
public class MainTest {
public static void main(String[] args) { System.out.println("首次编译运行时,HanLP会自动构建词典缓存,请稍候……\n"); //第一次运行会有文件找不到的错误但不影响运行,缓存完成后就不会再有了 System.out.println("标准分词:"); System.out.println(HanLP.segment("你好,欢迎使用HanLP!")); System.out.println("\n"); List<Term> termList = NLPTokenizer.segment("中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程"); System.out.println("NLP分词:"); System.out.println(termList); System.out.println("\n"); System.out.println("智能推荐:"); getSegement(); System.out.println("\n"); System.out.println("关键字提取:"); getMainIdea(); System.out.println("\n"); System.out.println("自动摘要:"); getZhaiYao(); System.out.println("\n"); System.out.println("短语提取:"); getDuanYu(); System.out.println("\n"); } /** * 智能推荐部分 */ public static void getSegement() { 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)); // 拼音 } /** * 关键字提取 */ public static void getMainIdea() { String content = "程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。"; List<String> keywordList = HanLP.extractKeyword(content, 5); System.out.println(keywordList); } /** * 自动摘要 */ public static void getZhaiYao() { String document = "算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n" + "算法可以宽泛的分为三类,\n" + "一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。\n" + "二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。\n" + "三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。"; List<String> sentenceList = HanLP.extractSummary(document, 3); System.out.println(sentenceList); } /** * 短语提取 */ public static void getDuanYu() { 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); }
}
运行结果
文章来源于lsh呵呵的博客
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Nginx 跳转规则
语法规则: location [=|||^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~ 开头表示区分大小写的正则匹配 ~ 开头表示不区分大小写的正则匹配 !和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。 多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考): 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 例子,有如下匹配规则: location = / { 规则A } location = /login { 规则B } location ^~ /static/ { 规则C } location ~ .(gif|jpg|png|js|css)$ { 规则D } location ~* .p...
- 下一篇
区块链开发公司谈供应链金融的主要挑战
自2017年以来,区块链技术作为比特币的基础技术,逐渐进入公众的视野,独立于比特币,引起了广泛的关注和广泛的讨论,并已成为全球创新领域最热门的话题。区块链技术是核心技术,有可能在蒸汽机,动力,信息和互联网技术之后引发第五波破坏性革命。从银行业务开始,到政府机构,邮政投递,食品健康,港口运输,零售到整个供应链,区块链正在以惊人的速度改变商业运作的模式和规则。 供应链金融的主要挑战 首先,供应链金融公司的发展受制于整个供应链行业的低透明度。供应链代表了从原材料到成品再到流通到消费者的商品生产和分销所涉及的所有环节。目前的供应链可以涵盖数百个阶段,跨越数十个地理区域,因此很难跟踪事件或调查事故。由于供应链普遍缺乏透明度,买方缺乏可靠的方法来验证和验证产品和服务的真实价值,这意味着我们支付的价格并不能准确反映产品的真实成本。 第二,交易成本高。以应收账款为例,从显性角度看,传统的供应链金融链涉及到账户付款人,信贷机构和保理机构的多方处理,需要很长的时间和成本。由于信托机构有必要完成相应的认证和会计处理,因此通常需要至少几周才能获得该帐户,并且程序很昂贵。从隐形的角度来看,为了获得应收款,贸易公...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池