一、普通java项目

(1)添加项目jar包
File -> Project Structure
    Libarries 添加jar包jna-4.0.0.jar
(2)将Data文件夹复制到ICTCLAS2015文件夹下
(3)声明调用分词器的接口,如下:
//定义接口Clibrary,继承自com.sun.jna.Library
public interface CLibrary extends Library{
//定义并初始化接口的静态变量,这一个语句是用来加载dll的,注意dll文件的路径
//可以是绝对路径也可以是相对路径,只需要填写dll的文件名,不能加后缀
//加载dll文件NLPIR.dll
CLibrary Instance =(CLibrary) Native.loadLibrary(
"C:\\jars\\nlpir\\bin\\ICTCLAS2015\\NLPIR",CLibrary.class);
// 初始化函数声明
public int NLPIR_Init(String sDataPath, int encoding, String sLicenceCode);
//执行分词函数声明
public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged);
//提取关键词函数声明
public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut);
//提取文件中关键词的函数声明
public String NLPIR_GetFileKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut);
//添加用户词典声明
public int NLPIR_AddUserWord(String sWord);//add by qp 2008.11.10
//删除用户词典声明
public int NLPIR_DelUsrWord(String sWord);//add by qp 2008.11.10
//获取最后一个错误的说明
public String NLPIR_GetLastErrorMsg();
//退出函数声明
public void NLPIR_Exit();
//文件分词声明
public void NLPIR_FileProcess(String utf8File, String utf8FileResult, int i);

}
(4)分词器使用实例:
String system_charset="UTF-8";
//说明分词器的bin文件所在的目录
String dir="C:\\jars\\nlpir\\bin\\ICTCLAS2015";
int charset_type=1;
String utf8File="C:\\utf8file.txt";
String utf8FileResult ="C:\\utf8result.txt";
//初始化分词器
int init_flag =CLibrary.Instance.NLPIR_Init(dir,charset_type,"0");
String nativeBytes=null;
if(init_flag==0){
nativeBytes=CLibrary.Instance.NLPIR_GetLastErrorMsg();
System.out.println("初始化失败,原因为"+nativeBytes);
return;
}
String sinput="去年开始,打开百度李毅吧,满屏的帖子大多含有“屌丝”二字,一般网友不仅不懂这词什么意思,更难理解这个词为什么会这么火。然而从下半年开始,“屌丝”已经覆盖网络各个角落,人人争说屌丝,人人争当屌丝。\n" +
"从遭遇恶搞到群体自嘲,“屌丝”名号横空出世";
try{

//参数0代表不带词性,参数1代表带有词性标识
nativeBytes=CLibrary.Instance.NLPIR_ParagraphProcess(sinput,0);
System.out.println("分词结果为:"+nativeBytes);
//添加用户词典
CLibrary.Instance.NLPIR_AddUserWord("满屏的帖子 n");
CLibrary.Instance.NLPIR_AddUserWord("更难理解 n");
//执行分词
nativeBytes=CLibrary.Instance.NLPIR_ParagraphProcess(sinput,1);
System.out.println("增加用户词典后分词的结果为: " +nativeBytes);
//删除用户定义的词 更难理解
CLibrary.Instance.NLPIR_DelUsrWord("更难理解");
//执行分词
nativeBytes=CLibrary.Instance.NLPIR_ParagraphProcess(sinput,1);
System.out.println("删除用户词典后分词结果为: "+nativeBytes);
//从utf8File目录中读取语句进行分词,将结果写入utf8FileResult对应的路径之中,保留词性对应的标志
CLibrary.Instance.NLPIR_FileProcess(utf8File,utf8FileResult,1);
//获取sinput中对应的关键词,指定关键词数目最多为3
nativeBytes=CLibrary.Instance.NLPIR_GetKeyWords(sinput,3,false);
System.out.println("关键词提取结果是:"+nativeBytes);
//获取文件中对应的关键词
nativeBytes=CLibrary.Instance.NLPIR_GetFileKeyWords(utf8File,10,false);
System.out.println("关键词提取结果是:"+nativeBytes);
}catch (Exception e){
e.printStackTrace();
}
(3)String编码方式转换函数的实现:
//转换String的编码方式
public static String transString(String str,String ori_encoding,String new_encoding){
try{
return new String(str.getBytes(ori_encoding),new_encoding);
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return null;
}
二、spark项目
    请注意,一中步骤(1),(2),(3)也是必不可少的!
    有了普通实现的完成,下一步我想将分词部署在spark中,就有了下述项目。我想将文本转换为 单词,词性标志 PairRDD,具体实现如下,有上面的基础,就不在详细解释了。
SparkConf conf =new SparkConf().setAppName("test").setMaster("local");
JavaSparkContext sc =new JavaSparkContext(conf);
JavaRDD<String> inputs =sc.textFile("C:\\utf8file.txt");
JavaRDD<String> source=inputs.filter(
new Function<String, Boolean>() {
public Boolean call(String v1) throws Exception {
return !v1.trim().isEmpty();
}
}
);
JavaRDD<String> transmit = source.mapPartitions(
new FlatMapFunction<Iterator<String>, String>() {
public Iterable<String> call(Iterator<String> it) throws Exception {
List<String> list=new ArrayList<String>();
String dir="C:\\jars\\nlpir\\bin\\ICTCLAS2015";
int charset_type=1;
int init_flag =CLibrary.Instance.NLPIR_Init(dir,charset_type,"0");
if(init_flag==0){
throw new RuntimeException(CLibrary.Instance.NLPIR_GetLastErrorMsg());
}
try{
while(it.hasNext()){
list.add(CLibrary.Instance.NLPIR_ParagraphProcess(it.next(),1));
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}
).filter(
new Function<String, Boolean>() {
public Boolean call(String v1) throws Exception {
return !v1.trim().isEmpty();
}
}
);

JavaRDD<String> words = transmit.flatMap(
new FlatMapFunction<String, String>() {
public Iterable<String> call(String s) throws Exception {
return Arrays.asList(s.split(" "));
}
}
).filter(
new Function<String, Boolean>() {
public Boolean call(String v1) throws Exception {
return !v1.trim().isEmpty();
}
}
);
JavaPairRDD<String, String> result = words.mapToPair(
new PairFunction<String, String, String>() {
public Tuple2<String, String> call(String s) throws Exception {
String[] split = s.split("/");
return new Tuple2<String, String>(split[0], split[1]);
}
}
);
for(Tuple2<String,String> t:result.collect())
System.out.println(t._1()+" "+t._2());

sc.stop();
程序执行结果:

scala版本
def ok(f:Iterator[String]):Iterator[String] ={
val dir="C:\\jars\\nlpir\\bin\\ICTCLAS2015"
val charset_type=1
val init_flag=CLibrary.Instance.NLPIR_Init(dir,charset_type,"0")
if(init_flag==0)
null
val buf = new ArrayBuffer[String]
for(it<-f){
buf+=(CLibrary.Instance.NLPIR_ParagraphProcess(it,0))
}
buf.iterator
}

def main(args:Array[String]): Unit = {
val conf = new SparkConf().setAppName("test").setMaster("local");
val sc = new SparkContext(conf);
val inputs = sc.textFile("c:\\utf8file.txt");
val results=inputs.mapPartitions(
ok
);
results.collect().foreach(println)

}



NLPIR中文分词器的使用的更多相关文章

  1. ES-自然语言处理之中文分词器

    前言 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块.不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性.句法树 ...

  2. Elasticsearch系列---使用中文分词器

    前言 前面的案例使用standard.english分词器,是英文原生的分词器,对中文分词支持不太好.中文作为全球最优美.最复杂的语言,目前中文分词器较多,ik-analyzer.结巴中文分词.THU ...

  3. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  4. 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  5. 转:solr6.0配置中文分词器IK Analyzer

    solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用.一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持s ...

  6. 我与solr(六)--solr6.0配置中文分词器IK Analyzer

    转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无 ...

  7. Solr入门之(8)中文分词器配置

    Solr中虽然提供了一个中文分词器,但是效果很差,可以使用IKAnalyzer或Mmseg4j 或其他中文分词器. 一.IKAnalyzer分词器配置: 1.下载IKAnalyzer(IKAnalyz ...

  8. Solr学习笔记之2、集成IK中文分词器

    Solr学习笔记之2.集成IK中文分词器 一.下载IK中文分词器 IK中文分词器 此文IK版本:IK Analyer 2012-FF hotfix 1 完整分发包 二.在Solr中集成IK中文分词器 ...

  9. solr4.7中文分词器(ik-analyzer)配置

    solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器. 一.版本信息 solr版本:4.7.0 需 ...

随机推荐

  1. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能

    主要内容:  JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...

  2. java导出和读取excel数据

    使用的是poi的jar包 下载地址http://poi.apache.org/download.html 主要是把jar包导入,直接新建一个列子测试一下就明白了.使用起来还是比较方便的,代码里面的原理 ...

  3. JavaScript返回上一页并自动刷新

    返回并刷新 <script>alert("恭喜您,操作成功!"); window.location.href=document.referrer; </scrip ...

  4. Servlet程序开发--取得初始化配置信息

    代码: 两个初始化init方法,一起出现的话,有参的才起作用 package org.lxh.servletdemo ; import java.io.* ; import javax.servlet ...

  5. SQL查询重复记录

    假设现有一张人员表(表名:Person),若想将姓名.身份证号.住址这三个字段完全相同的记录查找出来,使用 1: SELECT p1.* 2: FROM persons p1,persons p2 3 ...

  6. 实例:SSh结合Easyui实现Datagrid的分页显示

    近日学习Easyui,发现非常好用,界面很美观.将学习的心得在此写下,这篇博客写SSh结合Easyui实现Datagrid的分页显示,其他的例如添加.修改.删除.批量删除等功能将在后面的博客一一写来. ...

  7. js document

    <html><head lang="en"> <meta charset="UTF-8"> <title>< ...

  8. expected: file:///

    [java] java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.190.128:9000/user/hadoop/output/ ...

  9. HDU 2087 剪花布条(KMP基础应用)

    KMP基础,注意输入 #include<cstdio> #include<cstring> #include<iostream> using namespace s ...

  10. 单源最短路-dijkstra算法(未优化)

    bool used[maxn]; int g[maxn][maxn]; // 边未联系的填充为INF int d[maxn]; void dijkstra(int s){ memset(g,false ...