中文分词器学习报告

2017-05-21  本文已影响0人  安小宇

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();
              }
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读