ictclas分词系统源码(ictclas中文分词系统)
本文目录一览:
您好,请问在连续型HMM模型中,用一部分数据建立好了模型,应该利用模型的什么参数去预测其他数据呢?
收到您ictclas分词系统源码的求助ictclas分词系统源码,感谢您ictclas分词系统源码的信任ictclas分词系统源码,不过这方面ictclas分词系统源码我确实很久都没看过了,不太记得,手上也没有现成的代码,我记得中科院公开的ICTCLAS分词系统源码中有HMM模型以及维特比算法的相关代码,您不妨在那里看看。而且网上应该有很多相关代码吧。
lpir/ictclas2014分词系统怎么使用
使用方法,首先到网上下载ICTCLAS,因为ictclas分词系统源码我是windows下ictclas分词系统源码的C++实现, 下载ICTCLAS2011_Windows_32_c,解压,里面有很好的Demo,Doc,copy API目录下的所有文件(夹)到ictclas分词系统源码你所在的工程,在你的源文件加上
#include "ICTCLAS50.h"
中科院中文分词程序ICTCLAS的c++接口怎么用?
1.C++接口
1.1 ICTCLAS_Init
Init the analyzer and prepare necessary data for ICTCLAS according the configure file.
bool ICTCLAS_Init(const char * sInitDirPath=0);
Routine Required Header
ICTCLAS_Init ICTCLAS30.h
Return Value
Return true if init succeed. Otherwise return false.
Parameters
sInitDirPath: Initial Directory Path, where file Configure.xml and Data directory stored.
the default value is 0, it indicates the initial directory is current working directory path
Remarks
The ICTCLAS_Init function must be invoked before any operation with ICTCLAS. The whole system need call the function only once before starting ICTCLAS. When stopping the system and make no more operation, ICTCLAS_Exit should be invoked to destroy all working buffer. Any operation will fail if init do not succeed.
ICTCLAS_Init fails mainly because of two reasons: 1) Required data is incompatible or missing 2) Configure file missing or invalid parameters. Moreover, you could learn more from the log file ictclas.log in the default directory.
Example
#include "ICTCLAS30.h"
#include stdio.h
#include string.h
int main(int argc, char* argv[])
//Sample1: Sentence or paragraph lexical analysis with only one result
char sSentence[2000];
const char * sResult;
if(!ICTCLAS_Init())
printf("Init fails\n");
return -1;
printf("Input sentence now('q' to quit)!\n");
scanf("%s",sSentence);
while(_stricmp(sSentence,"q")!=0)
sResult = ICTCLAS_ParagraphProcess(sString,0);
printf("%s\nInput string now('q' to quit)!\n", sResult);
scanf("%s",sSentence);
ICTCLAS_Exit();
return 0;
Output
不全,如果需要全的请留邮箱
谁会用ICTCLAS这个分词程序
ICTCLAS分词系统是个NB的系统,这几天找到了仔细试了试,效率奇高,比自己搞字典,分词算法效率不知高了很多倍,用起来也是非常简单的,BOSS需要导出自定义词库,然后用文章训练词库,不管了,反正可以使用了。DT地用hash做了两个星期,进度很慢,分析一本《天龙八部》,统计出现的词语频率(词语只是仅仅基于频率,在并没有字典的情况下无法实现智能分词!)大概要花费十几分钟,可见效率底下,而且内存200M左右。使用ICTCLAS分词系统可以高效地实现分词。下面把过程贴出来。
使用方法,首先到网上下载ICTCLAS,因为我是windows下的C++实现, 下载ICTCLAS2011_Windows_32_c,解压,里面有很好的Demo,Doc,copy API目录下的所有文件(夹)到你所在的工程,在你的源文件加上
#include "ICTCLAS50.h"
#pragma comment(lib, "ICTCLAS50.lib") //ICTCLAS50.lib库加入到工程中
//your code here,可参考Demo里面的代码
即可。
大概的函数C++函数接口都在Doc文件下的文档中:
bool ICTCLAS_Init(const char* pszInitDir=NULL);初始化函数
返回值
如果初始化成功返回true, 否则返回false. 如初始化不成功,请查看ictclas.log文件了解详细错误原因.
参数
pszInitDir:初始化路径,应包含配置文件(Configure.xml)和词典目录(Data目录)以及授权文件(user.lic). 如果这些文件及目录在系统运行当前目录下,此参数可以为null。
bool ICTCLAS_Exit( );退出,释放内存
返回值
成功返回true;否则返回false。
unsigned int ICTCLAS_ImportUserDict(const char *sFilename,eCodeType eCT)
//导入用户自定义词典
返回值
导入成功的词的个数
参数
sFilename: 用户定义词典文件
eCT:编码格式
int ICTCLAS_ParagraphProcess(const char *sParagraph,int nPaLen,eCodeType eCt,int bPOStagged,char* sResult);//对一段文字进行分词
返回值
返回结果缓冲区的指针(sResult)以及结果的长度R
参数
sParagraph: 原始文字段
nPaLen: 文字段的长度
eCodeType: 文字段的编码格式
bPOStagged: 需不需要根据标注集做标记 0 = 做标记 ; 1 = 不标记; 默认为1.
sResult: 输出结果
t_pstRstVec ICTCLAS_ParagraphProcessA(const char *sParagraph,int PaLen,eCodeType eCodeType,int bPOStagged,int nRstCnt);
//处理文字段
返回值
结果vector的指针,系统调用,用户无法分配以及释放
struct stResult{
int start; //start position
int length; //length
#ifdef POS_TAGGER
int iPOS; //POS
char sPOS[POS_SIZE];//word type
#endif
int word_ID; //word_ID
int word_type; //Is the word of the user's dictionary?(0-no,1-yes)
int weight;// word weight
参数
sParagraph: 原始文字段
nPaLen: 文字段长度
eCodeType: 编码格式
bPOStagged:
需不需要根据标注集做标记 0 = 做标记 ; 1 = 不标记; 默认为1.
nRstcnt: 处理结果的长度值。
详细用法参见Doc文件。
bool ICTCLAS_FileProcess(const char *sSrcFilename,eCodeType eCt,const char *sDsnFilename,int bPOStagged);//处理txt文件
返回值
处理文本文件成功返回true, 否则返回false
参数
sSourceFilename: 原始处理文件
eCodeType: 原始文件编码格式
sDsnFilename: 存储结果的文件名T
bPOStagged: 需不需要根据标注集做标记 0 = 做标记 ; 1 = 不标记; 默认为1.
注意事项
调用此函数之前需要调用init函数成功,输出格式可以通过ICTCLAS 配置来更改,这个需要研究下配置文件。
int ICTCLAS_SetPOSmap(int nPOSmap);//设置标注集
返回值
成功为1,其他为0
参数
nPOSmap :
ICT_POS_MAP_FIRST 计算所一级标注集
ICT_POS_MAP_SECOND 计算所二级标注集 PKU_POS_MAP_SECOND 北大二级标注集 PKU_POS_MAP_FIRST 北大一级标注集
int ICTCLAS_GetWordId(const char *sWord,int nWrdLen,eCodeType eCT);
返回值
单词的ID(我觉得是词典里面的存储位置,不清楚词典的具体结构)
参数
sWord: 目标单词
nWrdLen: 单词长度
eCodeType: 编码格式
bool ICTCLAS_ResultFree ( t_pstRstVec pRetVec)
//释放调用ICTCLAS_ParagraphProcessAW得到的vector指针
返回值
成功为1,失败为0
参数
t_pstRstVec: ICTCLAS_ParagraphProcessAW得到的vector指针
总结:这些函数都很好用,我需要使用处理文件函数ICTCLAS_FileProcess我出现的问题是:单独调用这个函数没有问题,但是在MFC界面调用两个选择打开文件路径和保存结果文件路径的CFileDialog以后就会出现ICTCLAS_Init初始化失败!郁闷了半天,查看ICTCLAS.log文件,
Default Path : E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS
start lic check.
License succeed!Cannot open user dictionary
E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS\Data\UserDict.pdat.
Cannot open file E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS\Data\UserDict.map.
Cannot open user dictionary E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS\Data\UserDict.pos.
Load dictionary down!
并没有异常,加载失败是因为并没有自定义词典。
仔细排查,发现bool ICTCLAS_Init(const char* pszInitDir=NULL)有一个默认的工作路径,在没有打开CFileDialog的时候默认的路径是exe文件执行路径,但是打开以后若不进行设置,会改变工作路径!这就是为什么点击CFileDialog路径更改,找不到路径下的文件,当然无法初始化了!( pszInitDir:初始化路径,应包含配置文件(Configure.xml)和词典目录(Data目录)以及授权文件(user.lic). 如果这些文件及目录在系统运行当前目录下,此参数可以为null)
解决方案:
方案1. 在每次调用CFileDialog打开文件后重新设置工作路径
方案2. 在程序中使用绝对路径
方案3. CFileDialog的构造函数有8个参数,平时为了省事一般只是指定第一个。其实解决这个问题,只要在第四个参数dwFlags中加上OFN_NOCHANGEDIR即可
用C++完成贝叶斯分类算法的设计与实现
1. 收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。 2. 提取邮件主题和邮件体中的独立字符串,例如 ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。 3. 每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。 4. 计算每个哈希表中TOKEN串出现的概率P=(某TOKEN串的字频)/(对应哈希表的长度)。 5. 综合考虑hashtable_good和hashtable_bad,推断出当新来的邮件中出现某个TOKEN串时,该新邮件为垃圾邮件的概率。数学表达式为: A 事件 ---- 邮件为垃圾邮件; t1,t2 …….tn 代表 TOKEN 串 则 P ( A|ti )表示在邮件中出现 TOKEN 串 ti 时,该邮件为垃圾邮件的概率。 设 P1 ( ti ) = ( ti 在 hashtable_good 中的值) P2 ( ti ) = ( ti 在 hashtable_ bad 中的值) 则 P ( A|ti ) =P2 ( ti ) /[ ( P1 ( ti ) +P2 ( ti ) ] ; 6. 建立新的哈希表hashtable_probability存储TOKEN串ti到P(A|ti)的映射 7. 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。 当新到一封邮件时,按照步骤2,生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。 假设由该邮件共得到N个TOKEN 串,t1,t2…….tn,hashtable_probability中对应的值为 P1 , P2 , ……PN , P(A|t1 ,t2, t3……tn) 表示在邮件中同时出现多个TOKEN串t1,t2……tn时,该邮件为垃圾邮件的概率。 由复合概率公式可得 P(A|t1 ,t2, t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)] 当 P(A|t1 ,t2, t3……tn) 超过预定阈值时,就可以判断邮件为垃圾邮件。