关于NLPIR应用在KETTLE中的探索
一:什么是NLPIR?
NLPIR汉语分词系统(自然语言处理与信息检索共享平台),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;张华平博士先后倾力打造十余年,内核升级10次。
全球用户突破20万,先后获得了2010年钱伟长中文信息处理科学技术奖一等奖,2003年国际SIGHAN分词大赛综合第一名,2002年国内973评测综合第一名。
二:我们使用NLPIR可以做什么?

三:如何把分词算法用到我们的ETL工作中?
下面我们以KETTLE为例来说明
3.1:利用NLPIR接口开发Java Project
首先使用NLPIR提供的demo开发一个java project,通过在main函数中测试可以完成简单的分词功能,如下图所示

3.2:导出Java Project为jar包
把开发的java project导出为 fenci.jar放入到......\pdi-ce-6.0.1.0-386\data-integration\lib下面

3.3:kettle中引用nlpir分词算法
在kettle的ktr中拖入一个Java 代码的控件,代码如下图所示

具体代码为:
import test.TestFunction;
import nlpir.NlpirTest;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
TestFunction tf=new TestFunction();
NlpirTest nt=new NlpirTest();
if (r == null) {
setOutputDone();
return false;
} if (first){
first = false;
} r = createOutputRow(r, data.outputRowMeta.size()); // Get the value from an input field String test_value2 = get(Fields.In, "zd").getString(r); // play around with it
String s_value =nt.FenCi(test_value2); // Set a value in a new output field
get(Fields.Out, "splitword_value").setValue(r,s_value);
// Send the row on to the next step.
putRow(data.outputRowMeta, r); return true;
}
这样输出中就会新增加一列字段名为 "splitword_value"的输出,如下图所示,左侧和下面显示正常则说明类书写正常

3.4:测试效果

3.5:难点解析
从下载的官方文件中得知:
1.分词和提取关键词在一起jnaTest是新词发现和关键词提取在一起。
2.如果加载项目后无法运行请配置classpath中的lib路径为jna包的路径。
3.loadlibrary中的dll路径为你项目中dll的路径,该路径可以是绝对路径或者相对路径。
4.如果出现未提示错误,可以F5刷新项目查看日志文件。
5.建议jdk使用32,因为jna在32jdk上更稳定。
所以本人在64bit jdk下面没有成功,在kettle环境引用32bit的jdk后一切都可以跑起来了
另:由于是32bit的jdk,需要修改kettle的启动文件 spoon.bat中的默认设置修改如下
原来的值:if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
修改后为:if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx1024m" "-XX:MaxPermSize=256m"
保存spoon.bat再次启动 一切正常
关于NLPIR应用在KETTLE中的探索的更多相关文章
- kettle中全局变量的设置
设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:
- kettle中调用java类
kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...
- kettle中使用JavaScript的一个例子
最近在使用kettle的时候遇到一个问题,需要对输入的一个字段进行格式化,逻辑比较复杂(需要做替换掉指定的字符串,然后将数字部分不足四位的数前边补0等操作),kettle中没有提供直接的插件来支持复杂 ...
- Kettle中根据一个输入行派生出多个输出行
依然在北京,早上停电了,整个人感觉对不好了,接下来就说一下在使用ETL工具kettle做数据校验的时候遇到的一些问题,一级解决方案. 1:数据校验效果图下图: 原始表数据(需要校验的表数据) 对上表数 ...
- Kettle中txt类型数据源作为输入需要注意的地方
文本类型在kettle中作为数据源的时候,需要注意的几点,ktr的机构如下图 1:txt文本的格式 2:文本输入控件的设置 --2.1:选择文件所在物理位置 --2.2:设置分隔符,注意头部数量去掉, ...
- kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询
kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询 如果你须要实现非传统的数据库查询操作.为了讨论这样的情景,我们如果你须要读取数据库中的正則表達式,然后检查输入的 ...
- 在kettle中实现数据验证和检查
在kettle中实现数据验证和检查 在ETL项目,输入数据通常不能保证一致性.在kettle中有一些步骤能够实现数据验证或检查.验证步骤能够在一些计算的基础上验证行货字段:过滤步骤实现数据过滤:jav ...
- zz深度学习在美团配送 ETA 预估中的探索与实践
深度学习在美团配送 ETA 预估中的探索与实践 比前一版本有改进: 基泽 周越 显杰 阅读数:32952019 年 4 月 20 日 1. 背景 ETA(Estimated Time of A ...
- Kettle中ETL的效率优化
ETL效率优化 开启数据库日志记录及性能监控 如果我们想要优化一个ETL(KTR或者KJB)的性能,我们首先需要知道的就是它的瓶颈在哪里.而这些信息一般只能在ETL运行的步骤度量中看到,并且是不会持久 ...
随机推荐
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- LuoguP5017 摆渡车 $dp$
题意 戳这里 吐槽 听同学说今年\(pjT3\)很难,于是就去看了下. 一眼斜率优化...为什么\(n,m\)这么小啊... 感觉这题出的还是不错的. Solution 首先我们先转化一波题意:给出数 ...
- 【BZOJ】4260: Codechef REBXOR【Trie树】【前后缀异或最大】
4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2218 Solved: 962[Submit][Stat ...
- Codeforces Round #295 (Div. 2)C - DNA Alignment 数学题
C. DNA Alignment time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Alpha冲刺(1/10)——追光的人
1.队友信息 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hengyumo/ 221600240 真·大能猫 https://www.cnblogs. ...
- vue父子组件使用时遇到的一个问题
子组件一定要写在父组件之前,例如: //子vue,这里遇到一个坑,那就是子vue一定要写在父vue前面,不然会报错. Vue.component('todo-item', { template: $( ...
- spring---aop(6)---Spring AOP中ProxyFactoryBean介绍
写在前面 这篇文章里面就要说说Spring自己的AOP,搞清楚哪种方式是Spring自己实现的AOP,哪种方式是Spring引入aspectj的AOP. 简单例子 Spring自己的AOP实现在于Pr ...
- 磁盘满了MySQL会做什么?
最近遇到一个故障和磁盘满有关系,并且同事也发现经常有磁盘满导致操作hang住无响应的情况,于是抽时间研究了一下这2种情况. 一.磁盘满了之后MySQL会做什么? 我们看下官方的说法 When a di ...
- [原] corePlot 类库与iOS自带类库使用方法对比(很多开源代码都有这个特点)
——人类最倚重的是自己的“以往经验”.—— 我们直接看一下在corePlot 类库和iOS自带类中为一个控件设置文本显示格式的实现. * corePlot 类库中,为一个对象设置标题显示格式 , ...
- 8个免费且实用的C++ GUI库(转载)
原文链接:http://zoomzum.com/8-free-and-useful-c-gui-libraries/ 作者的话:C++标准中并没有包含GUI,这也使得C++开发图形化界面需要依赖于 ...