这是另1套基于CBMWX3F的词法分析连串,依存句法分析(马克斯Ent依存句法分析、C奥迪Q5F依存句法分析)

1一. 印尼人名识别

  1. String[] testCase = new String[]{
  2.         “新木优子参演了林诣彬编剧的《速度与激情3》”,
  3.         “林志玲(英文名:Lin Chi-ling)亮相网络好友:鲜明不是北川景子?”,
  4. };
  5. Segment segment = HanLP.newSegment().enableJapaneseNameRecognize(true);
  6. for (String sentence : testCase)
  7. {
  8.     List<Term> termList = segment.seg(sentence);
  9.     System.out.println(termList);
  10. }

说明

  • 眼前正式分词器暗中同意关闭了马来西亚人名识别,用户必要手动开启;那是因为马来西亚人名的面世频率较低,但是又成本质量。

算法详解

接着用CRF++的crf_learn实行演练:

方式二、下载jar、data、hanlp.properties

HanLP将数据与程序分别,给予用户自定义的轻松。

布局后方可调用analyze接口或与旧接口包容的seg:

2. 行业内部分词

  1. List<Term> termList = StandardTokenizer.segment(“商品和劳务”);
  2. System.out.println(termList);

说明

  • HanLP中有壹体系“开箱即用”的静态分词器,以Tokenizer末尾,在接下去的例证中会继续介绍。

  • HanLP.segment实在是对StandardTokenizer.segment的包装。

  • 分词结果包涵词性,每一个词性的意趣请查阅《HanLP词性标注集》

算法详解

先是将人民晚报语言材质转变为CEscortF++格式:

5. N-最短路径分词

  1. Segment nShortSegment = new NShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
  2. Segment shortestSegment = new DijkstraSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
  3. String[] testCase = new String[]{
  4.         “今天,刘炟军案的关键人物,湖北女商人丁书苗在市2中级人民法院出庭受审。”,
  5.         “刘喜杰石国祥相会吴亚琴先进事迹报告团成员”,
  6.         };
  7. for (String sentence : testCase)
  8. {
  9.     System.out.println(“N-最短分词:” + nShortSegment.seg(sentence) + “\n最短路分词:” + shortestSegment.seg(sentence));
  10. }

说明

  • N最短路分词器NShortSegment比最短路分词器慢,但是效果稍微好一些,对命名实体识别能力更加强。

  • 相似景色下最短路分词的精度已经足足,而且速度比N最短路分词器快数倍,请酌定选取。

算法详解

将cws.txt格式的模型传入CRFSegmenter或C安德拉FLexicalAnalyzer的构造函数就可以创立分词器,同时HanLP会自动创立二进制缓存.txt.bin,下次加载耗费时间将决定在数百皮秒内。

 

ListwordList = segmenter.segment;

调用方法

HanLP大约具有的效益都足以经过工具类HanLP高速调用,当您想不起来调用方法时,只需键入HanLP.,IDE应当会交到提示,并展现HanLP完善的文书档案。

推荐介绍用户一贯通过工具类HanLP调用,这么做的好处是,现在HanLP进级后,用户无需修改调用代码。

所有Demo都位于com.hankcs.demo下。

输出为HanLP私有的2进制模型,风乐趣的话还足以经过命令导出为协作CTiguanF++的纯文本格式。

1、下载jar

hanlp.jar

接下来准备1份特征模板,也许直接用HanLP私下认可的:

版权

*/

4. 索引分词

  1. List<Term> termList = IndexTokenizer.segment(“主副食物”);
  2. for (Term term : termList)
  3. {
  4.     System.out.println(term + ” [” + term.offset + “:” + (term.offset + term.word.length()) + “]”);
  5. }

说明

  • 目录分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,此外通过term.offset能够赢得单词在文件中的偏移量。

* @param posModelPath C揽胜F词性标注器模型路线

九. 华夏人名识别

  1. String[] testCase = new String[]{
  2.         “签订契约秩序形式前,秦光荣、李纪恒、仇和等共同汇合了参加签名的公司家。”,
  3.         “王国强、高峰、汪洋、张朝阳(Charles)光着头、韩寒(hán hán )、小四”,
  4.         “张浩(Zhang Hao)和胡健康复员回家了”,
  5.         “王总和小丽成婚了”,
  6.         “编剧邵钧林和稽道青说”,
  7.         “那里有关天培的有关事迹”,
  8.         “龚学平等老总,邓颖超计生前”,
  9.         };
  10. Segment segment = HanLP.newSegment().enableNameRecognize(true);
  11. for (String sentence : testCase)
  12. {
  13.     List<Term> termList = segment.seg(sentence);
  14.     System.out.println(termList);
  15. }

说明

  • 时下分词器基本上都暗许开启了中夏族名识别,比如HanLP.segment()接口中运用的分词器等等,用户无需手动开启;上边的代码只是为重视申。

  • 有自然的误命中率,比如误命中关键年,则能够透过在data/dictionary/person/nr.txt加盟一条关键年 A 1来排除关键年用作人名的大概性,也得以将关键年作为新词登记到自定义词典中。

  • 假诺您通过上述格局消除了难点,欢迎向自个儿付诸pull
    request,词典也是金玉的能源。

算法详解

};

品种地址

HanLP项目主页:https://github.com/hankcs/HanLP 

HanLP下载地址:https://github.com/hankcs/HanLP/releases 

java -cp hanlp.jar com.hankcs.hanlp.model.crf.crfpp.crf_learn -T
cws.bin cws.txt

方式一、通过Maven的pom.xml

为了便利用户,特提供放置了数据包的Portable版,只需在pom.xml参预:

  1. <dependency>
  2.     <groupId>com.hankcs</groupId>
  3.     <artifactId>hanlp</artifactId>
  4.     <version>portable-1.2.4</version>
  5. </dependency>

零配置,就可以使用基本功用(除C奥迪Q7F分词、依存句法分析外的整整职能)。连Maven都无心用的话,能够直接下载portable版的jar

如若用户有自定义的须要,能够参考格局2,使用hanlp.properties实行配置。

时下Portable体积仅仅五.7MB,作为代价,使用的是1玖九玖年的小词典,对今世中文的辅助少数;所以依然建议外挂上边包车型大巴数量包比较好。

System.out.println;

下载与计划

/**

8. 用户自定义词典

  1. public class DemoCustomDictionary
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         // 动态扩张
  6.         CustomDictionary.add(“攻城狮”);
  7.         // 强行插队
  8.         CustomDictionary.insert(“白富美”, “nz 1024”);
  9.         // 删除词语(注释掉试试)
  10. //        CustomDictionary.remove(“攻城狮”);
  11.         System.out.println(CustomDictionary.add(“单身狗”, “nz 1024 n 1”));
  12.         System.out.println(CustomDictionary.get(“单身狗”));
  13.  
  14.         String text = “攻城狮翻盘单身狗,迎娶美眉,走上人生巅峰”;  // 怎么大概噗哈哈!
  15.  
  16.         // DoubleArrayTrie分词
  17.         final char[] charArray = text.toCharArray();
  18.         CustomDictionary.parseText(charArray, new AhoCorasickDoubleArrayTrie.IHit<CoreDictionary.Attribute>()
  19.         {
  20.             @Override
  21.             public void hit(int begin, int end, CoreDictionary.Attribute value)
  22.             {
  23.                 System.out.printf(“[%d:%d]=%s %s\n”, begin, end, new String(charArray, begin, end – begin), value);
  24.             }
  25.         });
  26.         // 首字哈希之后二分的trie树分词
  27.         BaseSearcher searcher = CustomDictionary.getSearcher(text);
  28.         Map.Entry entry;
  29.         while ((entry = searcher.next()) != null)
  30.         {
  31.             System.out.println(entry);
  32.         }
  33.  
  34.         // 标准分词
  35.         System.out.println(HanLP.segment(text));
  36.  
  37.         // Note:动态增加和删除不会影响词典文件
  38.         // 近年来CustomDictionary使用DAT储存词典文件中的词语,用BinTrie储存动态参预的辞藻,前者品质高,后者品质低
  39.         // 之所以保留动态增加和删除功能,1方面是野史遗留脾性,另1方面是调剂用;今后只怕会去掉动态增加和删除特性。
  40.     }

说明

  • CustomDictionary是一份全局的用户自定义词典,能够每壹天增加和删除,影响全部分词器。

  • 其它能够在别的分词器中关闭它。通过代码动态增加和删除不会保留到词典文件。

日增词典

  • CustomDictionary主词典文本路线是data/dictionary/custom/CustomDictionary.txt,用户能够在此扩张和谐的辞藻(不推荐);也足以独自新建一个文件文件,通过铺排文件CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 我的词典.txt;来充实词典(推荐)。

  • 始终建议将同样词性的辞藻放到同1个词典文件里,便于维护和享受。

词典格式

  • 每一行代表一个单词,格式遵守[单词] [词性A] [A的频次] [词性B] [B的频次] ... 倘使不填词性则象征采纳词典的默许词性。

  • 词典的默许词性私下认可是名词n,能够通过配备文件修改:全国地名大全.txt ns;只要词典路线前面空格紧接着词性,则该词典暗许是该词性。

  • 关于用户词典的越来越多音信请参考词典说Bellamy(Bellamy)章。

算法详解

不扩散模型路径时将暗中同意加载配置文件钦命的模型。

1玖. 文件推荐

  1. /**
  2.  * 文本推荐(句子等级,从壹多元句子中挑出与输入句子最相似的那些)
  3.  * @author hankcs
  4.  */
  5. public class DemoSuggester
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         Suggester suggester = new Suggester();
  10.         String[] titleArray =
  11.         (
  12.                 “威尔iam王子宣布解说 呼吁维护野生动物\n” +
  13.                 “《时期》年度人物最后入围名单出炉 普京总统马云(英文名:Jack Ma)当选\n” +
  14.                 ““黑格比”横扫菲:菲吸取“海燕”经验尽快疏散\n” +
  15.                 “东瀛保密法将标准生效 日本媒体指其加害人民知情权\n” +
  16.                 “英报告说空气污染带来“公共健康风险””
  17.         ).split(“\\n”);
  18.         for (String title : titleArray)
  19.         {
  20.             suggester.addSentence(title);
  21.         }
  22.         System.out.println(suggester.suggest(“发言”, 1));       // 语义
  23.         System.out.println(suggester.suggest(“危害公共”, 1));   // 字符
  24.         System.out.println(suggester.suggest(“mayun”, 1));      // 拼音
  25.     }
  26. }

说明

  • 在搜寻引擎的输入框中,用户输入多少个词,找寻引擎会联想出最合适的搜索词,HanLP完结了类似的作用。

  • 能够动态调节每一种识别器的权重

亿万先生官方网站 1

Apache License Version 2.0

  • Apache License Version 2.0

  • HanLP产品早先知识产权归罗曼蒂克之利兹原音信科学和技术有限集团有着,任何人和供销合作社方可免费使用,可以对产品、源代码进行别的款式的更动,能够打包在此外产品中开始展售。

  • 其他利用了HanLP的全体或部分机能、词典、模型的连串、产品或作品等花样的成果必须显式注解HanLP及此项目主页。

练习了一至二个模型后,可以协会CTucsonF词法分析器:

14. 主要词提取

  1. String content = “程序员(英文Programmer)是致力程序支付、维护的业老婆员。一般将程序员分为程序设计人员和顺序编码职员,但双方的无尽并不足够精通,尤其是在中华夏族民共和国。软件从业人士分为低等程序员、高档程序员、系统一分配析员和项目老董四大类。”;
  2. List<String> keywordList = HanLP.extractKeyword(content, 5);
  3. System.out.println(keywordList);

说明

  • 当中采取TextRankKeyword福寿齐天,用户能够一贯调用TextRankKeyword.getKeywordList(document, size)

算法详解

CRFSegmenter segmenter = new CRFSegmenter;

数据结构

Trie树(字典树)是HanLP中央银行使最多的数据结构,为此,小编达成了通用的Trie树,支持泛型、遍历、储存、载入。

用户自定义词典选取AhoCorasickDoubleArrayTrie和二分Trie树储存,其余词典接纳基于双数组Trie树(DoubleArrayTrie)实现的AC自动机AhoCorasickDoubleArrayTrie

* @param cwsModelPath C帕杰罗F分词器模型路线

20. 语义距离

  1. /**
  2.  * 语义距离
  3.  * @author hankcs
  4.  */
  5. public class DemoWordDistance
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         String[] wordArray = new String[]
  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.         for (String a : wordArray)
  35.         {
  36.             for (String b : wordArray)
  37.             {
  38.                 System.out.println(a + “\t” + b + “\t之间的距离是\t” + CoreSynonymDictionary.distance(a, b));
  39.             }
  40.         }
  41.     }
  42. }

说明

  • 思索的运用场景是寻找引擎对词义的了解,词与词并不只存在“同义词”与“非同义词”的涉嫌,就终于同义词,它们中间的意思也是有微妙的歧异的。

算法

  • 为各种词分配三个语义ID,词与词的相距通过语义ID的差得到。语义ID通过《同义词词林扩充版》计算而来。

System.out.println(analyzer.seg);

7. 极速词典分词

  1. /**
  2.  * 演示极速分词,基于AhoCorasickDoubleArrayTrie完毕的词典分词,适用于“高吞吐量”“精度1般”的地方
  3.  * @author hankcs
  4.  */
  5. public class DemoHighSpeedSegment
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         String text = “湖南玄武湖干涸,中夏族民共和国最大淡水湖变成大草原”;
  10.         System.out.println(SpeedTokenizer.segment(text));
  11.         long start = System.currentTimeMillis();
  12.         int pressure = 1000000;
  13.         for (int i = 0; i < pressure; ++i)
  14.         {
  15.             SpeedTokenizer.segment(text);
  16.         }
  17.         double costTime = (System.currentTimeMillis() – start) / (double)1000;
  18.         System.out.printf(“分词速度:%.2f字每秒”, text.length() * pressure / costTime);
  19.     }
  20. }

说明

  • 极速分词是词典最长分词,速度极其快,精度1般。

  • 在i7上跑出了3000万字每秒的进程。

算法详解

*/

15. 机关摘要

  1. String document = “算法可大约分成宗旨算法、数据结构的算法、数论算法、总结几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n” +
  2.         “算法能够广泛的分成三类,\n” +
  3.         “1,有限的显明算法,那类算法在简单的一段时间内终止。他们或者要花非常短日子来举行钦赐的天职,但仍将要大势所趋的小运内终止。那类算法得出的结果常取决于输入值。\n” +
  4.         “2,有限的非显然算法,那类算法在有限的日子内终止。但是,对于三个(或局地)给定的数值,算法的结果并不是唯一的或规定的。\n” +
  5.         “3,Infiniti的算法,是那么些由于并未有定义终止定义规则,或概念的条件无法由输入的数码满意而不停歇运营的算法。日常,Infiniti算法的发出是出于未能鲜明的概念终止条件。”;
  6. List<String> sentenceList = HanLP.extractSummary(document, 3);
  7. System.out.println(sentenceList);

说明

  • 其中使用TextRankSentence金镶玉裹福禄双全,用户能够直接调用TextRankSentence.getTopSentenceList(document, size)

算法详解

出于C++的运作功效和内部存款和储蓄器功效优于Java,所以推举直接动用C兰德ENCOREF++施行大规模练习。

仓库储存方式

词典有七个样子:文本文件(filename.txt)和缓存文件(filename.txt.bin或filename.txt.trie.dat和filename.txt.trie.value)。

文本文件  

  • 应用公开储存,UTF-八编码,COdysseyLF换行符。

缓存文件

  • 正是有的二进制文件,平常在文书文件的公文名前边加上.bin表示。有时候是.trie.dat和.trie.value。后者是历史遗留产物,分别代表trie树的数组和值。

  • 如果你改改了别样词典,只有删除缓存才具奏效。

* 加载配置文件钦定的模型

1. 第一个Demo

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

public CRFLexicalAnalyzer() throws IOException

贰一. 存活句法解析

  1. /**
  2.  * 依存句法解析
  3.  * @author hankcs
  4.  */
  5. public class DemoDependencyParser
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         System.out.println(HanLP.parseDependency(“把市经实行的对等交流条件引进党的生存和国家机关行政事务活动中”));
  10.     }
  11. }

说明

  • 内部接纳MaxEntDependencyParser兑现,用户能够一向调用MaxEntDependencyParser.compute(sentence)

  • 也足以调用基于随机条件场的存活句法分析器CRFDependencyParser.compute(sentence)

  • 在封闭测试集上准确率有十分九以上,但在开放测试集上则倒霉好。

算法详解

for (String sentence : tests)

1陆. 短语提取

  1. String text = “算法工程师\n” +
  2.         “算法(Algorithm)是壹连串化解难点的明明白白指令,相当于说,能够对一定标准的输入,在少数时间内获取所供给的出口。” +
  3.         “假使三个算法有瑕疵,或不适合于某些难点,实践那些算法将不会一挥而就这一个题目。不相同的算法或许用不一致的小时、” +
  4.         “空间或效用来完毕同样的天职。三个算法的好坏能够用空间复杂度与时光复杂度来衡量。算法工程师正是选取算法处理东西的人。\n” +
  5.         “\n” +
  6.         “壹职位简要介绍\n” +
  7.         “算法工程师是3个十二分高级的任务;\n” +
  8.         “专业须求:Computer、电子、通信、数学等皮之不存毛将焉附规范;\n” +
  9.         “学历要求:本科及其以上的学历,大多数是博士学历及其以上;\n” +
  10.         “语言要求:匈牙利(Magyarország)语须求是弹无虚发,基本上能翻阅海外专业书刊;\n” +
  11.         “必须精晓Computer有关文化,纯熟应用虚假工具MATLAB等,必须会1门编制程序语言。\n” +
  12.         “\n” +
  13.         “二钻探方向\n” +
  14.         “摄像算法工程师、图像处清理计算法工程师、音频算法工程师 通讯基带算法工程师\n” +
  15.         “\n” +
  16.         “三脚下国内外情况\n” +
  17.         “方今境内从事算法商量的工程师不少,不过高等算法工程师却很少,是一个十分缺少的行业内部工程师。” +
  18.         “算法工程师依照研商世界来分主要有点子/录像算法处理、图像技巧上边的二维音信算法处理和通讯物理层、” +
  19.         “雷达随机信号处理、生物历史学复信号处理等世界的1维消息算法处理。\n” +
  20.         “在Computer音录像和图形图像本领等贰维音讯算法处理方面最近可比先进的录像拍卖算法:机器视觉成为此类算法切磋的宗旨;” +
  21.         “另外还有二D转3D算法(二D-to-3D conversion),去隔行算法(de-interlacing),运动测度运动补偿算法” +
  22.         “(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),” +
  23.         “锐化处清理计算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。\n” +
  24.         “在通讯物理层等壹维新闻领域方今常用的算法:有线领域的陆风X8路虎极光M、RTT,传送领域的调制解调、信道均衡、信号检查测试、互联网优化、频域信号表达等。\n” +
  25.         “其余数码挖掘、互连网搜索算法也产生现行的热门方向。\n” +
  26.         “算法工程师渐渐往人工智能方向发展。”;
  27. List<String> phraseList = HanLP.extractPhrase(text, 5);
  28. System.out.println(phraseList);

说明

  • 内部选择MutualInformationEntropyPhraseExtractor兑现,用户能够一向调用MutualInformationEntropyPhraseExtractor..extractPhrase(text, size)

算法详解

C途乐F词法分析器

HanLP: Han Language Processing

华语处理包


HanLP是由一两种模型与算法组成的Java工具包,目的是推向自然语言处理在生育条件中的应用。HanLP具有功用完善、品质高效、架构清晰、语言材料时新、可自定义的特征。

HanLP提供下列功效:

中文分词

  • 最短路分词

  • N-最短路分词

  • CRF分词

  • 目录分词

  • 极速词典分词

  • 用户自定义词典

词性标注

取名实体识别

  • 中中原人名识别

  • 音译人名识别

  • 印度人名识别

  • 地名识别

  • 实体部门名识别

主要词提取

  • TextRank关键词提取

机动摘要

  • TextRank自动摘要

短语提取

  • 依据互新闻和左右消息熵的短语提取

拼音调换

  • 多音字

  • 声母

  • 韵母

  • 声调

简繁调换

  • 繁体汉语分词

  • 简繁区别词

文件推荐

  • 语义推荐

  • 拼音推荐

  • 字词推荐

现存句法分析

  • 马克斯Ent依存句法分析

  • C瑞鹰F依存句法分析

语言质感库工具

  • 分词语言材质预处理

  • 词频词性词典制作

  • BiGram统计

  • 词共现总结

  • CoNLL语料预处理

  • CoNLL UA/LA/DA评测工具

在提供足够意义的还要,HanLP内部模块坚定不移低耦合、模型百折不回惰性加载、服务坚贞不屈静态提供、词典百折不回公开采布,使用分外便于,同时自带一些语言材料处理工科具,接济用户磨炼自身的语言质地。


System.out.println(analyzer.analyze);

鸣谢

谢谢下列杰出开源项目:

感激NLP界各位专家老师的著述:

  • 《基于角色标注的神州人名自动识别斟酌》张华平 刘群

  • 《基于层叠隐马尔可夫模型的汉语命名实体识别》俞鸿魁 张华平 刘群
    吕学强 施水才

  • 《基于角色标注的汉语机构名识别》俞鸿魁 张华平 刘群

  • 《基于最大熵的存活句法分析》 辛霄 范士喜 王轩 孙乐

  • An Efficient Implementation of Trie Structures, JUN-ICHI AOE AND
    KATSUSHI MORIMOTO

  • TextRank: Bringing Order into Texts, Rada Mihalcea and Paul Tarau

取名实体识别

3. NLP分词

  1. List<Term> termList = NLPTokenizer.segment(“中科院计算技术商讨所的宗成庆教师正在授课自然语言处理课程”);
  2. System.out.println(termList);

说明

  • NLP分词NLPTokenizer会奉行总体命名实体识别和词性标注。

那是另1套基于C帕杰罗F的词法分析连串,类似感知机词法分析器,提供了完善的磨练与分析接口。

内部存款和储蓄器供给

内部存款和储蓄器120MB以上(-Xms120m -Xmx120m
-Xmn64m),标准数据包(350000主干词库+私下认可用户词典),分词测试平常。

成套词典和模型都以惰性加载的,要是您只用拼音调换的话,则只加载拼音词典,未加载的词典也正是不设有,不占内部存款和储蓄器。同理,模型也是如此。


/**

骨干格式

词典分为词频词性词典和词频词典。

词频词性词典

  • 每壹行代表三个单词,格式遵循[单词] [词性A] [A的频次] [词性B] [B的频次] ...

词频词典

  • 每1行代表1个单词,格式遵循[单词] [单词的频次]

  • 每1行的相间符为空格符或制表符

少数词典有温馨的专用格式,比就像义词词典兼容《同义词词林扩张版》的文本格式,而改换矩阵词典则是1个csv表格。

下文首要介绍通用词典,如不注解,词典特指通用词典。

华语分词

1八. 简繁转变

  1. /**
  2.  * 简繁调换
  3.  * @author hankcs
  4.  */
  5. public class DemoTraditionalChinese2SimplifiedChinese
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         System.out.println(HanLP.convertToTraditionalChinese(“用台式机Computer写程序”));
  10.         System.out.println(HanLP.convertToSimplifiedChinese(“「以後等妳當上皇后,就能買士多秋月梨慶祝了」”));
  11.     }
  12. }

说明

  • HanLP能够分辨简繁分化词,比如打印机=印表機。许多简繁转变工具不可能分别“现在”“皇后”中的多少个“后”字,HanLP可以。

算法详解

public CRFLexicalAnalyzer(String cwsModelPath, String posModelPath,
String nerModelPath) throws IOException

九. 音译人名识别

  1. String[] testCase = new String[]{
  2.                 “一桶冰水当头倒下,微软的Bill盖茨、推文(Tweet)的扎克Berg跟Sander博格、亚马逊(亚马逊(Amazon))的贝索斯、苹果的Cook全都不惜湿身入镜,那一个硅谷的科学技术人,飞蛾扑火似地捐躯演出,其实全为了慈善。”,
  3.                 “世界上最长的人名是简森·Joy·亚历山大·比基·温得和克斯勒·达夫·爱略特·福克斯·伊维鲁莫·马尔尼·梅尔斯·帕特森·汤普森·华莱土·普雷斯顿。”,
  4.         };
  5. Segment segment = HanLP.newSegment().enableTranslatedNameRecognize(true);
  6. for (String sentence : testCase)
  7. {
  8.     List<Term> termList = segment.seg(sentence);
  9.     System.out.println(termList);
  10. }

说明

  • 现阶段分词器基本上都暗中认可开启了音译人名识别,用户不用手动开启;下面的代码只是为重视申。

算法详解

segmenter.train(“data/test/pku98/199801.txt”, CWS_MODEL_PATH);

2、下载data

数据包 功能 体积(MB)
data.zip 全部词典,全部模型 280(注:分词词典大约40MB,主要是句法分析模型占体积,可以自行删除。)

GitHub的release页面Ctrl+F寻觅data即可,下载后解压到任意目录,接下去通过布置文件报告HanLP数据包的地方。

HanLP中的数据分为词典模型,其中词典是词法分析必需的,模型是句法分析必需的。

  1. data
  2. │  
  3. ├─dictionary
  4. └─model

用户能够自动增加和删除替换,借使不供给句法分析功用的话,随时能够去除model文件夹。

词性标注

6. CRF分词

  1. /**
  2.  * C宝马X5F分词(在最新兵磨炼练的未压缩十0MB模型下,能够收获较好的意义,能够投入生产条件)
  3.  *
  4.  * @author hankcs
  5.  */
  6. public class DemoCRFSegment
  7. {
  8.     public static void main(String[] args)
  9.     {
  10.         HanLP.Config.ShowTermNature = false;    // 关闭词性显示
  11.         Segment segment = new CRFSegment();
  12.         String[] sentenceArray = new String[]
  13.                 {
  14.                         “HanLP是由一名目大多模型与算法组成的Java工具包,目的是推广自然语言处理在生育环境中的应用。”,
  15.                         “鐵桿部隊憤怒情緒集結 馬英九腹背受敵”,           // 繁体无压力
  16.                         “馬英4次應連勝文“丐幫說”:稱黨內同志談話應謹慎”,
  17.                         “高锰酸钾,强氧化剂,紫浅紫蓝晶体,可溶于水,遇乙酸乙酯即被还原。常用作消毒剂、水净化剂、氧化剂、漂白剂、毒气吸收剂、二氧化碳精制剂等。”, // 专业名词有自然辨识本领
  18.                         “《夜晚的骰子》通过讲述浅草的舞女在暗夜中扔骰子的景况,寄托了作者对公惠农活区的真情实意”,    // 非音信语料
  19.                         “那一个像是真的[委屈]前边那些打扮太江户了,一点不上品…@hankcs”,                       // 和讯
  20.                         “鼎泰丰的小笼一点意味也尚无…每样都淡淡的…淡淡的,哪有饭铺二A的好次”,
  21.                         “Christina·克罗尔说:不,小编不是虎妈。笔者全家都喜爱音乐,作者也勉励他们那样做。”,
  22.                         “今天应用软件S:Sago Mini Toolbox作育孩子入手本事”,
  23.                         “财政部副参谋长王保卫安全调任国家计算局党组书记”,
  24.                         “2.3肆米男人娶一.5三米女听众 称夫妻生活没难点”,
  25.                         “你看过穆赫兰道吗”,
  26.                         “乐视一流手提式无线电话机是不是承载贾布斯的生态梦”
  27.                 };
  28.         for (String sentence : sentenceArray)
  29.         {
  30.             List<Term> termList = segment.seg(sentence);
  31.             System.out.println(termList);
  32.         }
  33.     }
  34. }

说明

  • CXC60F对新词有很好的辨别本领,可是不大概运用自定义词典。

算法详解

String[] tests = new String[]{

帮助中文分词(N-最短路分词、CEscortF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中华夏族民共和国人名、音译人名、印尼人名、地名、实体部门名识别),关键词提取,自动摘要,短语提取,拼音调换,简繁调换,文本推荐,依存句法分析(马克斯Ent依存句法分析、C凯雷德F依存句法分析)。提供Lucene插件,包容Lucene四.x。

与CRF++兼容

17. 拼音转变

  1. /**
  2.  * 汉字转拼音
  3.  * @author hankcs
  4.  */
  5. public class DemoPinyin
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         String text = “重载不是沉重”;
  10.         List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
  11.         System.out.print(“原文,”);
  12.         for (char c : text.toCharArray())
  13.         {
  14.             System.out.printf(“%c,”, c);
  15.         }
  16.         System.out.println();
  17.         System.out.print(“拼音(数字音调),”);
  18.         for (Pinyin pinyin : pinyinList)
  19.         {
  20.             System.out.printf(“%s,”, pinyin);
  21.         }
  22.         System.out.println();
  23.         System.out.print(“拼音(符号音调),”);
  24.         for (Pinyin pinyin : pinyinList)
  25.         {
  26.             System.out.printf(“%s,”, pinyin.getPinyinWithToneMark());
  27.         }
  28.         System.out.println();
  29.         System.out.print(“拼音(无音调),”);
  30.         for (Pinyin pinyin : pinyinList)
  31.         {
  32.             System.out.printf(“%s,”, pinyin.getPinyinWithoutTone());
  33.         }
  34.         System.out.println();
  35.         System.out.print(“声调,”);
  36.         for (Pinyin pinyin : pinyinList)
  37.         {
  38.             System.out.printf(“%s,”, pinyin.getTone());
  39.         }
  40.         System.out.println();
  41.         System.out.print(“声母,”);
  42.         for (Pinyin pinyin : pinyinList)
  43.         {
  44.             System.out.printf(“%s,”, pinyin.getShengmu());
  45.         }
  46.         System.out.println();
  47.         System.out.print(“韵母,”);
  48.         for (Pinyin pinyin : pinyinList)
  49.         {
  50.             System.out.printf(“%s,”, pinyin.getYunmu());
  51.         }
  52.         System.out.println();
  53.         System.out.print(“输入法头,”);
  54.         for (Pinyin pinyin : pinyinList)
  55.         {
  56.             System.out.printf(“%s,”, pinyin.getHead());
  57.         }
  58.         System.out.println();
  59.     }
  60. }

说明

  • HanLP不仅帮衬基础的汉字转拼音,还援助声母、韵母、音调、音标和输入法首字母首声母功用。

  • HanLP可以分辨多音字,也能给繁体普通话注拼音。

  • 最注重的是,HanLP采取的形式相称晋级到AhoCorasickDoubleArrayTrie,性能大幅进步,能够提供纳秒级的响应速度!

算法详解

* @throws IOException

三、配置文件

演示配置文件:hanlp.properties

布局文件的效应是报告HanLP数据包的职位,只需修改第1行

  1. root=usr/home/HanLP/

为data的父目录就可以,比如data目录是/Users/hankcs/Documents/data,那么root=/Users/hankcs/Documents/

  • 1旦选拔mini词典的话,则必要修改配置文件: 
    CoreDictionaryPath=data/dictionary/CoreNatureDictionary.mini.txt 
    BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.mini.txt

最后将HanLP.properties放入classpath即可,对于Eclipse,一般是:

  1. $Project/bin

Web项目标话能够献身如下地方:

  1. $Project/WEB-INF/classes

对此别的项目,都得以停放src目录下,编写翻译时IDE会自动将其复制到classpath中。

假若放置不当,HanLP会智能提醒当前环境下的熨帖路线,并且尝试从品种根目录读取数据集。

*

1叁. 部门名识别

  1. String[] testCase = new String[]{
  2.         “作者在法国首达累斯萨拉姆原科技(science and technology)有限集团专职工作,”,
  3.         “笔者时时在台川喜宴餐厅就餐,”,
  4.         “偶尔去莫桑比克海峡影城看电影。”,
  5. };
  6. Segment segment = HanLP.newSegment().enableOrganizationRecognize(true);
  7. for (String sentence : testCase)
  8. {
  9.     List<Term> termList = segment.seg(sentence);
  10.     System.out.println(termList);
  11. }

说明

  • 日前分词器私下认可关闭了部门名识别,用户供给手动开启;那是因为消耗质量,其实常用机构名都收音和录音在中央词典和用户自定义词典中。

  • HanLP的目标不是出现说法动态识别,在生产环境中,能靠词典消除的难点就靠词典化解,那是最便捷稳定的章程。

算法详解

segmenter.dumpTemplate(“data/test/crf/cws-template.txt”);

词典表明

本章详细介绍HanLP中的词典格式,满足用户自定义的供给。HanLP中有成都百货上千词典,它们的格式都以一般的,情势都是文本文书档案,随时能够修改。

CRFSegmenter segmenter = new CRFSegmenter(CWS_MODEL_PATH);

修章

HanLP的主干词典演练自人民早报2014语言材料,语言材质不是健全的,总会存在有的不当。这几个不当或然会形成分词出现意料之外的结果,那时请展开调节和测试情势排查难点:

  1. HanLP.Config.enableDebug();

大旨词性词频词典

  • 例如您在data/dictionary/CoreNatureDictionary.txt中发觉了二个不是词的词,只怕词性标注得驾驭不对,那么您能够修改它,然后删除缓存文件使其收效。

主导2元文法词典

  • 二元文法词典data/dictionary/CoreNatureDictionary.ngram.txt储存的是多少个词的传承,假如您发现不恐怕存在那种持续时,删掉即可。

  • 您也足以增多你感觉合理的继续,然则这八个词必须同时在主题词典中才会收效。

取名实体识别词典

  • 逸事剧中人物标注的命名实体识别相比正视词典,所以词典的质量小幅影响识别品质。

  • 那几个词典的格式与原理都是近似的,请阅读相应的小说或代码修改它。

如果难题消除了,欢迎向自家付出3个pull
request,那是自身在代码库中保存明文词典的原因,众擎易举!


训练

1二. 地名识别

  1. String[] testCase = new String[]{
  2.         “武胜县新学乡政党大楼门前锣鼓喧天”,
  3.         “蓝翔给宁夏银川市彭阳县红河镇黑牛沟村赠送了推土机”,
  4. };
  5. Segment segment = HanLP.newSegment().enablePlaceRecognize(true);
  6. for (String sentence : testCase)
  7. {
  8.     List<Term> termList = segment.seg(sentence);
  9.     System.out.println(termList);
  10. }

说明

  • 眼前行业内部分词器都暗中同意关闭了地名识别,用户须要手动开启;那是因为消耗品质,其实多数地名都选用在大旨词典和用户自定义词典中。

  • 在生育环境中,能靠词典化解的标题就靠词典化解,那是最便捷稳固的不二等秘书诀。

算法详解

segmenter.convertCorpus(“data/test/pku98/199801.txt”,
“data/test/crf/cws-corpus.tsv”);

可经过如下方式加载:

}

{

“商品和服务”,

默许模型陶冶自OpenCorpus/pku98/一九9玖0壹.txt,随hanlp 一.陆.2以上版本揭橥。

“法国巴黎华安工企董事长谭旭光和文书胡花蕊来到U.S.A.London今世艺术博物馆采风”,

CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();

在一.陆.2之上版本中,全部的词法分析接口都同时援救简繁。

CRFSegmenter segmenter = new CRFSegmenter;

CKoleosF的效果比感知机稍好壹些,不过磨炼进程较慢,也不帮忙在线学习。

“微软集团於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以聪明雲端、前端為導向的大改組。”
// 支持繁体中文

crf_learn cws-template.txt cws-corpus.tsv cws -t

CXC60F词性标注器的陶冶与加载与汉语分词类似,对应CRubiconFPOSTagger。

* 构造C冠道F词法分析器

* @param nerModelPath C哈弗F命名实体识别器模型路线

C奥德赛F命名实体识别也是近乎的用法,对应C科雷傲FNERecognizer。

·此处必须利用-t命令C福睿斯F++输出文本格式的模型cws.txt

预测

*

·HanLP只极度C奥迪Q5F++的文本模型,不包容2进制

语言材料格式等与感知机词法分析器一样,请先阅读《感知机词法分析器》。

相关文章