1. 苏葳的备忘录首页
  2. 开发工具

NLPIR/ICTCLAS2014中文分词的C#函数包装

c# NLPIR ICTCLAS新版ICTCLAS2014现在改名成NLPIR了。下载之后,主要有4个dll,分别是linux的32/64位和windows的32/64位,提供的函数也不多,使用起来还是比较方便的。使用时,有用的就是一个dll,然后Data目录,里面有词典,配置文件等。新建一个工程,编译生成debug目录,然后把nlpir.dll及Data目录拷到debug目录下,然后生成在debug目录下的程序就可以正常使用NLPIR中文分词了。

 if (!NLPIR_Init("", 0, ""))//给出Data文件所在的路径,注意根据实际情况修改。
 {
     Debug.WriteLine("Init ICTCLAS failed!");
     return;
 }

这是初始化NLPIR的第一步。最后要由:

NLPIR_Exit();

来退出。

IntPtr intPtr =NLPIR_ParagraphProcess(s);//切分结果保存为IntPtr类型        
String str = Marshal.PtrToStringAnsi(intPtr);//将切分结果转换为string

将一个文本串s传入并得到分词后的结果。

intPtr = NLPIR_GetKeyWords(s, 10, true);         
str = Marshal.PtrToStringAnsi(intPtr);//将切分结果转换为string 
//将一个文本串传入并得到提取的关键词结果。

下面是用户词典操作部份代码:

      String ss;
          Debug.WriteLine("insert user dic:");
          ss = Console.ReadLine();
        while (ss[0]!='q'&&ss[0]!='Q')
        {
            //用户词典中添加词
            int iiii = NLPIR_AddUserWord(ss);//词 词性 example:点击下载 vyou
            intPtr = NLPIR_ParagraphProcess(s, 1);
            str = Marshal.PtrToStringAnsi(intPtr);
            Debug.WriteLine(str);
            NLPIR_SaveTheUsrDic(); // save the user dictionary to the file
            //删除用户词典中的词
            Debug.WriteLine("delete usr dic:");
            ss = Console.ReadLine();
            iiii = NLPIR_DelUsrWord(ss);
            str = Marshal.PtrToStringAnsi(intPtr);
            Debug.WriteLine(str);
            NLPIR_SaveTheUsrDic();
        }

新词发现功能:

 

     NLPIR_NWI_Start();//新词发现功能启动
        //NLPIR_NWI_AddFile("../../test/屌丝,一个字头的诞生.TXT");//添加一个待发现新词的文件,可反复添加
        NLPIR_NWI_AddMem(textBox1.Text);//添加一段文本
        NLPIR_NWI_Complete();//新词发现完成
        intPtr = NLPIR_NWI_GetResult();
        str = Marshal.PtrToStringAnsi(intPtr);

下面函数是文件处理,实际就是把一个源文件生成为一个分词结果文件:

 

NLPIR_FileProcess("屌丝,一个字头的诞生.TXT", "屌丝,一个字头的诞生-分词结果.TXT");
NLPIR_NWI_Result2UserDict();//新词识别结果导入分词库
NLPIR_FileProcess("屌丝,一个字头的诞生.TXT", "屌丝,一个字头的诞生-自适应分词结果.TXT");

注意NLPIR_NWI_Result2UserDict函数必须用在NLPIR_NWI_Complete()函数调用之后。实际上UserDict.pdat是不可读的,但由日期来看确实更新了,证明新词应该加了进去。

由分词结果来看,对比其它分词工具,NLPIR更科学一些,更符合原文的本来含义。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/579.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

评论列表(2条)

  • 匿名
    匿名 2015年10月4日 21:07

    您好,我的程序中一直出现上下文中不存在名称“NLPIR_AddUserWord”,无法转义识别等问题,想问问是怎么回事

  • 逆流的鱼
    逆流的鱼 2015年10月4日 21:07

    您好,我的程序中一直出现上下文中不存在名称“NLPIR_AddUserWord”,无法转义识别等问题,想问问是怎么回事