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 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中文分词库的使用的更多相关文章
- Hanlp等七种优秀的开源中文分词库推荐
Hanlp等七种优秀的开源中文分词库推荐 中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块.由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词. 纵观整个 ...
- 共有11款Python 中文分词库开源软件
件过滤: 排序: 收录时间 | 浏览数 Python 中文分词库 Yaha "哑哈"中文分词,更快或更准确,由你来定义.通过简单定制,让分词模块更适用于你的需求. "Ya ...
- 中文分词库及NLP介绍,jieba,gensim的一些介绍
六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...
- python 中文分词库 jieba库
jieba库概述: jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需要额外安装 jieba库分为精确模式.全模式.搜索引擎模式 原理 1. ...
- jieba分词-强大的Python 中文分词库
1. jieba的江湖地位 NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的 Python 中文分词组件. 很多人学习pytho ...
- python中文分词库——pyltp
pyltp在win10下安装比较麻烦,因此参考以下安装方式, 1.下载 win10下python3.6 2.安装 下载好了以后, 在命令行下, cd到wheel文件所在的目录, 然后使用命令pip i ...
- python中文分词库——pynlpir
安装 pip install pynlpir import pynlpir #加载包 pynlpir.open() #加载nlpir的库,这步是必须的 #否则会出现 段错误/段转储 segment f ...
- Solr6.6 配置中文分词库mmseg4j
1.准备 首先安装solr:参照搜索引擎Solr-6.6.0搭建,如果版本高于6,可能会不支持,需要改mmseg4j包 mmseg4j包下载: mmseg4j-solr-2.3.0-with-mmse ...
- jieba中文分词的.NET版本:jieba.NET
简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...
随机推荐
- Think_php入口文件配置
think_php的入口模式有两种方式 1,一个入口文件对应一个项目应用 2,一个入口文件对应所有项目应用 默认情况,入口文件只需要require thinkphp文件夹就可以.比如thinkphp文 ...
- nginx性能优化之线程池
默认情况下,nginx的work process按照顺序一个个处理http请求,因此如果后台处理时间较长,则work process会长时间等待IO状态,因此限制并发性.如下所示: 所以,对于可能存在 ...
- Type.js – 帮助你更好的控制网页字体排版
Type.js 是一款很好的网页字体排版工具.它可以让你使用新的 CSS 属性,在网页上试下更精细的排版控制.设置很简单.上传 type.js 到您的网站,并在你的 HTML 链接中引用.接下来,你就 ...
- JS中数组排序
法一:升序原理:循环嵌套即双向遍历,在从前往后的遍历过程中,如果前一个位子大于后一个位子,把前一个位子的值付给后一个位子, 在从后往前遍历过程中如果前一个值大于后一个的值,把前面的值付给后面,过程中把 ...
- 调用MyFocus库,简单实现二十几种轮播效果
一.首先点击这里下载myFocus库文件,标准文件库就行了,很小仅仅1.4M. myFocus库有以下的好处: a . 文件小巧却高效强大,能够实现二十几种轮播的效果. b . 极其简单的使用,只需要 ...
- JScript中的条件注释详解(转载自网络)
JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...
- Box2D自定义重力
需要给刚体添加一个自定义的属性:m_customGravity,这样就可以动态的修改每一个刚体自定义的重力,查找box2d源码大约在5486行,加上红色的一句代码 b2Island.prototype ...
- 如何在sharepoint2010中配置Google Anlytics 分析服务
简介 Google Analytics(分析)不仅可以帮助您衡量销售与转化情况,而且能为您提供新鲜的深入信息,帮助您了解访问者如何使用您的网站,他们如何到达您的网站,以及您可以如何吸引他们不断回访 ...
- SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
前 言 上面一篇博客,我们了解到如何为SharePoint 2013配置表单身份认证,但是添加用户是一个麻烦事儿:其实,我们还可以用Asp.Net的配置工具,为SharePoint 2013添加表单用 ...
- Web UI - Javascript之DOM Ready
最近终于稍微适应了工作环境,终于可以让自己缓口气.于是决定要写点东西,算是督促.记录和提升自己的学习.代码的世界,你不轮它,以后就会被它轮.这个系列尽量保持在一周或两周更一篇,目标是在创造内容的时候更 ...