中文分词器学习报告
1、ICTCLAS – 全球最受欢迎的汉语分词系统
中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS (Institute of Computing Technology, Chinese Lexical Analysis System)。
主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;微博分词;新词发现与关键词提取功能;支持GBK编码、UTF8编码、BIG5编码。
系统平台:Windows
开发语言:C/C++、Java、C#
使用方式:dll调用
开源网址:http://ictclas.nlpir.org/(自然语言处理与信息检索共享平台)
在线演示:http://ictclas.nlpir.org/nlpir/
分析示例
分析文本
1.png
分词标注
2.png
实体抽取1
3.png
实体抽取2
4.png
词频统计
5.png
情感分析
6.png
关键词提取
7.png
2、SCWS – 简易中文分词系统
SCWS:Simple Chinese Word Segmentation (简易中文分词系统)。
采用自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试准确率在 90% ~ 95% 之间,基本满足一些中小型搜索引擎、关键字提取等场合运用。
SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。
系统平台:Windows/Unix
开发语言:C
使用方式:PHP扩展(易与现有的基于PHP架构的Web系统继续集成)
开源网址:http://www.ftphp.com/scws/
在线演示:http://www.xunsearch.com/scws/demo.php
分析示例
8.png分词结果
9.png
3、IKAnalyzer 开源的轻量级中文分词工具包
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。
支持用户词典扩展定义,采用歧义分析算法优化查询关键字的搜索排列组合;采用多子处理器分析模式,优化的词典存储,更小的内存占用。
系统平台: 跨平台
开发语言: Java
分词示例
package org.wltea.analyzer.sample;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class IKAnalzyerDemo {
public static void main(String[] args){
//构建IK分词器,使用smart分词模式
Analyzer analyzer = new IKAnalyzer(true);
//获取Lucene的TokenStream对象
TokenStream ts = null;
try {
ts = analyzer.tokenStream("myfield", new StringReader("这是一个中文分词的例子,你可以直接运行它!IKAnalyer can analysis english text too"));
//获取词元位置属性
OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class);
//获取词元文本属性
CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);
//获取词元文本属性
TypeAttribute type = ts.addAttribute(TypeAttribute.class);
//重置TokenStream(重置StringReader)
ts.reset();
//迭代获取分词结果
while (ts.incrementToken()) {
System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type());
}
//关闭TokenStream(关闭StringReader)
ts.end(); // Perform end-of-stream operations, e.g. set the final offset.
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放TokenStream的所有资源
if(ts != null){
try {
ts.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}