常用工具包-哈工大语言技术平台(LTP)-本地安装-java接口(ubuntu,win7-64位)

目录

第一部分 简介...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系统

2.1所有相关软件

         本部分所用的软件基本上都上官网上下载的最新,当然受限于硬件,所用的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

 

2 ltp4库编译

2.1安装JDK并配置环境变量

自行设定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

2.2 安装Ant

自行设定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

2.3 安装cmake

自行设定cmake安装目录。如果没有g++,则先行安装:sudo apt-get install g++

在安装目录解压,解压:tar -xzvf cmake-3.7.0-rc1.tar.gz

在解压的目录执行:

./configure

make

make install

 

2.4 编译LTP

自行设定ltp安装目录。在安装目录解压,解压:tar -xzvf ltp-master.zip

在解压后目录,使用./configure检查编译环境,没有问题则执行make进行编译。

 

2.5 编译LTP4j

自行设定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

至此完成。

3 eclipse下测试

         首先需要解压ltp的数据模型文件:ltp-data-v3.3.1.zip,解压目录可以自己设定。

         在eclipse里新建一个工程,ltp4j.jar导入到工程,至此,配置完成,下边是ltp的五个功能。

3.1功能简介

         ltp提供的主要功能有:分词,词性标注,命名实体识别,句法分析,语义角色标注。

         每个功能基本都是三个步骤:1,create, 读取模型文件,初始化功能实例;2,功能接口,实现相应的功能;3,release,释放模型文件、资源。

3.2详细代码

         以下功能都是官方文档中的,注意的是模型文件是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);

                   Listwords = new ArrayList();

                   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;

                   }

                   Listwords = new ArrayList();

                   words.add("我");

                   words.add("从事");

                   words.add("自然");

                   words.add("语言");

                   words.add("处理");

                   words.add("方面");

                   words.add("的");

                   words.add("工作");

                   words.add("!");

                   Listpostags = new ArrayList();

                   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 words = newArrayList();

                               List tags = newArrayList();

                               List ners = newArrayList();

                               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 words = newArrayList();

                       List tags = newArrayList();

                       words.add("一把手");tags.add("n");

                       words.add("亲自");tags.add("d");

                       words.add("过问");tags.add("v");

                       words.add("。");tags.add("wp");

                       List heads = newArrayList();

                       List deprels = newArrayList();

 

                       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 = newArrayList();

                     words.add("一把手");

                     words.add("亲自");

                     words.add("过问");

                     words.add("。");

                     ArrayList tags = newArrayList();

                     tags.add("n");

                     tags.add("d");

                     tags.add("v");

                     tags.add("wp");

                     ArrayList ners = newArrayList();

                     ners.add("O");

                     ners.add("O");

                     ners.add("O");

                     ners.add("O");

                     ArrayList heads = newArrayList();

                     heads.add(2);

                     heads.add(2);

                     heads.add(-1);

                     heads.add(2);

                     ArrayList deprels = newArrayList();

                     deprels.add("SBV");

                     deprels.add("ADV");

                     deprels.add("HED");

                     deprels.add("WP");

                     List>>>> srls = newArrayList>>>>();

                       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系统

3.1 所有相关软件

软件

软件信息

操作系统

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数据模型

3.2 ltp4j库编译

3.2.1 JDK安装

         win7下jdk环境变量设置,略。

3.2.2 Ant安装

         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文件,该文件需要手动创建。

3.2.3 Cmake安装

         cmake是从官网下载的可执行文件形式的安装包。下载对就系统版本,一键安装即可。(http://www.cmake.org/download/)

3.2.4 编译LTP4j

         首先下载LTP4J源码,下载后,我的本地目录为:F:\LTP。

         cmd进行LTP4j的项目根目录下,执行ant命令:

 

图1

    执行成功后,LTP4j在项目下会生成output文件夹,在里边可找到ltp4j.jar 。

 

3.2.5 编译LTP

         在编译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(*)方式构建项目。完成以后,则ltplibs会得到所想要lib库文件。

3.2.6 编译ltp4j代理

         同编译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.3 eclipse下测试

         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

 

 

你可能感兴趣的:(自然语言处理)