NLPIR分词教程 Scala版

本文原版为中科院分词系统(NLPIR)JAVA简易教程,由于个人需要,将其修改为Scala版本,供有需求者参考。

其中工程结构基于IDEA,目录如下:

将原文CLibrary.java修改为CLibrary.scala,源码如下:

import com.sun.jna.{Library, Native}

/**
  * Created by maplejaw on 2017/2/8.
  */
 trait CLibrary extends Library{


  //初始化
   def NLPIR_Init(sDataPath: String, encoding: Int, sLicenceCode: String): Int

  //对字符串进行分词
   def NLPIR_ParagraphProcess(sSrc: String, bPOSTagged: Int): String

  //对TXT文件内容进行分词
   def NLPIR_FileProcess(sSourceFilename: String, sResultFilename: String, bPOStagged: Int): Double

  //从字符串中提取关键词
   def NLPIR_GetKeyWords(sLine: String, nMaxKeyLimit: Int, bWeightOut: Boolean): String

  //从TXT文件中提取关键词
   def NLPIR_GetFileKeyWords(sLine: String, nMaxKeyLimit: Int, bWeightOut: Boolean): String

  //添加单条用户词典
   def NLPIR_AddUserWord(sWord: String): Int

  //删除单条用户词典
   def NLPIR_DelUsrWord(sWord: String): Int

  //从TXT文件中导入用户词典
   def NLPIR_ImportUserDict(sFilename: String): Int

  //将用户词典保存至硬盘
   def NLPIR_SaveTheUsrDic: Int

  //从字符串中获取新词
    def NLPIR_GetNewWords(sLine: String, nMaxKeyLimit: Int, bWeightOut: Boolean): String

  //从TXT文件中获取新词
    def NLPIR_GetFileNewWords(sTextFile: String, nMaxKeyLimit: Int, bWeightOut: Boolean): String

  //获取一个字符串的指纹值
   def NLPIR_FingerPrint(sLine: String): Long

  //设置要使用的POS map
   def NLPIR_SetPOSmap(nPOSmap: Int): Int

  //获取报错日志
   def NLPIR_GetLastErrorMsg: String

  //退出
   def NLPIR_Exit()


}

object CLibrary{

  def getInstance(nlpir_dir: String): CLibrary = {
    // 定义初始化接口
    val Instance = Native.loadLibrary(nlpir_dir, classOf[CLibrary]).asInstanceOf[CLibrary]
    Instance
  }
}

将原文Demo.java修改为Demo.scala,源码如下:

import com.sun.jna.Native

/**
  * Created by maplejaw on 2017/2/8.
  */


object Demo {

  def main(args: Array[String]): Unit = {

    //获取实例
    val instance = CLibrary.getInstance("nlplib/NLPIR"); //传入NLPIR库所在的路径

   // val Instance = Native.loadLibrary("nlplib/NLPIR", classOf[CLibrary]).asInstanceOf[CLibrary]
    //初始化
    val init_flag = instance.NLPIR_Init(".", 1, "0")

    var resultString: String = null;

    if (0 == init_flag) {
      resultString = instance.NLPIR_GetLastErrorMsg;
      Console.err.println("初始化失败!\n" + resultString)
      return
    }

    //以下开始测试分词
    val sInput = "哎~那个金刚圈尺寸太差,前重后轻,左宽右窄,他戴上去很不舒服,"
     + "整晚失眠会连累我嘛,他虽然是只猴子,但你也不能这样对他啊,官府知道会说我虐待动物的," 
     + "说起那个金刚圈,啊~去年我在陈家村认识了一个铁匠,他手工精美,价钱又公道,童叟无欺," 
     + "干脆我介绍你再定做一个吧!"

    try {
      resultString = instance.NLPIR_ParagraphProcess(sInput, 1)
      println("分词结果为:\n " + resultString)


      instance.NLPIR_AddUserWord("金刚圈")
      instance.NLPIR_AddUserWord("左宽右窄")
      resultString = instance.NLPIR_ParagraphProcess(sInput, 1)
      println("增加用户词典后分词结果为:\n" + resultString)


      instance.NLPIR_DelUsrWord("左宽右窄")
      resultString = instance.NLPIR_ParagraphProcess(sInput, 1)
      println("删除用户词典后分词结果为:\n" + resultString)


      resultString = instance.NLPIR_GetKeyWords(sInput, 10, false)
      println("从段落中提取的关键词:\n" + resultString)

      resultString = instance.NLPIR_GetNewWords(sInput, 10, false)
      println("新词提取结果为:\n" + resultString)

    } catch {
      case e: Exception => {
        println("错误信息:")
        e.printStackTrace()
      }
    } finally {
      //分词完毕后需要退出
      instance.NLPIR_Exit()
    }
  }

}

运行结果如下:

分词结果为:
 哎/e ~/w 那个/rz 金刚/n 圈/qv 尺寸/n 太/d 差/a ,/wd 前/f 重/v 后/f 轻/a ,/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 前/f 重/v 后/f 轻/a ,/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 前/f 重/v 后/f 轻/a ,/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 ,/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 
从段落中提取的关键词:
陈家村#左宽#金刚圈#去年#
新词提取结果为:
发布了30 篇原创文章 · 获赞 287 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/maplejaw_/article/details/54930938