NLPIR分词教程 Scala版
2017-02-08 18:53
246 查看
本文原版为中科院分词系统(NLPIR)JAVA简易教程,由于个人需要,将其修改为Scala版本,供有需求者参考。
其中工程结构基于IDEA,目录如下:
将原文
将原文
运行结果如下:
其中工程结构基于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 从段落中提取的关键词: 陈家村#左宽#金刚圈#去年# 新词提取结果为:
相关文章推荐
- 中科院分词系统(NLPIR)JAVA简易教程
- 中科院分词系统(NLPIR)JAVA简易教程(转载)
- 中科院分词系统(NLPIR)JAVA简易教程
- Elasticsearch2.x 拼音分词插件lc-pinyin安装教程
- 2------------NLPIR(ICTCLAS2016)分词系统添加用户词典功能
- Scala基础教程(五):函数、闭包
- 云星数据---Scala实战系列(精品版)】:Scala入门教程018-Scala实战源码-Scala内部类
- 云星数据---Scala实战系列(精品版)】:Scala入门教程028-Scala实战源码-Scala 的特质 (接口)04
- 云星数据---Scala实战系列(精品版)】:Scala入门教程032-Scala实战源码-Scala 对象 02 单例对象
- Scala开发入门教程
- 云星数据---Scala实战系列(精品版)】:Scala入门教程041-Scala实战源码-Scala 数组array
- Scala开发入门教程 spark基础课程
- 云星数据---Scala实战系列(精品版)】:Scala入门教程051-Scala实战源码-Scala implicit 操作02
- 云星数据---Scala实战系列(精品版)】:Scala入门教程056-Scala实战源码-Scala IO 读写
- 中科院分词NLPIR,demo运行初始化失败问题记录
- Scala教程(十八)并发编程详解
- 智能语言-中科院分词系统ICTCLAS(NLPIR)
- Scala开发教程(16): 没有“break”和“continue”的日子
- Scala简明教程(3)
- Scala开发入门教程