nlp-tools

NLP

调研了几个nlp的工具,现总结如下:

ICTCLAS(NLPIR)

ICTCLAS是由中科院计算所张华平历经数年开发的nlp工具,采用C++编写。主要功能包括中文分词、词性标注、命名实体识别、用户词典功能,同时支持GBK编码、UTF8编码、BIG5编码,新增微博分词、新词发现与关键词提取。可以可视化界面操作和API方式调用。

FudanNLP

http://code.google.com/p/fudannlp

FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。FudanNLP及其包含数据集使用LGPL3.0许可证。
主要功能包括:

  • 信息检索:文本分类,新闻聚类。
  • 中文处理:中文分词,词性标注,实体名识别,关键词抽取,依存句法分析,时间短语识别。
  • 结构化学习:在线学习,层次分类,聚类,精确推理。

工具采用Java编写,提供了API的访问调用方式。

THU NLP

https://github.com/thunlp

清华的nlp工具,包含知识表示学习工具包KG2E,关键词抽取和标签推荐工具包THUTag,中文词法分析工具包THULAC,中文文本分类工具包THUCTC等工具包。

HIT LTP

http://ir.hit.edu.cn/ltp/

语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统,是集分词、词性标注、命名实体识别,句法分析以及语义角色标注为一体的中文语言分析平台,C++编写。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口,可视化工具,并且能够以网络服务(Web Service)的形式进行使用。

命名实体识别(NER)
1)模型简介
NER(Named Entity Recognition, 命名实体识别)把命名实体识别的过程看作一个多分类的问题,使用最大熵模型来完成这一任务。使用开源工具:Maximum Entropy Modeling Toolkit for Python and C++
2)使用资源
数据来源:1998年1月份人民日报+6月份人民日报前10000句
数据规模:1月份数据进行训练、6月份前10000句测试
3)性能及效率
性能:F1(overall)=92.25%
效率:11KB/s

Stanford Natural Language Processing Group

1. Stanford CoreNLP

采用Java编写的面向英文的处理工具,主要功能包括分词、词性标注、命名实体识别、语法分析等。

2. Stanford Word Segmenter

采用CRF进行分词,也是基于Java开发的,同时可以支持中文和Arabic。

3. Stanford POS Tagger

采用Java编写的面向英文、中文、法语、阿拉伯语、德语的命名实体识别工具。

4. Stanford Named Entity Recognizer

采用条件随机场模型的命名实体工具。

5. Stanford Parser

进行语法分析的工具,支持英文、中文、阿拉伯文和法语。

6. Stanford Classifier

采用Java编写的分类器。

HanLP

https://github.com/hankcs/HanLP

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

HanLP提供下列功能:

  • 中文分词
    • 最短路分词
    • N-最短路分词
    • CRF分词
    • 索引分词
    • 极速词典分词
    • 用户自定义词典
  • 词性标注
  • 命名实体识别
    • 中国人名识别
    • 音译人名识别
    • 日本人名识别
    • 地名识别
    • 实体机构名识别
  • 关键词提取
    • TextRank关键词提取
  • 自动摘要
    • TextRank自动摘要
  • 短语提取
    • 基于互信息和左右信息熵的短语提取
  • 拼音转换
    • 多音字
    • 声母
    • 韵母
    • 声调
  • 简繁转换
    • 繁体中文分词
    • 简繁分歧词(简体、繁体、臺灣正體、香港繁體)
  • 文本推荐
    • 语义推荐
    • 拼音推荐
    • 字词推荐
  • 依存句法分析
    • 基于神经网络的高性能依存句法分析器
    • MaxEnt依存句法分析
    • CRF依存句法分析
  • 语料库工具
    • 分词语料预处理
    • 词频词性词典制作
    • BiGram统计
    • 词共现统计
    • CoNLL语料预处理
    • CoNLL UA/LA/DA评测工具

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

Apache OpenNLP

http://opennlp.apache.org/index.html

Apache的OpenNLP库是自然语言文本的处理基于机器学习的工具包。它支持最常见的NLP任务,如断词,句子切分,部分词性标注,命名实体提取,分块,解析和指代消解。

官方提供了文档说明以及API,有命令行调用和程序代码使用两种方式。

LingPipe

http://alias-i.com/lingpipe/

LingPipe是一个由alias公司开发的自然语言处理的Java开源工具包。LingPipe目前已有很丰富的功能,包括主题分类(Top Classification)、命名实体识别(Named Entity Recognition)、词性标注(Part-of Speech Tagging)、句题检测(Sentence Detection)、查询拼写检查(Query Spell Checking)、兴趣短语检测(Interseting Phrase Detection)、聚类(Clustering)、字符语言建模(Character Language Modeling)、医学文献下载/解析/索引(MEDLINE Download, Parsing and Indexing)、数据库文本挖掘(Database Text Mining)、中文分词(Chinese Word Segmentation)、情感分析(Sentiment Analysis)、语言辨别(Language Identification)等API。

分词工具

1.IKAnalyzer

IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。IK支持细粒度和智能分词两种切分模式,支持英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符。可以支持用户自定义的词典,通过配置IKAnalyzer.cfg.xml文件来实现,可以配置自定义的扩展词典和停用词典。

特点:IK简单、易于扩展,分词结果较好并且采用Java编写。

2.结巴

最好的python中文分词组件

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  • 支持繁体分词
  • 支持自定义词典

3.paoding

庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。

中文分词具有极 高效率高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。

高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。

采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。

能够对未知的词汇进行合理解析

4.mmseg4j

mmseg4j core 使用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器。

MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。mmseg4j 已经实现了这两种分词算法。

词语的正确识别率达到了 98.41%。

附:关于中文分词器性能比较的一篇文章(2014.05.27更新)
http://www.cnblogs.com/wgp13x/p/3748764.html

算法开发包

1.crf项目

crf++

2.svm

svm-light 和 lib svm

参考

自然语言处理(NLP)常用开源工具总结—-不定期更新

HIT-SCIR LTP源代码