HanLP: Han Language Processing

汉语言处理包




HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

HanLP提供下列功能:

  • 中文分词

    • HMM-Bigram(速度与精度最佳平衡;一百兆内存)

      • 最短路分词、N-最短路分词
    • 由字构词(侧重精度,全世界最大语料库,可识别新词;适合NLP任务)
      • 感知机分词、CRF分词
    • 词典分词(侧重速度,每秒数千万字符;省内存)
      • 极速词典分词
    • 所有分词器都支持:
      • 索引全切分模式
      • 用户自定义词典
      • 兼容繁体中文
      • 训练用户自己的领域模型
  • 词性标注
    • HMM词性标注(速度快)
    • 感知机词性标注、CRF词性标注(精度高)
  • 命名实体识别
    • 基于HMM角色标注的命名实体识别 (速度快)

      • 中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
    • 基于线性模型的命名实体识别(精度高)
      • 感知机命名实体识别、CRF命名实体识别
  • 关键词提取
    • TextRank关键词提取
  • 自动摘要
    • TextRank自动摘要
  • 短语提取
    • 基于互信息和左右信息熵的短语提取
  • 拼音转换
    • 多音字、声母、韵母、声调
  • 简繁转换
    • 简繁分歧词(简体、繁体、臺灣正體、香港繁體)
  • 文本推荐
    • 语义推荐、拼音推荐、字词推荐
  • 依存句法分析
    • 基于神经网络的高性能依存句法分析器
    • 基于ArcEager转移系统的柱搜索依存句法分析器
  • 文本分类
    • 情感分析
  • 文本聚类
    • KMeans、Repeated Bisection、自动推断聚类数目k
  • word2vec
    • 词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
    • 文档语义相似度计算
  • 语料库工具
    • 部分默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考98年人民日报语料库。

在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便。默认模型训练自全世界最大规模的中文语料库,同时自带一些语料处理工具,帮助用户训练自己的模型。


项目主页

在线演示、Python调用、Solr及Lucene插件、论文引用、更多信息。


下载与配置

  • 方式一、Maven
    我还没学
  • 方式二、下载jar、data、hanlp.properties

1. 下载:data.zip

下载后解压到任意目录,接下来通过配置文件告诉HanLP数据包的位置。

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

data
│
├─dictionary
└─model

用户可以自行增删替换,如果不需要句法分析等功能的话,随时可以删除model文件夹。

2. 下载jar和配置文件:hanlp-release.zip

解压后如图:

配置文件的作用是告诉HanLP数据包的位置,只需修改第一行

root=D:/JavaProjects/HanLP/

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

最后将hanlp.properties放入classpath即可,对于多数项目,都可以放到src或resources目录下,编译时IDE会自动将其复制到classpath中。除了配置文件外,还可以使用环境变量HANLP_ROOT来设置root。安卓项目请参考demo。

如果放置不当,HanLP会提示当前环境下的合适路径,并且尝试从项目根目录读取数据集。
注意:在lib文件夹中也要放配置文件,不然编译错误。
配置完成项目如图:

调用方法

HanLP几乎所有的功能都可以通过工具类HanLP快捷调用,当你想不起来调用方法时,只需键入HanLP.,IDE应当会给出提示,并展示HanLP完善的文档。

所有Demo都位于com.hankcs.demo下,比文档覆盖了更多细节,更新更及时,强烈建议运行一遍。此处仅列举部分常用接口。

1. 第一个Demo

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

运行成功如下:

[你好/vl, ,/w, 欢迎/v, 使用/v, HanLP/nx, 汉语/gi, 处理/vn, 包/v, !/w]
  • 内存要求

    • 内存120MB以上(-Xms120m -Xmx120m -Xmn64m),标准数据包(35万核心词库+默认用户词典),分词测试正常。全部词典和模型都是惰性加载的,不使用的模型相当于不存在,可以自由删除。
    • HanLP对词典的数据结构进行了长期的优化,可以应对绝大多数场景。哪怕HanLP的词典上百兆也无需担心,因为在内存中被精心压缩过。如果内存非常有限,请使用小词典。HanLP默认使用大词典,同时提供小词典,请参考配置文件章节。

2. 标准分词

List<Term> termList = StandardTokenizer.segment("商品和服务");
System.out.println(termList);
  • 说明

    • HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。
    • HanLP.segment其实是对StandardTokenizer.segment的包装。
    • 分词结果包含词性,每个词性的意思请查阅《HanLP词性标注集》。
  • 算法详解
    • 《词图的生成》

3. NLP分词

System.out.println(NLPTokenizer.segment("我新造一个词叫幻想乡你能识别并标注正确词性吗?"));
// 注意观察下面两个“希望”的词性、两个“晚霞”的词性
System.out.println(NLPTokenizer.analyze("我的希望是希望张晚霞的背影被晚霞映红").translateLabels());
System.out.println(NLPTokenizer.analyze("支援臺灣正體香港繁體:微软公司於1975年由比爾·蓋茲和保羅·艾倫創立。"));
  • 说明

    • NLP分词NLPTokenizer会执行词性标注和命名实体识别,由结构化感知机序列标注框架支撑。
    • 默认模型训练自9970万字的大型综合语料库,是已知范围内全世界最大的中文分词语料库。语料库规模决定实际效果,面向生产环境的语料库应当在千万字量级。欢迎用户在自己的语料上训练新模型以适应新领域、识别新的命名实体。

4. 索引分词

List<Term> termList = IndexTokenizer.segment("主副食品");
for (Term term : termList)
{System.out.println(term + " [" + term.offset + ":" + (term.offset + term.word.length()) + "]");
}
  • 说明

    • 索引分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,另外通过term.offset可以获取单词在文本中的偏移量。
    • 任何分词器都可以通过基类SegmentenableIndexMode方法激活索引模式。

5. 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));
}
  • 说明

    • N最短路分词器NShortSegment比最短路分词器慢,但是效果稍微好一些,对命名实体识别能力更强。
    • 一般场景下最短路分词的精度已经足够,而且速度比N最短路分词器快几倍,请酌情选择。
  • 算法详解
    • 《N最短路径的Java实现与分词应用》

6. CRF分词

        CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();String[] tests = new String[]{"商品和服务","上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观","微软公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。" // 支持繁体中文};for (String sentence : tests){System.out.println(analyzer.analyze(sentence));}
  • 说明

    • CRF对新词有很好的识别能力,但是开销较大。
  • 算法详解
    • 《CRF中文分词、词性标注与命名实体识别》

7. 极速词典分词

/*** 演示极速分词,基于AhoCorasickDoubleArrayTrie实现的词典分词,适用于“高吞吐量”“精度一般”的场合* @author hankcs*/
public class DemoHighSpeedSegment
{public static void main(String[] args){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);}
}
  • 说明

    • 极速分词是词典最长分词,速度极其快,精度一般。
    • 在i7-6700K上跑出了4500万字每秒的速度。
  • 算法详解
    • 《Aho Corasick自动机结合DoubleArrayTrie极速多模式匹配》

hanLP的分词的使用相关推荐

  1. python 分词nlp,学习NLP的第四天——hanlp字典分词的Python实现,4,HanLP,词典

    通过<自然语言处理入门>(何晗)的第2章来学习HanLP词典分词的Python实现.这里主要记录我在学习过程中整理的知识.调试的代码和心得理解,以供其他学习的朋友参考. 首先,我们导入Ha ...

  2. solr mysql 全文搜索_全文检索Solr集成HanLP中文分词

    以前发布过 HanLP 的 Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),于是就抽空做了个Solr插件出来, ...

  3. Elasticsearch:hanlp 中文分词器

    HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...

  4. hanlp中文分词、提取摘要关键字、语句分析、智能推荐

    hanlp资源: hanlp介绍:http://hanlp.linrunsoft.com/ hanlp下载:https://github.com/hankcs/HanLP hanlp(分词)使用:ht ...

  5. Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置

    目录 hanlp分词插件 插件安装 在线安装 离线安装 安装数据包 同义词配置 hanlp分词插件 HanLP是一款免费开源(Apache License 2.0协议)中文语义分词工具,它提供中文分词 ...

  6. spark集群使用hanlp进行分布式分词操作说明

    本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自[qq_33872191]的博客,感谢分享!以下为全文:   分两步: 第一步:实现han ...

  7. java hanlp分词_Hanlp分词实例:Java实现TFIDF算法

    算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理. 关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013 ...

  8. NLP快速入门:手把手教你用HanLP做中文分词

    导读:随着自然语言处理(Natural Language Processing, NLP)技术日趋成熟,实现中文分词的工具也越来越多.中文分词技术作为中文自然语言处理的第一项核心技术,是众多上层任务的 ...

  9. 基于 HanLP 的 ES 中文分词插件

    一.分词插件 1.分词器概念 在 ES 中,分词器的作用是从文本中提取出若干词元(token)来支持索引的存储和搜索,分词器(Analyzer)由一个分解器(Tokenizer).零个或多个词元过滤器 ...

最新文章

  1. linux shell for 循环变量,shell for循环总结
  2. 本科刚毕业有点迷茫,想入门单片机,应该怎么开始?
  3. 螳螂捕蝉黄雀在后!地下黑客论坛免费远控木马被曝“后门”
  4. DataGridView和DataTable同步排序
  5. Google的云计算,你真的安全吗?
  6. mybatis动态sql中的where标签的使用
  7. 断点续传和下载原理分析
  8. java加锁多线程改为单线程_GUI为什么不设计为多线程(用户事件和底层事件的流程是相反的,每层都加锁效率太低,共用一把锁那就是单线程)...
  9. NPOI 操作EXCEL 小计
  10. python2.7.5 怎么装redis_python中Redis的简要介绍以及Redis的安装,配置
  11. 浏览器请求静态资源的流程
  12. 10.深入分布式缓存:从原理到实践 --- EVCache探秘
  13. 459.重复的子字符串
  14. 大话数据结构系列之快速排序算法
  15. Python官方中文文档网址和Python标准库官方中文文档网址
  16. 如何使用MATLAB绘制平滑曲线
  17. 搜狗站长平台多线程推送工具【免码-免VPS】
  18. 将Linux 标准输出,错误输出重定向到文件
  19. 离散数学——逻辑推理系统
  20. windows11搜索按钮回退

热门文章

  1. 阿里高级技术专家张建飞:面对复杂业务,if-else coder 如何升级?
  2. 统信操作系统《扫雷》软件构建与发布(Qt+deb)
  3. 互联网营销方法十五个
  4. 【智能制造】见识一下某航空企业的智能制造技术架构!
  5. 什么是Use Case?
  6. 人大金仓KingbaseES适配Activiti工作流时踩下的坑
  7. burpsuite靶场系列之高级漏洞篇 - HTTP请求走私专题
  8. 广西软件性能测试,道亨软件承建广西智慧水库标杆项目
  9. redis的过期键删除策略
  10. python灰帽子学习感想