HanLP是由一系列模型与算法组成的Java工具包,目标是遍及自然措辞处理在生产环境中的运用。不仅仅是分词,而是供应词法剖析、句法剖析、语义理解等完备的功能。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点
紧张的功能:1、分词 2、命名实体识别 3、关键词提取,自动择要 4、依存句法解析 5、简繁拼音转换 6、智能推举
技能参数
HanLP v1.2.8的特色:(摘录自官网)
最高分词速率2,000万字/秒(极速分词,2.0GHz i7)
35万词典,覆盖当代汉语常用词、网络新词等
337万接续BiGram文法模型
500 ms 词典加载
演习自2014年公民日报切分语料
词语标注集兼容《ICTPOS3.0汉语词性标记集》
词语标注集兼容《当代汉语语料库加工规范——词语切分与词性标注》
最低内存哀求120 MB(-Xms120m -Xmx120m -Xmn64m)
基于双数组Trie的AhoCorasick自动机算法实现O(n)多模式匹配
运行于Java6+
除了配置方法不作担保外,任何分词器都是线程安全的。
供应Lucene插件,兼容Lucene4.x
Apache License Version 2.0
HanLP产品初始知识产权归上海林原信息科技有限公司所有,任何人和企业可以无偿利用,可以对产品、源代码进行任何形式的修正, 可以打包在其他产品中进行发卖。任何利用了HanLP的全部或部分功能、词典、模型的项目、产品或文章等形式的成果必须显式注明HanLP及此项目主页。
下面是测试的代码以及利用的示例。
1、安装数据和程序是分开的,以是须要分开处理
maven
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.3.1</version>
</dependency>
数据包和配置文件:
示例配置文件 HanLP.properties:
#本配置文件中的路径的根目录,根目录+其他路径=绝对路径
#Windows用户请把稳,路径分隔符统一利用/ 这里是本地数据文件的目录,后面的配置不须要修正默认就可以运行
root=K:\\datas\\data\\
#核心词典路径
CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt
#2元语法词典路径
BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt
#停用词词典路径
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
#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,利用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。
#其余data/dictionary/custom/CustomDictionary.txt是个高质量的词库,请不要删除。所有词典统一利用UTF-8编码。
CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt;data/dictionary/person/nrf.txt nrf;
#CRF分词模型路径
CRFSegmentModelPath=data/model/segment/CRFSegmentModel.txt
#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
================================
java代码
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.CRF.CRFSegment;
import com.hankcs.hanlp.seg.NShort.NShortSegment;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.Viterbi.ViterbiSegment;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.IndexTokenizer;
import com.hankcs.hanlp.tokenizer.NLPTokenizer;
import com.hankcs.hanlp.tokenizer.SpeedTokenizer;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;
import com.hankcs.hanlp.tokenizer.TraditionalChineseTokenizer;
import java.util.List;
/
Created by zuaa on 2017/4/27.
/
public class HanlpTest1 {
public static void main(String[] args) {
System.out.println(HanLP.segment(\公众你好,核芯处理!
\"大众));
System.out.println(\"大众分词 ,下面开始测试分词\公众);
System.out.println(\"大众标准分词\"大众);
List<Term> termList = HanLP.segment(\"大众料号和供应商\"大众);
System.out.println(termList);
System.out.println(\公众NLP分词\公众);
termList = NLPTokenizer.segment(\"大众中国科学院打算技能研究所的宗成庆教授正在教授自然措辞处理课程\"大众);
System.out.println(termList);
System.out.println(\"大众索引分词\"大众);
termList = IndexTokenizer.segment(\"大众主副食品\"大众);
for (Term term : termList) {
System.out.println(term + \"大众 [\"大众 + term.offset + \"大众:\公众 + (term.offset + term.word.length()) + \"大众]\"大众);
}
System.out.println(\"大众繁体分词\公众);
termList = TraditionalChineseTokenizer.segment(\"大众大衛貝克漢不僅僅是名著名球員,球場以外,其妻為前辣妹合唱團成員維多利亞·碧咸,亦由於他擁有突出外表、百變髮型及正面的形象,以至自己品牌的男士喷鼻香水等商品,及長期擔任運動品牌Adidas的代言人,因此對大眾傳播媒介和時尚界等方面都具很大的影響力,在足球圈外所獲得的認受程度可謂前所未見。\"大众);
System.out.println(termList);
System.out.println(\公众==========极速词典分词==========\"大众);
String text = \"大众江西鄱阳湖干枯,中国最大淡水湖变成大草原\公众;
System.out.println(SpeedTokenizer.segment(text));
long start = System.currentTimeMillis();
int pressure = 1000000;
for (int i = 0; i < pressure; ++i) {
SpeedTokenizer.segment(text);
}
double costTime = (System.currentTimeMillis() - start) / (double) 1000;
System.out.printf(\"大众分词速率:%.2f字每秒\"大众, text.length() pressure / costTime);
System.out.println(\公众N-最短路径分词\公众);
System.out.println(\公众N最短路分词器 NShortSegment 比最短路分词器( DijkstraSegment )慢,但是效果轻微好一些,对命名实体识别能力更强。调用方法如下:\公众);
Segment nShortSegment = new NShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
Segment shortestSegment = new ViterbiSegment().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));
}
// System.out.println(\"大众CRF分词\"大众);
// System.out.println(\公众基于CRF模型和BEMS标注演习得到的分词器。调用方法如下:这里须要离线的数据支持须要配置好路径\公众);
// Segment segment = new CRFSegment();
// segment.enablePartOfSpeechTagging(true);
// termList = segment.seg(\"大众你看过穆赫兰道吗\公众);
// System.out.println(termList);
// for (Term term : termList) {
// if (term.nature == null) {
// System.out.println(\公众识别到新词:\"大众 + term.word);
// }
// }
System.out.println(\"大众对付工具类中的分词器,也可以利用暴露出来的SEGMENT成员对其进行配置\公众);
text = \"大众泽田依子是上外日本文化经济学院的外教\公众;
System.out.println(StandardTokenizer.segment(text));
StandardTokenizer.SEGMENT.enableAllNamedEntityRecognize(true);
System.out.println(StandardTokenizer.segment(text));
}
}
======分词======
public class Hanlptest2 {
public static void main(String[] args) {
String text = \"大众码农和孔雀女裸婚了\"大众;
// 标准分词
System.out.println(HanLP.segment(text));
CustomDictionary.add(\"大众孔雀女\"大众);
CustomDictionary.insert(\"大众码农\公众, \"大众nz 1024\"大众);
System.out.println(CustomDictionary.add(\"大众裸婚\"大众, \"大众v 2 nz 1\公众));
System.out.println(CustomDictionary.get(\公众裸婚\"大众));
// 以上是官网的例子,下面是我们利用的例子
System.out.println(HanLP.segment(text));
text = \"大众模块式连接器/以太网连接器\公众;
System.out.println(HanLP.segment(text));
CustomDictionary.add(\"大众连接器\公众);
CustomDictionary.add(\"大众模块式连接器\"大众);
CustomDictionary.add(\"大众以太网连接器\"大众);
text = \"大众模块式连接器/以太网连接器\"大众;
System.out.println(HanLP.segment(text));
//[模块式连接器/nz, //w, 以太网连接器/nz] 输出的结果会是我们哀求的
}
}
============================
public class HanlpTest3 {
public static void main(String[] args) {
System.out.println(\"大众中国人名识别\"大众);
String[] testCase = new String[]{
\公众签约仪式前,秦光荣、李纪恒、仇和等一同会见了参加签约的企业家。\"大众,
\公众王国强、高峰、汪洋、张朝阳光着头、韩寒、小四\"大众,
\公众张浩和胡康健复员回家了\公众,
\"大众王总和小丽结婚了\"大众,
\公众编剧邵钧林和稽道青说\"大众,
\"大众这里有关天培的有关业绩\"大众,
\公众龚学平等领导,邓颖超生前\"大众,
};
Segment segment = HanLP.newSegment().enableNameRecognize(true);
for (String sentence : testCase) {
List<Term> termList = segment.seg(sentence);
System.out.println(termList);
}
System.out.println(\"大众音译人名识别\"大众);
testCase = new String[]{
\"大众一桶冰水当头倒下,微软的比尔盖茨、Facebook的扎克伯格跟桑德博格、亚马逊的贝索斯、苹果的库克全都不惜湿身入镜,这些硅谷的科技人,飞蛾扑火似地捐躯演出,实在全为了慈善。\"大众,
\"大众天下上最长的姓名是简森·乔伊·亚历山大·比基·卡利斯勒·达夫·埃利奥特·福克斯·伊维鲁莫·马尔尼·梅尔斯·帕特森·汤普森·华莱士·普雷斯顿。\公众,
};
segment = HanLP.newSegment().enableTranslatedNameRecognize(true);
for (String sentence : testCase) {
List<Term> termList = segment.seg(sentence);
System.out.println(termList);
}
System.out.println(\"大众地名识别 还可以识别日本人名略过,不做例子\公众);
testCase = new String[]{
\公众武胜县新学乡政府大楼门前锣鼓喧天\"大众,
\"大众蓝翔给宁夏固原市彭阳县红河镇黑牛沟村落捐赠了挖掘机\"大众,
};
segment = HanLP.newSegment().enablePlaceRecognize(true);
for (String sentence : testCase) {
List<Term> termList = segment.seg(sentence);
System.out.println(termList);
}
System.out.println(\"大众机构名识别\公众);
testCase = new String[]{
\"大众我在贸泽兼职事情,\公众,
\"大众 新浪科技讯 北京韶光5月19日晚间,电子零件搜索引擎贸泽经由4年的发展终于实现盈利,不再为人为而发愁。\"大众,
};
segment = HanLP.newSegment().enableOrganizationRecognize(true);
for (String sentence : testCase) {
List<Term> termList = segment.seg(sentence);
System.out.println(termList);
}
}
}
===============
/
Created by zuaa on 2017/4/27.
/
public class HanlpTest4 {
public static void main(String[] args) {
System.out.println(\"大众篇章理解 关键词提取¶\n\"大众);
String content = \公众 Qegoo(快易购)是海内前辈的电子元器件选购导航平台,我们是由一群拥有大数据、电子商务、电子设计等工程技能专业人才所组成的经营团队。\n\公众 +
\公众\n\"大众 +
\"大众快易购科技成立于2011年,总部设立于深圳。多年来我们秉承以做事电子专业供应链的采购、工程师、电子元器件制造商、分销商,提升企业竞争力的理念,全力构建大略、易用、便利、高效的电子元器件搜索引擎,搜集环球的电子元器件库存和价格海量信息,以一站式的呈现办法,让采购和工程师得以在更短的韶光内,透过Qegoo搜索平台轻松办理事情上的需求。\n\"大众 +
\公众\n\"大众 +
\"大众快易购以持续精进的精神,提升用户的事情效能为做事宗旨。我们将不断地善用海量数据库的信息,供应客户专属的做事,追求更高的做事代价,为行业做出更大的贡献。\"大众;
List<String> keywordList = HanLP.extractKeyword(content, 5);
System.out.println(keywordList);
System.out.println(\"大众自动择要¶\"大众);
String document = content;
List<String> sentenceList = HanLP.extractSummary(document, 3);
System.out.println(sentenceList);
System.out.println(\公众短语提取\公众);
List<String> phraseList = HanLP.extractPhrase(document, 10);
System.out.println(phraseList);
}
}
========HanlpTest5 ========
/
Created by zuaa on 2017/4/27.
/
public class HanlpTest5 {
public static void main(String[] args) {
System.out.println(\公众汉语少不了面对简体繁体、汉字拼音的相互转换。HanLP基于双数组Trie树AC自动机算法供应了性能极高的转换功能。\公众);
System.out.println(HanLP.convertToTraditionalChinese(\公众“往后等你当上皇后,就能买草莓庆祝了”\"大众));
System.out.println(HanLP.convertToSimplifiedChinese(\公众用筆記簿型電腦寫程式HelloWorld\"大众));
System.out.println(\公众拼音转换¶\n\"大众);
String text = \"大众重载不是重任\公众;
List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
System.out.print(\公众输入法头,\"大众);
for (Pinyin pinyin : pinyinList)
{
System.out.printf(\"大众%s,\"大众, pinyin.getHead());
}
System.out.println();
}
}
============HanlpTest6============
/
Created by zuaa on 2017/4/27.
/
public class HanlpTest6 {
public static void main(String[] args) {
System.out.println(\公众 语义间隔¶\n\"大众);
String[] wordArray = new String[]
{
\"大众姑娘\"大众,
\公众美女\"大众,
\"大众女孩子\"大众,
\"大众男生\"大众,
\"大众和尚\"大众,
\公众孙悟空\公众
};
for (String a : wordArray) {
for (String b : wordArray) {
System.out.println(a + \公众\t\"大众 + b + \"大众\t之间的间隔是\t\公众 + CoreSynonymDictionary.distance(a, b));
}
}
// 姑娘 姑娘 之间的间隔是 0
// 姑娘 美女 之间的间隔是 1327371300
// 姑娘 女孩子 之间的间隔是 1584413001
// 姑娘 男生 之间的间隔是 781806410
// 姑娘 和尚 之间的间隔是 1264936797
System.out.println(\"大众智能推举\公众);
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)); // 拼音
}
}
================================