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 1024
char 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支持:用户词典,自定义词性等。

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

  1. Hanlp等七种优秀的开源中文分词库推荐

    Hanlp等七种优秀的开源中文分词库推荐 中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块.由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词. 纵观整个 ...

  2. 共有11款Python 中文分词库开源软件

    件过滤: 排序: 收录时间 | 浏览数 Python 中文分词库 Yaha "哑哈"中文分词,更快或更准确,由你来定义.通过简单定制,让分词模块更适用于你的需求. "Ya ...

  3. 中文分词库及NLP介绍,jieba,gensim的一些介绍

    六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...

  4. python 中文分词库 jieba库

    jieba库概述: jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需要额外安装 jieba库分为精确模式.全模式.搜索引擎模式 原理 1. ...

  5. jieba分词-强大的Python 中文分词库

    1. jieba的江湖地位 NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的 Python 中文分词组件. 很多人学习pytho ...

  6. python中文分词库——pyltp

    pyltp在win10下安装比较麻烦,因此参考以下安装方式, 1.下载 win10下python3.6 2.安装 下载好了以后, 在命令行下, cd到wheel文件所在的目录, 然后使用命令pip i ...

  7. python中文分词库——pynlpir

    安装 pip install pynlpir import pynlpir #加载包 pynlpir.open() #加载nlpir的库,这步是必须的 #否则会出现 段错误/段转储 segment f ...

  8. Solr6.6 配置中文分词库mmseg4j

    1.准备 首先安装solr:参照搜索引擎Solr-6.6.0搭建,如果版本高于6,可能会不支持,需要改mmseg4j包 mmseg4j包下载: mmseg4j-solr-2.3.0-with-mmse ...

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

    简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...

随机推荐

  1. Openfire重新安装

    由于忘记密码等原因,无法启动openfire ,那就重装吧,废话不多说,命令行按步骤粘贴执行就好了. 1.先删除mysql数据 mysql -u root -p 输入密码:例如,123456 show ...

  2. CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

    最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时 ...

  3. Jetty 的工作原理以及与 Tomcat 的比较

    Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所 ...

  4. loadrunner11中java vuser引用jar包

    1.创建工程,新建类,HelloWorld.java,代码如下: package com.liuke; public class HelloWorld { public String getHello ...

  5. 2016年末闲谈iOS开发的未来

    移动开发市场潮流涌动,好多人都会问iOS开发的前景这样的问题,今天我就瞎扯一下我眼中的未来,纯主观非理性,爱看看. Swift怎么样 Swift很好,就像你的前女友一样好. 得益于swift的开源,以 ...

  6. js资源加载优化

    互联网应用或者访问量大的应用,对js的加载优化是不可少的.下面记录几种优化方法 CDN  + 浏览器缓存 CDN(content delivery network)内容分发网络, 最传统的优化方式.其 ...

  7. java类 对象 和构造方法

    github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等 ...

  8. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

  9. npm 安装 ionic cordova

    针对npm安装 ionic 和 cordova 过程很慢,且有些安装文件被墙的问题,使用如下方式解决: 1)安装cnpm npm install -g cnpm 2)然后再使用cnpm 安装 ioni ...

  10. Office 365 - SharePoint 2013 Online 中创建母版页

    1.登陆SharePoint Online站点,点击右上角的设置按钮,如下图: 2.点击进入网站设置,到下面两个地方开启SharePoint Server 发布基础架构: 网站集管理 – 网站集功能 ...