C/C++接口——对应的各个函数
- 函数1-bool NLPIR_Init(const char * sInitDirPath=0, int encoding=GBK_CODE,constchar*sLicenceCode=0);初始化函数
(1) 描述:在使用中文分词操作系统之前必须先进行初始化操作,才能继续接下来的操作
(2) 参数说明:
sDataPath:Data 文件夹的路径,为空字符串时从项目根目录下开始寻找,一般在使用的时候先把Data放到项目文件里,所以为空
encode:编码格式,具体的编码对照如下:
0:GBK
1:UTF8
2:BIG5
3:GBK,里面包含繁体字;
sLicenceCode:授权码,为空字符串就可以了
(3) 返回值:返回结果是成功或者失败(1或0)
(4) 示例代码:
#include “NLPIR.h” //双引号形式代表是从项目文件中调取NLPIR.头文件
#include<stdio.h> //<>代表从库中调取头文件
#include<string.h>
#include <iostream>
using namespace std;
#pragma warning (disable:4996) //利用pragma忽略4996错误的警告
#pragma comment(lib,”NLPIR.lib”) //利用pragma调用NLPIR.lib静态库
int main(int arge,char*agrv[])// int arge是参数的个数,char*agrv[]是对应的参数,首个参数是路径
{
const char *sResult;//定义一个指针型字符数组
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf("Input sentence now (‘q‘ to quit)!\n");
scanf("%s",sSentence);
if (_stricmp(sSentence,"q")!=0)//判断是否有输入字符串数组
{
sResult=NLPIR_ParagraphProcess(sSentence,0);
printf("%s\nInput string now(‘q‘ to quit)!\n",sResult);//返回分词组
scanf("%s",sSentence);
}
NLPIR_Exit(); //退出分词系统
return 0;
}
注意: ①使用NLPIR时必须先执行NLPIR_Init函数(只需执行一次)。系统关闭时还应执行NLPIR_Exit函数来销毁缓存数据。
②NLPIR_Init执行失败通常有两个原因:1. 需要的数据文件格式不兼容或丢失;2.配置文件丢失或存在非法参数。还可以通过日志文件来了解更多信息,日志文件存放在默认路径中。在把NLPIR.dll和NLPIR.lib放入项目文件中时,要注意位数的问题(32位/64位),位数不统一容易造成初始化失败。
- 函数2-NLPIR_Exit:退出函数
- 退出程序并释放所有资源和NLPIR使用的缓存数据。
函数形式:bool NLPIR_Exit();
需要的头文件:<NLPIR.h>
返回值:
执行成功返回successed,否则返回false。
参数:无
说明:该函数必须在关闭系统时执行,若需重启NLPIR,再次执行NLPIR_Init函数即可。
- 函数3- unsigned int NLPIR_ImportUserDict(const char *sFilename,bool bOverwrite=true):导入用户词典
(1) 描述:从文件中导入用户自定义的词典。
(2) 参数说明:
const char *sFilename:要导入的用户词典文件所在路径。
bool bOverwrite:是否删除原来的自定义用户词典,是true,否是false
(3) 返回值:导入的词汇数量。
(4) 你只需在更改了用户词典或第一次使用某个词典时执行该函数,当配置文件中的UserDict参数为on时,NLPIR将会(把该词典添加到配置文件中)并在启动时自动加载该词典。当将UserDict置为off时,用户自定义词典文件将不再自动导入。
(5) 示例代码:
#include <string.h>
int main(int argc, char* argv[])
{
//Sample1: Sentence or paragraph lexical analysis with only one result
char sSentence[2000]="张华平于 1978 年 3 月 9 日出生于江西省波阳县。 ";
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
//Sample4: 用定义好的词典
sResult=NLPIR_ParagraphProcess("1989 年春夏之交的政治风波 1989 年政治风波 24 小时降雪量 24 小时降雨量 863 计划 ABC 防护训练 APEC 会议 BB 机 BP 机 C2 系统 C3I 系统 C3 系统C4ISR 系统 C4I 系统 CCITT 建议",1);
printf("Before Adding User-defined lexicon, the result is:\n%s\n",sResult);
unsigned int nItems=NLPIR_ImportUserDict("userdict.txt");//引入新词
printf("%d user-defined lexical entries added!\n",nItems);
sResult=NLPIR_ParagraphProcess("1989 年春夏之交的政治风波 1989 年政治风波 24 小时降雪量 24 小时降雨量 863 计划 ABC 防护训练 APEC 会议 BB 机 BP 机 C2 系统 C3I 系统 C3 系统C4ISR 系统 C4I 系统 CCITT 建议",1);
printf("After Adding User-defined lexicon, the result is:\n%s\n",sResult);
NLPIR_Exit();
return 0;
}
- 函数4- const char * NLPIR_ParagraphProcess(const char *sParagraph,int bPOStagged=1);
(1) 对指定段落进行分词,并返回分词结果(处理一个段落文字,返回运行结果缓存的指针)。
(2) 参数说明:
sParagraph:文本内容
bPOStagged:是否需要分词标记,0 表示不标记,1,表示需要标记,默认为 1;
(3) 返回值:返回分词结果
(4) 示例代码:上例
- 函数5- result_t * NLPIR_ParagraphProcessA(const char *sParagraph,int *pResultCount,bool bUserDict=true)
(1) 描述:对指定的段落进行分词,并返回分词结果(运行结果向量的指针,该指针由系统进行管理,用户无法对它进行分配和释放)。
(2) 参数描述:
const char *sParagraph:待分词的段落
int *pResultCount:返回分词结果的分词个数,结果自动生成(结果向量的大小)
bool bUserDict:是否要用户词典(自定义)
(3) 返回值:结构体的形式
struct result_t{
int start; //start position,词语在输入句子中的开始位置
int length; //length,词语的长度
char sPOS[POS_SIZE];//word type,词性ID值,可以快速的获取词性表
int iPOS;//词性
int word_ID; //如果是未登录词,设成-1
int word_type; //区分用户词典;1是用户词典中的词;0是非用户词典中的词
int weight;// 词的权重
}
(4) 示例代码:
#include "NLPIR.h"
#include <stdio.h>
#include<string.h>
#include <iostream>
using namespace std;
#pragma warning( disable : 4996)
#pragma comment(lib,"NLPIR.lib")
int main(int arge,char*argv[])
{
//2.NLPIR_ParagraphProcessA
//Sample:Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[2000];
const result_t*pVecResult;// 定义pVecResult的结构体
int nCount;
if (!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf("Input sentence now (‘q‘ to quit)!\n");
//char sSentence[200];
scanf("%s",sSentence);//输入语句
//const char *sSentence="我的多久放假多久";
//pVecResult=NLPIR_ParagraphProcessA(sSentence1,&nCount,true);
if (_stricmp(sSentence,"q")!=0)
{
pVecResult=NLPIR_ParagraphProcessA(sSentence,&nCount,true);
printf("nCount=%d\n",nCount);//打印分词结果数
for (int i=0;i<nCount;i++)
{
printf("Start=%d Lenght=%d Word_ID=%d POS_ID=%d\n",
pVecResult[i].start,
pVecResult[i].length,
pVecResult[i].word_ID,
pVecResult[i].sPOS,
pVecResult[i].weight,
pVecResult[i].iPOS);
}
}
NLPIR_Exit();
return 0;
}
函数6- Double NLPIR_FileProcess(const char *sSourceFilename,const char *sResultFilename,int bPOStagged=1);
(1) 描述:处理一个TXT文件。
(2) 参数:
char * sSourceFilename: 要处理的源文件名称;
char * sResultFilename: 存储处理结果的文件名称;
int bPOStagged: 判断是否需要位置标记,0:无标记;1:有标记。默认值为1。
(3) 返回值:如果执行成功,返回处理速度值,否则返回false。
(4) 示例代码:
//#define _CRT_SECURE_NO_DEPRECATE
#include "NLPIR.h"
#include <stdio.h>
#include<string.h>
#include <iostream>
using namespace std;
#pragma warning( disable : 4996)
#pragma comment(lib,"NLPIR.lib")
int main(int arge,char*argv[])
{
if (!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf("Input sentence now (‘q‘ to quit)!\n");
NLPIR_FileProcess("屌丝,一个字头的诞生.txt","test_result.txt",0);
NLPIR_Exit();
return 0;
}
函数7- int NLPIR_GetParagraphProcessAWordCount(const char *sParagraph);
(1) 描述:NLPIR_ParagraphProcessA函数的C#实现API。
(2) 参数:char * sParagraph: 输入段落的源
(3) 返回值:返回输入段落的词汇数量。
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//NLPIR_GetParagraphProcessAWordCount:返回段落的词个数
if (!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
char s[100]="点击下载超女纪敏佳深受观众喜爱。禽流感爆发在非典之后。";
int count = NLPIR_GetParagraphProcessAWordCount(s);//先得到结果的词数
printf("count=%d",count);
NLPIR_Exit();
return 0;
}
**函数8- void NLPIR_ParagraphProcessAW(int nCount,result_t * result);
(1) 描述:NLPIR_ParagraphProcessA函数的C#实现API。
(2) 参数:nCount: 输入段落的词汇数量;result: 处理结果的结构体指针;
(3) 说明:该函数只有在NLPIR_Init函数执行成功后才能使用,处理结果的输出格式可在配置文件中进行设置。
函数9- int NLPIR_AddUserWord(const char *sWord);
(1) 描述:向用户词典添加一个词汇。‘
(2) 参数:char * sWord:要添加的词汇。
(3) 返回值:如果添加成功,返回successed(1),否则返回false(0)
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[2000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
NLPIR_AddUserWord("爱思客 n");////添加词:爱思客\t词性。其中“爱思客”为要添加的词,“n”为词的词性,”\t”为分隔符
printf ("Input sentence now(‘q‘ to quit)!\n");
scanf("%s",sSentence);
while (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_ParagraphProcess(sSentence,0);
printf("%s\nInput string now(‘q‘ to quit)!\n", sResult);
scanf("%s",sSentence);
}
NLPIR_Exit();
return 0;
}
函数10- int NLPIR_SaveTheUsrDic();
(1) 描述:将用户词典保存至硬盘。
(2) 参数:无
(3) 返回值:成功返回,失败返回0
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[2000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
NLPIR_AddUserWord("爱思客 n");////添加词:爱思客\t词性。其中“爱思客”为要添加的词,“n”为词的词性,”\t”为分隔符
NLPIR_SaveTheUsrDic();//保存用户词典
printf ("Input sentence now(‘q‘ to quit)!\n");
scanf("%s",sSentence);
while (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_ParagraphProcess(sSentence,0);
printf("%s\nInput string now(‘q‘ to quit)!\n", sResult);
scanf("%s",sSentence);
}
NLPIR_Exit();
return 0;
}
函数11- int NLPIR_DelUsrWord(const char *sWord);
(1) 描述:从用户词典中删除一个词汇。
(2) 参数:char * sWord:要删除的词汇。
(3) 返回值:如果要删除的词汇不存在,则返回-1;如果删除成功,则返回该词汇的句柄。
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[2000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
NLPIR_AddUserWord(“ iThinker n” );//你好\t 词性
NLPIR_AddUserWord("爱思客 n");//添加词:爱思客\t词性。其中“爱思客”为要添加的词,“n”为词的词性,”\t”为分隔符
NLPIR_DelUsrWord(“ iThinker” );//删除 iThinker,删除时词语后面不能加词性
NLPIR_SaveTheUsrDic();//保存用户词典
NLPIR_AddUserWord("武传营的 n");////添加词:爱思客\t词性。其中“爱思客”为要添加的词,“n”为词的词性,”\t”为分隔符
NLPIR_SaveTheUsrDic();//保存用户词典
NLPIR_DelUsrWord("武传营的 " );//删除 iThinker
NLPIR_SaveTheUsrDic();//保存用户词典
printf ("Input sentence now(‘q‘ to quit)!\n");
scanf("%s",sSentence);
while (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_ParagraphProcess(sSentence,0);
printf("%s\nInput string now(‘q‘ to quit)!\n", sResult);
scanf("%s",sSentence);
}
NLPIR_Exit();
return 0;
}
函数12- NLPIR_API const char * NLPIR_GetKeyWords(const char *sLine,int nMaxKeyLimit=50,bool
bWeightOut=false);
(1) 描述:从输入的段落中提取关键词。
(2) 参数:
char *sLine :输入的段落
int nMaxKeyLimit:关键词最大的数量
bool bWeightOut:是否输出权重
(3) 返回值:如果执行成功,返回结果列表。如果执行失败,返回NULL
格式如下:
“科学发展观 宏观经济”
或者
“科学发展观23.80 宏观经济12.20”(带有权值)
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[2000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf ("Input sentence now(‘q‘ to quit)!\n");
scanf("%s",sSentence);
while (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_GetKeyWords(sSentence);
printf("%s\nInput string now(‘q‘ to quit)!\n", sResult);
scanf("%s",sSentence);
}
NLPIR_Exit();
return 0;
}
函数13- NLPIR_API const char * NLPIR_GetFileKeyWords(const char *sTextFile,int nMaxKeyLimit=50,bool bWeightOut=false);
(1) 描述:从TXT文件中提取关键词。
(2) 参数:
const char *sTextFile:输入文件名称;
int nMaxKeyLimit:关键词的最大数量;
bWeightOut:是否输出权值
(3) 返回值:如果执行成功,返回执行结果列表。如果执行失败,返回NULL。格式同上。
(4) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[20000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf ("Input sentence now(‘q‘ to quit)!\n");
if (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_FileGetKeyWords(“18届三中全会.txt”,50,true);
printf("%s\n ", sResult);
}
NLPIR_Exit();
return 0;
}
函数14- NLPIR_API const char * NLPIR_GetNewWords(const char *sLine,int nMaxKeyLimit=50,bool bWeightOut=false);
(1)描述:从段落中提取新词。
(2)参数:
const char *sLine:输入的段落
int nMaxKeyLimit:关键词的最大数量;
bWeightOut:是否输出权值
(3)返回值:如果执行成功,返回提取到的新词列表,否则返回NULL。格式如下:
“科学发展观 宏观经济”
或者
“科学发展观23.80 宏观经济12.20”(带有权值)
(5) 示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[20000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf ("Input sentence now(‘q‘ to quit)!\n");
if (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_GetNewWords(“18届三中全会.txt”,50,true);
printf("%s\n ", sResult);
}
NLPIR_Exit();
return 0;
}
函数15- NLPIR_API const char * NLPIR_GetFileNewWords(const char
*sTextFile,int nMaxKeyLimit=50,bool bWeightOut=false);
(1)描述:从TXT文件中提取新词。
(2)参数:
const char *sLine:输入文件的名称;
int nMaxKeyLimit:关键词的最大数量;
bWeightOut:是否输出权值
(3)返回值:如果执行成功,返回提取到的新词列表,否则返回NULL。格式如下:
“科学发展观 宏观经济”
或者
“科学发展观23.80 宏观经济12.20”(带有权值)
4)示例代码:
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[20000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf ("Input sentence now(‘q‘ to quit)!\n");
if (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_FileGetNewWords(“18届三中全会.txt”,50,true);
printf("%s\n ", sResult);
}
NLPIR_Exit();
return 0;
}
函数16- unsigned long NLPIR_API unsigned long NLPIR_FingerPrint(const char *sLine);
(1) 描述:提取段落的一个指纹
(2) 参数:
const char *sLine:输入的段落
(3) 返回值:如果执行成功,返回指纹值,否则返回0。
(4) 示例代码:
#pragma warning(disable:4996)
#include "NLPIR.h"
#include <string>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"NLPIR.lib")//表示链接NLPIR.lib这个库
int main(int argc, char* argv[])//argc是命令行总的参数个数,argv[]是argc 个参数,其中第0个参数是程序的全名,以后的参数
{
//Sample1: Sentence or paragraph lexical analysis with only one result char sSentence[2000];
char sSentence[200];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fails\n");
return -1;
}
printf ("Input sentence now(‘q‘ to quit)!\n");
scanf("%s",sSentence);
if (_stricmp(sSentence,"q")!=0)
{
unsigned long Finger=NLPIR_FingerPrint(sSentence);
printf("%d\n ", Finger);
}
NLPIR_Exit();
return 0;
}
函数17- int NLPIR_SetPOSmap(int nPOSmap);
(1) 描述:设置使用的POS map(标注集)。
(2) 参数:int nPOSmap
ICT_POS_MAP_FIRST 1//计算所一级标注集
ICT_POS_MAP_SECOND 0//计算所二级标注集
ICT_POS_MAP_SECOND 2//北大二级标注集
PKU_POS_MAP_FIRST 3//北大一级标注集
(3) 返回值:如果执行成功,返回1,否则返回0。
(4) 示例代码:
#include "NLPIR.h"
#include <stdio.h>
#include <string.h>
#pragma warning(disable,4996)
#pragma comment(lib,"NLPIR.lib")
int main()
{
//Sample1: Sentence or paragraph lexical analysis with only one result
char sSentence[2000];
const char * sResult;
if(!NLPIR_Init())
{
printf("Init fail\n");
return -1;
}
NLPIR_SetPOSmap(ICT_POS_MAP_SECOND);
printf("Input sentence now(‘q‘ to quit)!\n");//选择标注集
scanf("%s",sSentence);
while (_stricmp(sSentence,"q")!=0)
{
sResult=NLPIR_ParagraphProcess(sSentence,0);
printf("%s\nInput string now(‘q‘ to quit)!\n",sResult);
scanf("%s",sSentence);
}
NLPIR_Exit();
return 0;
}
函数18- const char * NLPIR_GetLastErrorMsg();
(1) 描述:获取最近一条报错信息。
(2) 参数:无
(3) 返回值:获取最近一条报错信息的指针
(4) 示例代码:无
新词发现批量处理功能
/*********************************************************************/
以下函数为 2013 版本专门针对新词发现的过程,一般建议脱机实现,不宜在线处理
* 新词识别完成后,再自动导入到分词系统中,即可完成
* 函数以 NLPIR_NWI(New Word Identification)开头
*********************************************************************/
/*********************************************************************/
函数1- bool NLPIR_NWI_Start();
(1) 描述:启动新词识别
(2) 参数:无
(3) 返回值:如果执行成功,返回bool,true:successed,否则返回false:fail。
函数2- Int NLPIR_NWI_AddFile(const char * sFilename);
(1) 描述:往新词识别系统中添加待识别新词的文本文件,需要在运行 NLPIR_NWI_Start()之后,才有效
(2) 参数:
char * sFilename:文件名
(3) 返回值:如果执行成功,返回true,否则返回false。
函数3- bool NLPIR_NWI_AddMem(const char *sText);
(1) 描述:往新词识别系统中添加一段新词的内存,需要在运行NLPIR_NWI_Start()之后,才有效。
(2) 参数:char * sFilename-文件名
(3) 返回值:如果执行成功,返回true,否则返回false。
函数4- bool NLPIR_NWI_Complete();
(1)描述:新词添加结束,需要在运行NLPIR_NWI_Start()之后,才有效。
(2)参数:无
(3)返回值:如果执行成功,返回true,否则返回false。
函数5- const char * NLPIR_NWI_GetResult(bool bWeightOut=false);
获得新词识别结果
(1) 描述:获取新词识别结果
(2) 参数:bool bWeightOut-是否输出权重值
(3) 返回值:执行结果的列表
函数5- unsigned int NLPIR_NWI_Result2UserDict()
(1) 描述:将新词识别结果导入到用户词典中,需要在运行NLPIR_NWI_Complete()之后,才有效,如果需要将新词结果永久保存,建议在执行NLPIR_SaveTheUsrDic函数
(2) 参数:无
(3) 返回值:如果执行成功,返回true,否则返回false。
*======================示例代码============================*
#include "NLPIR.h"
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)
#pragma comment(lib,"NLPIR.lib")
int main()
{
if (!NLPIR_Init())
{
printf("init fail\n");
return -1;
}
char sInputFile[1024]="用户词典.txt",sResultFile[1024];
NLPIR_NWI_Start();//启动新词发现功能
NLPIR_NWI_AddFile(sInputFile);//添加新词训练的文件,可反复添加
NLPIR_NWI_Complete();//添加文件或者训练内容结束
const char * pNewWordlist=NLPIR_NWI_GetResult();//输出新词识别结果
printf("识别出的新词为:%s\n",pNewWordlist);
strcpy(sResultFile,sInputFile);//sInputFile赋值给sResultFile
strcat(sResultFile,"_result1.txt");//sResultFile,"_result1.txt"连接到一起,结果放到sResultFile中
NLPIR_FileProcess(sInputFile,sResultFile);
NLPIR_NWI_Result2UserDict();//新词结果导入词典,利用新的词典,重新分词
strcpy(sResultFile,sInputFile);
strcat(sResultFile,"_result2.txt");
NLPIR_FileProcess(sInputFile,sResultFile);
NLPIR_Exit();
return 0;
}
附:
NLPIR_AddUserWord("沪指 n");
这个函数的作用是将“沪指”这个词加入到分词词典。但是他是临时的加,只在这个程序中有效,程序关闭之后就无效了。
如果在使用了上面的函数之后,再使用这个函数NLPIR_SaveTheUsrDic(),就将“沪指”这个词完全的保存了。下次程序即使不导入这个词,仍然会将这个词分出来
NLPIR_DelUsrWord("沪指")
这个函数和NLPIR_AddUserWord相反,作用是临时的删除一个词语。注意,词语后面不能加词性。但是只是临时的删除,如果不使用NLPIR_SaveTheUsrDic()保存的话,下次就会运行程序时,还是认为没有删除这个词语。
NLPIR_NWI_Result2UserDict()
这个函数是永久的导入字典。另外一个从文本文件中导入用户词典的函数ImportUserDi()也是永久性的导入用户词典。一次导入之后下次不需要再导入。如果下次导入的词典和上次的不同,下次的会覆盖上次的。