再新建一个类,实例化上面的接口后,就可以调用NLPIR的各个函数了。
其中我在source文件夹中添加了一个用户词典userdic.txt,在程序运行时导入到系统中,该文件内容如下: 前重后轻 nr 对TXT文件进行分词处理时需要用到的3个TXT文件,分别如下所示: 1.txt作为从文件内容进行分词操作的文件源,其内容如下: 2.txt作为对1.txt进行分词处理的结果接收文件,为一个空文件,运行后其内容如下: 3.txt作为从内容提取关键词的文件源,其内容如下: 程序运行结果如下: 分词结果为:哎/e ~/w 那个/rz 金刚/n 圈/qv 尺寸/n 太/d 差/a ,/wd 前重后轻/nr ,/wd 左宽/nr 右/f 窄/a ,/wd 他/rr 戴/v 上/f 去/vf 很/d 不/d
舒服/a ,/wd 整/v 晚/tg 失眠/vi 会/v 连累/v 我/rr 嘛/y ,/wd 他/rr 虽然/c 是/vshi 只/q 猴子/n ,/wd 但/c 你/rr 也/d 不/d 能/v
这样/rzv 对/p 他/rr 啊/y ,/wd 官府/n 知道/v 会/v 说/v 我/rr 虐待/v 动物/n 的/ude1 ,/wd 说/v 起/vf 那个/rz 金刚/n 圈/qv ,/wd
啊/y ~/w 去年/t 我/rr 在/p 陈家村/nr 认识/v 了/ule 一个/mq 铁匠/n ,/wd 他/rr 手工/d 精美/a ,/wd 价钱/n 又/d 公道/a ,/wd 童叟无欺
/vl ,/wd 干脆/d 我/rr 介绍/v 你/rr 再/d 定做/v 一个/mq 吧/y !/wt
增加用户词典后分词结果为:
哎/e ~/w 那个/rz 金刚圈/n 尺寸/n 太/d 差/a ,/wd 前重后轻/nr ,/wd 左宽右窄/n ,/wd 他/rr 戴/v 上/f 去/vf 很/d 不/d 舒服/a ,/wd 整
/v 晚/tg 失眠/vi 会/v 连累/v 我/rr 嘛/y ,/wd 他/rr 虽然/c 是/vshi 只/q 猴子/n ,/wd 但/c 你/rr 也/d 不/d 能/v 这样/rzv 对/p
他/rr 啊/y ,/wd 官府/n 知道/v 会/v 说/v 我/rr 虐待/v 动物/n 的/ude1 ,/wd 说/v 起/vf 那个/rz 金刚圈/n ,/wd 啊/y ~/w 去年/t 我/
rr 在/p 陈家村/nr 认识/v 了/ule 一个/mq 铁匠/n ,/wd 他/rr 手工/d 精美/a ,/wd 价钱/n 又/d 公道/a ,/wd 童叟无欺/vl ,/wd 干脆/d 我/
rr 介绍/v 你/rr 再/d 定做/v 一个/mq 吧/y !/wt
删除用户词典后分词结果为:
哎/e ~/w 那个/rz 金刚圈/n 尺寸/n 太/d 差/a ,/wd 前重后轻/nr ,/wd 左宽/nr 右/f 窄/a ,/wd 他/rr 戴/v 上/f 去/vf 很/d 不/d 舒服/a
,/wd 整/v 晚/tg 失眠/vi 会/v 连累/v 我/rr 嘛/y ,/wd 他/rr 虽然/c 是/vshi 只/q 猴子/n ,/wd 但/c 你/rr 也/d 不/d 能/v 这样/r
zv 对/p 他/rr 啊/y ,/wd 官府/n 知道/v 会/v 说/v 我/rr 虐待/v 动物/n 的/ude1 ,/wd 说/v 起/vf 那个/rz 金刚圈/n ,/wd 啊/y ~/w
去年/t 我/rr 在/p 陈家村/nr 认识/v 了/ule 一个/mq 铁匠/n ,/wd 他/rr 手工/d 精美/a ,/wd 价钱/n 又/d 公道/a ,/wd 童叟无欺/vl ,/wd
干脆/d 我/rr 介绍/v 你/rr 再/d 定做/v 一个/mq 吧/y !/wt
导入用户词典文件后分词结果为:
哎/e ~/w 那个/rz 金刚圈/n 尺寸/n 太/d 差/a ,/wd 前重后轻/nr ,/wd 左宽/nr 右/f 窄/a ,/wd 他/rr 戴/v 上/f 去/vf 很/d 不/d 舒服/a
,/wd 整/v 晚/tg 失眠/vi 会/v 连累/v 我/rr 嘛/y ,/wd 他/rr 虽然/c 是/vshi 只/q 猴子/n ,/wd 但/c 你/rr 也/d 不/d 能/v 这样/r
zv 对/p 他/rr 啊/y ,/wd 官府/n 知道/v 会/v 说/v 我/rr 虐待/v 动物/n 的/ude1 ,/wd 说/v 起/vf 那个/rz 金刚圈/n ,/wd 啊/y ~/w
去年/t 我/rr 在/p 陈家村/nr 认识/v 了/ule 一个/mq 铁匠/n ,/wd 他/rr 手工/d 精美/a ,/wd 价钱/n 又/d 公道/a ,/wd 童叟无欺/vl ,/wd
干脆/d 我/rr 介绍/v 你/rr 再/d 定做/v 一个/mq 吧/y !/wt
从段落中提取的关键词:
前重后轻#陈家村#左宽#金刚圈#
新词提取结果为: 对文件内容进行分词的运行速度为:
0.76秒
从文件中提取关键词的结果为:
胡子#形象#职业#前途# 分词后每个词后面都跟着词性标记(bPOSTagged参数为1时,输出结果显示标记;为0时,不现实标记),并彼此以空格分隔;提取的关键词则以#号分隔;因输入的文字没有新词,均能被识别,所以新词提取结果为空。各函数的具体使用可参考下面我翻译的API。 我对NLPIR系统的接口函数说明进行了简单的翻译,如下所示: 1. NLPIR_Init 初始化分析器,并根据配置文件为NLPIR准备数据。 bool NLPIR_Init(const char* sInitDirPath=0, int encoding=GBK_CODE, const char* sLicenceCode=0) 如果初始化成功,返回successed,否则返回false。 char* sInitDirPath:指定存放配置文件Configure.xml和Data文件的路径,默认值为0,表明路径为当前工作目录。 int encoding: 编码格式标识符,默认为GBK_CODE ,也可以设置为UTF8_CODE和BIG5_CODE。 char* sLicenceCode: 商业用户需要使用的许可证编码,免费用户无需使用该参数。 使用NLPIR时必须先执行NLPIR_Init函数(只需执行一次)。系统关闭时还应执行NLPIR_Exit函数来销毁缓存数据。 NLPIR_Init执行失败通常有两个原因:1. 需要的数据文件格式不兼容或丢失;2.配置文件丢失或存在非法参数。还可以通过日志文件来了解更多信息,日志文件存放在默认路径中。 2. NLPIR_Exit 退出程序并释放所有资源和NLPIR使用的缓存数据。 bool NLPIR_Exit(); 执行成功返回successed,否则返回false。 该函数必须在关闭系统时执行,若需重启NLPIR,再次执行NLPIR_Init函数即可。 3. NLPIR_importUserDict 从文件中导入用户自定义的词典。 unsigned int NLPIR_importUserDict(const char * sFilename); 导入的词汇数量。 char * sFilename: 要导入的用户词典文件所在路径。 该函数只有在NLPIR_Init函数执行成功后才能使用。词典文件的格式请参见相关示例。 你只需在更改了用户词典或第一次使用某个词典时执行该函数,当配置文件中的UserDict参数为on时,NLPIR将会(把该词典添加到配置文件中)并在启动时自动加载该词典。当将UserDict置为off时,用户自定义词典文件将不再自动导入。 4. NLPIR_ParagraphProcess 处理一个段落文字,返回运行结果缓存的指针。 const char * NLPIR_ParagraphProcess(const char * sParagraph, int bPOStagged=1); 运行结果缓存的指针。 int bPOStagged: 判断是否需要位置标记,0:无标记;1:有标记。默认值为1。 5. NLPIR_ParagraphProcessA result_t * NLPIR_ParagraphProcessA( const char * sParagraph, int * pResultCount, bool bUserDict=true) 运行结果向量的指针,该指针由系统进行管理,用户无法对它进行分配和释放。 其结构如下: 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,是用户词典中的词;,非用户词典中的词 int weight;// word weight }; int * pResultCount: 结果向量的大小 bool bUserDict:是否使用用户词典 6. NLPIR_FileProcess 处理一个TXT文件。 Double NLPIR_FileProcess(const char * sSourceFilename, const char * sResultFilename, int bPOStagged=1); 如果执行成功,返回处理速度值,否则返回false。 char * sSourceFilename: 要处理的源文件名称; char * sResultFilename: 存储处理结果的文件名称; int bPOStagged: 判断是否需要位置标记,0:无标记;1:有标记。默认值为1。说明: 7. NLPIR_GetParagraphProcessAWordCount int NLPIR_GetParagraphProcessAWordCount(const char *sParagraph); 返回输入段落的词汇数量。 8. NLPIR_ ParagraphProcessAW void NLPIR_ParagraphProcessAW(int nCount,result_t * result); nCount: 输入段落的词汇数量; result: 处理结果的结构体指针; 9. NLPIR_AddUserWord 向用户词典添加一个词汇。 int NLPIR_AddUserWord(const char * sWord); 如果添加成功,返回successed,否则返回false。 char * sWord:要添加的词汇。 10. NLPIR_SaveTheUsrDic 将用户词典保存至硬盘。 int NLPIR_SaveTheUsrDic(); 如果执行成功返回1,否则返回0。 11. NLPIR_DelUsrWord 从用户词典中删除一个词汇。 int NLPIR_DelUsrWord(const char * sWord); 如果要删除的词汇不存在,则返回-1;如果删除成功,则返回该词汇的句柄。 char * sWord:要删除的词汇。 12. NLPIR_GetKeyWords 从输入的段落中提取关键词。 const char * NLPIR_GetKeyWords(const char * sLine,int nMaxKeyLimit=50, 如果执行成功,返回执行结果列表。如果执行失败,返回NULL。 格式如下: "科学发展观 宏观经济 " 或者 "科学发展观 23.80 宏观经济 12.20" (带有权值) 13. NLPIR_GetFileKeyWords 从TXT文件中提取关键词。 const char * NLPIR_GetFileKeyWords(const char * sTextFile, 如果执行成功,返回执行结果列表。如果执行失败,返回NULL。格式同上。 14. NLPIR_GetNewWords 从段落中提取新词。 const char * NLPIR_GetNewWords(const char * sLine, int nMaxKeyLimit=50, 15. NLPIR_GetFileNewWords 从TXT文件中提取新词。 const char * NLPIR_GetFileNewWords(const char * sTextFile, 16. NLPIR_FingerPrint 提取段落的一个指纹。 unsigned long NLPIR_FingerPrint(const char * sLine); 如果执行成功,返回指纹值,否则返回0。 17. NLPIR_SetPOSmap 设置使用的POS map。 int NLPIR_SetPOSmap(int nPOSmap); 如果执行成功,返回1,否则返回0。 int nPOSmap : ICT_POS_MAP_FIRST 计算所一级标注集 ICT_POS_MAP_SECOND 计算所二级标注集 PKU_POS_MAP_SECOND 北大二级标注集 PKU_POS_MAP_FIRST 北大一级标注集 18. NLPIR_GetLastErrorMsg 获取最近一条报错信息。 const char * NLPIR_GetLastErrorMsg(); 获取最近一条报错信息的指针。
以下为新词识别函数,建议脱机使用。
1. NLPIR_NWI_Start 启动新词识别。 bool NLPIR_NWI_Start(); 如果执行成功,返回successed,否则返回false。 2. NLPIR_NWI_AddFile 往新词识别系统中添加待识别新词的文本文件,需要在运行 NLPIR_NWI_Start()之后,才有效。 Int NLPIR_NWI_AddFile(const char * sFilename); char *sFilename:输入的文件名; 3. NLPIR_NWI_AddMem 往新词识别系统中添加一段待识别新词的内存,需要在运行 NLPIR_NWI_Start()之后,才有效。 bool NLPIR_NWI_AddMem(const char *sText); char *sFilename:文件名 4. NLPIR_NWI_Complete 新词识别添加内容结束,需要在运行 NLPIR_NWI_Start()之后,才有效。 bool NLPIR_NWI_Complete(); 5. NLPIR_NWI_GetResult 获取新词识别的结果。 const char * NLPIR_NWI_GetResult(bool bWeightOut=false); 执行结果的列表。 bool bWeightOut:是否输出权重值。 6. NLPIR_NWI_Result2UserDict 将新词识别结果导入到用户词典中,需要在运行 NLPIR_NWI_Complete()之后,才有效,如果需要将新词结果永久保存,建议在执行NLPIR_SaveTheUsrDic函数。 unsigned int NLPIR_NWI_Result2UserDict()