您的位置:首页 > 其它

NLPIR分词教程 Scala版

2017-02-08 18:53 246 查看
本文原版为中科院分词系统(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
从段落中提取的关键词:
陈家村#左宽#金刚圈#去年#
新词提取结果为:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala idea nlpir 分词