目录
第一部分 简介...1
第二部分ubuntu系统...2
1 所有相关软件...2
2 ltp4库编译...2
2.1安装JDK并配置环境变量...2
2.2安装Ant.2
2.3安装cmake.3
2.4编译LTP.3
2.5编译LTP4j3
3 eclipse下测试...3
3.1功能简介...3
3.2详细代码...4
第三部分win7系统...7
3.1所有相关软件...7
3.2 Ltp4j库编译...7
3.2.1 JDk安装...7
3.2.2 Ant安装...8
3.2.3Cmake安装...8
3.2.4编译LTP4j8
3.2.5编译LTP.9
3.2.6编译ltp4j代理...9
3.3 eclipse下测试...10
第四部分 结语...11
参考资料:...11
LTP4J简介。LTP底层均是C++实现,而LTP4J是对LTP的Java接口封装。所以对于需要Java接口的开发人员来说要通过调用LTP4J的接口实现调用LTP的目的,LTP4J封装了几个独立的方法,分别是Segmentor / Postagger /NER/Parser /SRL,与之对应的实现功能是分词、词性标注、命名实体识别、句法分析、语义角色标注。
由于官网上没有给编译好的jar包和库文件,所以要根据自身电脑环境进行相应的编译操作。
使用ltp的java编程接口,要做的准备工作主要有二个:1,使用Ant编译ltp4j,生成ltp4j.jar包;2,使用cmake/c++编译环境对ltp工程进行编译生成ltp4j依赖库文件。
本文档依次在ubuntu、win7操作系统下完成了ltp4j的编译工作,并用官网上给的java代码进行了测试。详细如以下二部分。
本部分所用的软件基本上都上官网上下载的最新,当然受限于硬件,所用的ubuntu系统是老了些。
软件 |
版本信息 |
官网 |
系统 |
ubuntu12.04 32 |
https://www.ubuntu.com/download |
jdk |
apache-ant-1.9.7-bin.tar.gz |
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html |
ant |
apache-ant-1.9.7-bin.tar.gz |
http://ant.apache.org/ |
cmake |
cmake-3.7.0-rc1.tar.gz |
https://cmake.org/ |
eclipse |
eclipse-jee-neon-R-linux-gtk.tar.gz |
https://www.eclipse.org/downloads/ |
ltp |
ltp-master.zip |
https://github.com/HIT-SCIR |
ltp4j |
ltp4j-master.zip |
https://github.com/HIT-SCIR |
ltp |
ltp-data-v3.3.1.zip |
http://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F |
自行设定jdk安装目录。在安装目录解压,解压:tar -xzvf jdk-8u101-linux-i586.tar.gz
配置环境变量:
exportJAVA_HOME=/usr/local/java/jdk1.8.0_101
export JRE_HOEM=${JAVA_HOME}/jre
exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
检测命令:java -version
自行设定ant安装目录。在安装目录解压、,解压:tar -xzvf jdk-8u101-linux-i586.tar.gz
配置环境变量:
exportANT_HOME=/usr/local/ant/apache-ant-1.9.7
export PATH=${ANT_HOME}/bin:$PATH
自行设定cmake安装目录。如果没有g++,则先行安装:sudo apt-get install g++
在安装目录解压,解压:tar -xzvf cmake-3.7.0-rc1.tar.gz
在解压的目录执行:
./configure
make
make install
自行设定ltp安装目录。在安装目录解压,解压:tar -xzvf ltp-master.zip
在解压后目录,使用./configure检查编译环境,没有问题则执行make进行编译。
自行设定ltp4j安装目录。在安装目录解压,解压:tar -xzvf ltp4j-master.zip
在解压后的目录ltp4j-master下执行ant命令,编译后,可在ltp4j-master/output/jar目录下找到ltp4j.jar包。
在对ltp4j编译前,修改文件...。修改后,执行“cmake .”“make”两个命令进行编译,编译后,则在ltp4j-master/libs下生成动态库:libner_jni.so; libpostagger_jni.so; libsplit_sentence_jni.so; libparser_jni.so;libsegmentor_jni.so;libsrl_jni.so
配置环境变量,将编译的动态库路径加到环境变量:
exportLD_LIBRARY_PATH=/usr/local/LTP/tmpliso
至此完成。
首先需要解压ltp的数据模型文件:ltp-data-v3.3.1.zip,解压目录可以自己设定。
在eclipse里新建一个工程,ltp4j.jar导入到工程,至此,配置完成,下边是ltp的五个功能。
ltp提供的主要功能有:分词,词性标注,命名实体识别,句法分析,语义角色标注。
每个功能基本都是三个步骤:1,create, 读取模型文件,初始化功能实例;2,功能接口,实现相应的功能;3,release,释放模型文件、资源。
以下功能都是官方文档中的,注意的是模型文件是ltp-data-v3.3.1.zip解决所得。
/**
* 1,分词功能测试
*/
publicvoid testSegment() {
if(Segmentor.create("ltp_data/cws.model")< 0) {
System.out.println("加载失败!");
return;
}
Stringsent = "我从事自然语言处理方面的工作!";
System.out.println(sent);
List
System.out.println(sent);
intsize = Segmentor.segment(sent, words);
System.out.println(sent);
for(int i = 0; i < size; i++) {
System.out.println(words.get(i));
}
Segmentor.release();
}
/**
* 2,词性标注工曾测试
*/
publicvoid testPosTag() {
if(Postagger.create("ltp_data//pos.model")< 0) {
System.err.println("加载失败!");
return;
}
List
words.add("我");
words.add("从事");
words.add("自然");
words.add("语言");
words.add("处理");
words.add("方面");
words.add("的");
words.add("工作");
words.add("!");
List
intsize = Postagger.postag(words, postags);
for(int i = 0; i < size; i++) {
System.out.print(words.get(i)+ "_" + postags.get(i));
if(i == size - 1) {
System.out.println();
}else {
System.out.print("|");
}
}
Postagger.release();
}
/**
*3,命名实体识别功能测试
*/
publicvoid testNer(){
if(NER.create("ltp_data/ner.model")<0){
System.err.println("load failed");
return;
}
List
List
List
words.add("中国");tags.add("ns");
words.add("国际");tags.add("n");
words.add("广播");tags.add("n");
words.add("电台");tags.add("n");
words.add("创办");tags.add("v");
words.add("于");tags.add("p");
words.add("1941年");tags.add("m");
words.add("12月");tags.add("m");
words.add("3日");tags.add("m");
words.add("。");tags.add("wp");
NER.recognize(words,tags, ners);
for (int i = 0; i < words.size(); i++) {
System.out.println(ners.get(i));
}
NER.release();
}
/**
* 4,句法分析功能测试
*/
publicvoid testParser(){
if(Parser.create("ltp_data/parser.model")<0){
System.err.println("loadfailed");
return;
}
List
List
words.add("一把手");tags.add("n");
words.add("亲自");tags.add("d");
words.add("过问");tags.add("v");
words.add("。");tags.add("wp");
List
List
int size =Parser.parse(words,tags,heads,deprels);
for(int i = 0;i System.out.print(heads.get(i)+":"+deprels.get(i)); if(i==size-1) { System.out.println(); } else{ System.out.print(" "); } } Parser.release(); } /** * 5,语义角色标注功能测试 */ publicvoid testSrl(){ SRL.create("ltp_data/srl"); ArrayList words.add("一把手"); words.add("亲自"); words.add("过问"); words.add("。"); ArrayList tags.add("n"); tags.add("d"); tags.add("v"); tags.add("wp"); ArrayList ners.add("O"); ners.add("O"); ners.add("O"); ners.add("O"); ArrayList heads.add(2); heads.add(2); heads.add(-1); heads.add(2); ArrayList deprels.add("SBV"); deprels.add("ADV"); deprels.add("HED"); deprels.add("WP"); List SRL.srl(words, tags, ners, heads, deprels,srls); for (int i = 0; i < srls.size(); ++i) { System.out.println(srls.get(i).first +":"); for (int j = 0; j < srls.get(i).second.size();++j) { System.out.println(" tpye = "+srls.get(i).second.get(j).first + " beg = "+srls.get(i).second.get(j).second.first + " end = "+ srls.get(i).second.get(j).second.second); } } SRL.release(); } 软件 软件信息 操作系统 Win7 64 位 Jdk jdk-8u101-windows-x64.exe Ant apache-ant-1.9.7 Cmake cmake-3.6.2-win64-x64.msi C++编译环境 vs2010旗舰 eclipse org.eclipse.platformversion=3.7.0 关于ltp相关的和ubuntu下用的是同一套:ltp,ltp4j,ltp数据模型 win7下jdk环境变量设置,略。 ant从官网下载对就电脑的安装包后,到win7下解压即可,解压目录可以设置。 环境变量设置。新建ANT_HOME值为:“自己目录\apache-ant-1.9.7”,编辑PATH,在PATH变量值的末尾添加:“;%ANT_HOME%\bin” 验证是否配置成功,打开cmd,输入ant,如果显示: Buildfile:build.xml does not exist! Buildfailed 这样的话,说明配置成功,因为ant默认运行build.xml文件,该文件需要手动创建。 cmake是从官网下载的可执行文件形式的安装包。下载对就系统版本,一键安装即可。(http://www.cmake.org/download/) 首先下载LTP4J源码,下载后,我的本地目录为:F:\LTP。 cmd进行LTP4j的项目根目录下,执行ant命令: 图1 执行成功后,LTP4j在项目下会生成output文件夹,在里边可找到ltp4j.jar 。 在编译LTP4j的C++代理之前,需要先编译LTP。编译LTP主要有二步:使用工具CMake构建项目;在vs2010下编译。 使用工具CMake构建项目。首先下载LTP源码ltp-master.zip,解压后重命名为ltp,我的存放路径为:F:\LTP。在ltp目录下新建一个build文件夹。打开cmakeGUI,相关输入设置如图: 图2 点击configure,在弹出框中选择vs2010的(结合自己电脑选择相应的编辑器)。点击generate,执行完成。会在build下生成相应的项目配置文件。 用vs2010打开build下的ALL_BUILD项目,选择Release(*)方式构建项目。完成以后,则ltp的libs会得到所想要lib库文件。 同编译ltp4j一样,也需要二个步骤:用cmake构建项目;用vs2010进行编译。首先,修改ltp4j目录下的CMakeLists.txt文件,将LTP路径设置为上节的ltp路径,如图: 图3 构建VC项目。用cmake打开ltp4j,同时在ltp4j目录下建立一个build文件夹,如图: 图4 依次点击configure、generate。构建完毕,会在build下生成相应的项目文件。 用vs2010打开build下的项目文件ALL_BUILD.vcxproj,选择Release(*)方式构建项目。完毕后在ltp4j的libs会所得到需要的文件。 3.2节编译中,我们需要以下文件:1,ltp下lib中的ner.dll、parser.dll、postagger.dll、splitsnt.dll、segmentor.dll、srl.dll六个库文件;2,ltp4j下libs中的全部文件;3,ltp4j下out中的ltp4j.jar包。 同时需要下载ltp所用到数据模型ltp-data-v3.3.1.zip ,这个同ubuntu下的数据模型是同一个。下载后解压即可,我是用的时候将其复制到项目文件下。 在eclipse中新建项目,将ltp4j.jar包导入。将ltp下lib中6个库文件和ltp4j下libs中的全部文件复制到项目的根目录下。如图: 图5 至于测试代码,和ubuntu下的代码一样,用同一套测试即可。 本文档简要介绍了LTP的java编程接口的使用方法。如开始的所说,主要LTP核心是C++开发。java接口的话,则需要编译ltp4j和对应的ltp库文件。 主要参考文件如附录,文中完成的测试类文件为:NtpTest.java。 1,LTP官方文档:https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md 2,《LTP随笔——本地调用ltp之ltp4j》http://www.bubuko.com/infodetail-542352.html 3,《封装LTP4J的本地LTML调用接口》http://www.tuicool.com/articles/EFj2EnQ 4,《编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码》http://www.tuicool.com/articles/jYbqUn 第三部分 win7-64系统
3.1 所有相关软件
3.2 ltp4j库编译
3.2.1 JDK安装
3.2.2 Ant安装
3.2.3 Cmake安装
3.2.4 编译LTP4j
3.2.5 编译LTP
3.2.6 编译ltp4j代理
3.3 eclipse下测试
第四部分 结语
参考资料: