ICTCLAS中文分词库的使用

ICTCLAS计算所中文分词(当前最好的汉语词法分析器)系统特点:准确度高(98.5%),性能优越(500KB/s分词速度),词性标注(POS tagging)且支持多种标注集,支持用户自定义词典,支持用户自定义词性标注,支持多平台,支持模块组合关闭(在
Configure.xml
中设置),支持多编码(UTF-8, GB(GB2312, GBK, GB10380)和BIG5)且可以自动识别编码等。更多详见官网文档FAQ

使用ICTCLAS库实现中文分词(Linux 32 bit)
下载ICTCLAS:

从ICTCLAS下载
ICTCLAS2011_Linux_32_c
(ICTCLAS 2011,内核版本5.0)。

    wget http://www.ictclas.org/down/50/ICTCLAS50_Linux_RHAS_32_C.rar      
unrar -x ICTCLAS50_Linux_RHAS_32_C.rar  

创建测试目录,并拷贝API到该目录下

mkdir test  
cd test  
mkdir ICTCLAS_API  
cp -fR ICTCLAS50_Linux_RHAS_32_C/API/* ./ICTCLAS_API  


test
目录下创建用户词典
userdict.txt
,填写:

洛杉矶@@LA  
奥巴马@@Obama  
最新动态@@nr  


test
目录下创建文件
test.c

 
/* 编译动态: g++ test.c -L./ICTCLAS_API -lICTCLAS50 -DOS_LINUX -o test静态: g++ test.c -L./ICTCLAS_API -lICTCLAS50 -DOS_LINUX -o test -static*/
/* 处理字符串
#define ICTCLAS_API_PATH "ICTCLAS_API"
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "ICTCLAS_API/ICTCLAS50.h"
int main(int argc, char *argv[]) {
    //# 初始化    if (!ICTCLAS_Init(ICTCLAS_API_PATH)) {        fprintf(stderr, "Error: init failed, please put the ICTCLAS API under `%s` directory\n\n", ICTCLAS_API_PATH);        exit(EXIT_FAILURE);    }    printf("init ICTCLAS succeed\n");
    //# 设置词性标注集    ICTCLAS_SetPOSmap(ICT_POS_MAP_SECOND);
    //# 处理    const char *srcTxt = "随后奥巴马就离开了洛杉矶,预计奥巴马今天下午就回到华盛顿。以上就是今天上午的最新动态";    int srcLen = strlen(srcTxt);
    //未导入用户字典之前的处理    char *resTxt = NULL;    resTxt = (char *) malloc(srcLen * 6);    int resLen = 0;    resLen = ICTCLAS_ParagraphProcess(srcTxt, srcLen, resTxt, CODE_TYPE_UNKNOWN, 1);    printf("before:\n%s\n\n", resTxt);    free(resTxt);    resTxt = NULL;
    //导入用户词典(文本文件:一行一词(词和词性使用`@@`分隔,词性可以省略,且可以自定义任意词性),例如:中科院@@nr或北京市)    unsigned int itemsNum = ICTCLAS_ImportUserDictFile("./userdict.txt", CODE_TYPE_UNKNOWN);    printf("%d items loaded\n", itemsNum);
    /*    //也可以以字符串形式导入词典(词与词之间使用`;`分隔,如果指定词性,词与词性之间使用`@@`分隔,例如`中科院@@nr;分词@@v;系统@@adj;`或`中科院;分词;系统;`)    const char *dictStr = "洛杉矶@@LA;奥巴马@@Obama;最新动态@@nr";    unsigned int itemsNum = ICTCLAS_ImportUserDict(dicStr, strlen(dicStr), CODE_TYPE_UNKNOWN);    printf("%d items loaded\n", itemsNum);    */
    //如果保存用户词典,则下次分词的时候依然有效    ICTCLAS_SaveTheUsrDic();
    //导入用户词典之后分词    resTxt = (char *) malloc(srcLen * 6);    resLen = ICTCLAS_ParagraphProcess(srcTxt, srcLen, resTxt, CODE_TYPE_UNKNOWN, 1);    printf("after:\n%s\n\n", resTxt);    free(resTxt);
    //# 释放资源    ICTCLAS_Exit();    return 0;}  */
 
/*处理文件#define ICTCLAS_API_PATH "ICTCLAS_API"
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "ICTCLAS_API/ICTCLAS50.h"
#include <unistd.h>#include "restart.h"#include <errno.h>#include <fcntl.h>#define BLKSIZE 1024char buf[BLKSIZE];int main(int argc, char *argv[]) {
    if (!ICTCLAS_Init(ICTCLAS_API_PATH)) {        fprintf(stderr, "Error: init failed, please put the ICTCLAS API under `%s` directory\n\n", ICTCLAS_API_PATH);        exit(EXIT_FAILURE);    }    printf("init ICTCLAS succeed\n");
        ICTCLAS_SetPOSmap(ICT_POS_MAP_SECOND);
    char *fromfile=argv[1];    char *tofile=argv[2];    int fromfd;    int tofd;    while (fromfd = open(fromfile, O_RDONLY), fromfd == -1 && errno == EINTR) ;
    printf("fromfd:\n%d\n\n", fromfd);    while (tofd = open(tofile,O_WRONLY|O_APPEND), tofd == -1 && errno == EINTR);
    printf("tofd:\n%d\n\n", tofd);    int bytesread,byteswritten;    for( ; ; ) {      if ((bytesread=read(fromfd,buf,BLKSIZE))<=0)   break;
    char resTxt[bytesread * 3];    int resLen = 0;    resLen = ICTCLAS_ParagraphProcess(buf,bytesread, resTxt, CODE_TYPE_UNKNOWN, 1);    printf("before:\n%s\n\n", resTxt);    printf("before:\n%d\n\n", resLen);    resLen=strlen(resTxt);    if((byteswritten = write(tofd,resTxt,resLen))==-1) break;
    printf("byteswritten:\n%d\n\n", byteswritten);
    }    ICTCLAS_Exit();    return 0;}
                                                                                        */
 

编译和运行(推荐静态编译):

g++ test.c -L./ICTCLAS_API -lICTCLAS50 -DOS_LINUX -o test -static  
./test  

根据输出的结果,可以得到ICTCLAS支持:用户词典,自定义词性等。

时间: 2024-10-17 03:43:28

ICTCLAS中文分词库的使用的相关文章

.net 的一个分词系统(jieba中文分词的.NET版本:jieba.NET)

简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以到它的在线演示站点体验下(注意第三行文字). .NET平台上常见的分词组件是盘古分词,但是已经好久没有更新了.最明显的是内置词典,jieba的词典有50万个词条,而盘古的词典是17万,这样会造成明显不同的分词效果.另外,对于未登录词,jieba“采用了基于汉字成词能力的HMM模型,使用了Viterb

jieba中文分词的.NET版本:jieba.NET

简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以到它的在线演示站点体验下(注意第三行文字). .NET平台上常见的分词组件是盘古分词,但是已经好久没有更新了.最明显的是内置词典,jieba的词典有50万个词条,而盘古的词典是17万,这样会造成明显不同的分词效果.另外,对于未登录词,jieba“采用了基于汉字成词能力的HMM模型,使用了Viterb

(转)jieba中文分词的.NET版本:jieba.NET

简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以到它的在线演示站点体验下(注意第三行文字). .NET平台上常见的分词组件是盘古分词,但是已经好久没有更新了.最明显的是内置词典,jieba的词典有50万个词条,而盘古的词典是17万,这样会造成明显不同的分词效果.另外,对于未登录词,jieba“采用了基于汉字成词能力的HMM模型,使用了Viterb

中文分词技术(中文分词原理)

一.       为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分.除此之外,还有最大切分(包括向前.向后.以及前后相结合).最少切分.全切分等等. 二.       中文分词技术的分类 我们讨论的分词算法可分为三大类:基于字典.词库匹配的分词方法:基于词频度统计的分词方法

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

[python] 使用Jieba工具中文分词及文本聚类概念

声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台.        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.        相关文章:        [Python爬虫]

模式识别之中文分词---简介

Lucene系列介绍 Lucene:分词器和索引文件 目录 分词器 索引文件结构 常用的中文分词器 1.分词器 分词器,对文本资源进行切分,将字符文本串按照一定的规则切分为一个个可以进行索引的最小单位(关键词),以便检索时使用. 建立索引和进行检索时都要用到分词器.为了保证能正确的检索到结果,在建立索引与进行检索时使用的分词器应是同一个. 2.索引文件结构 索引库是一组索引文件的集合. 索引文件的检索:索引表规模相对较小,文档集合规模较大.进行检索时,先从检索索引表开始,然后找到相对应的文档.如

自然语言0_nltk中文使用和学习资料汇总

http://blog.csdn.net/huyoo/article/details/12188573 nltk是一个Python工具包, 用来处理和自然语言处理相关的东西. 包括分词(tokenize), 词性标注(POS), 文本分类, 等等现成的工具. 1. nltk的安装 资料1.1: 黄聪:Python+NLTK自然语言处理学习(一):环境搭建  http://www.cnblogs.com/huangcong/archive/2011/08/29/2157437.html   这个图

优秀的中文分词jieba库

jieba库的简介 jieba是优秀的中文分词库,中文文本需要通过分词来获的单个词语.jieba库提供了三种分词模式:精确模式,全模式,搜索引擎模式.精确模式是将文本精确割分,不存在冗余.全模式是将文本中所有可能单词都扫描出来,存在冗余.搜索引擎模式是将经过精确模式分割下的长词在进行分割. 常见jieba库的函数 原文地址:https://www.cnblogs.com/gzk08-20/p/9216302.html