作者注:本教程旨在对哈工大LTP在github上的LTP4J(LTP的java版本)教程的补充,请结合以下参考网站一起食用。
参考网站:
【1】哈工大语言技术平台云官网--LTP使用文档
http://ltp.readthedocs.io/zh_CN/latest/install.html
【2】《编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码》
【3】哈工大语言技术平台github—LTP4J使用文档
https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md
一、哈工大LTP
简介:哈工大语言技术平台Language Technology Platform(LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口,可视化工具,并且能够以网络服务(Web Service)的形式进行使用。
二、使用哈工大LTP的实例分析
1、分词
(1)调用LTP进行分词的完整代码:TestSegment.java
(2)分析的句子:
“中国的神威太湖之光计算机被用于天气预报、制药研究和工业设计等领域。“
(3)运行结果:
(4)代码分析:
①
Segmentor类加载本地接口segmentor_jni,加载cws.model分词模型文件。
②
本地接口segmentor_jni里的segment方法将分词后的结果放在words链表。
2、词性标注
(1)调用LTP进行词性标注的完整代码:TestPostag.java
(2)分析的句子:
“中国 的 神威 太湖 之 光 计算机 被 用于 天气 预报 、 制药 研究 和 工业 设计 等 领域 。“
(3)运行结果:
(4)代码分析:
①
Postagger类加载本地接口postagger_jni,加载pos.model词性标注模型。
②
定义String变量存放待词性标注的句子,需先分好词。
③
用“ ”作分隔符将分词后的每个词存进链表。
④
本地接口postagger_jni里的postag方法将词性标注后的结果放在postags链表。
3、依存句法分析
(1)调用LTP进行依存句法分析的完整代码:TestParser.java
(2)分析的句子:
“中国_ns 的_u 神威_n 太湖_ns 之_u 光_n 计算机_n 被_p 用于_v 天气_n 预报_v 、_wp 制药_v 研究_v 和_c 工业_n 设计_v 等_u 领域_n 。_wp “
(3)运行结果:
(4)代码分析:
①
Parser类加载本地接口parser_jni,加载parser.model依存句法分析模型。
②
定义String变量存放要句法分析的句子,需先分好词并标注词性。
③
用“ ”作分隔符将每个词对先存进数组,然后用“_”作分隔符将词和词性分别存进words和tags链表。
④
输入待分析的词序列和相应的词性序列,将依存弧和依存关系类型分别存进heads和deprels链表。
三、哈工大LTP使用教程
本次实验使用了哈工大LTP接口的一个java封装——ltp4j。
在哈工大LTP官网(http://ltp.readthedocs.io/zh_CN/)上有LTP(C++)的详细使用说明,在java封装版本ltp4j的github上有详细的ltp4j使用说明文档
(https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md)。
但综合这两份说明文档来看,里面还是有些不太清晰的地方,下面的教程中,简述完整的调用ltp4j的过程,着重补充官网上不清晰的地方,使整个使用文档更清晰明了。
【Step 1】首先注明本次实验的环境变量以及版本号:
JDK:java version“jdk1.7.0_07”
Java(TM) SE Runtime Environment: (build 1.7.0_07-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
OS:win8 64bit
CMake:cmake-3.7.0-win64-x64.msi
LTP:ltp-3.2.2(未编译的C++版本);
ltp-win-x64-Release(已编译的C++版本,windows的二进制文件)
LTP4J:V1.0
LTP模型文件:ltp-data-v3.3.1
Microsoft Visual Studio:V2015(带有Visual C++ 2015库)
【Step 2】教程目录:
(一)编译LTP4J.jar
1. Ant方法
2. Eclipse方法
(二)编译C++代理程序
1. 安装CMake
2. 下载LTP的C++源码
3. 配置LTP的安装路径
4. 构建VC Project
5. 编译源码
6. 再次编译LTP4J
(三)在Eclipse中使用编译好的LTP4J
1. 配置Eclipse项目所需资源
2. 写程序调用ltp4j进行句法分析——回到(二、使用哈工大LTP的实例分析)
【Step 3】使用教程:
(一)编译LTP4J.jar(有Ant方法和Eclipse方法两种方法)
1.Ant方法
(1)下载Ant:
ltp4j的源码使用Ant进行编译,首先需要下载Ant
(2)配置Ant环境变量:
我的电脑—>属性—>高级系统设置—>环境变量
新建ANT_HOME值为:“D:\apache-ant-1.9.4”
编辑PATH,在PATH变量值的末尾添加:“;%ANT_HOME%\bin”
验证是否配置成功,打开cmd,输入ant:
C:\Users\TKPad>ant
返回结果:
Buildfile: build.xml does not exist! Build failed
这样的话,说明ANT配置成功。因为ant默认运行build.xml文件,该文件需要手动创建,因此这里的failed并不是说ant配置不成功,只是我们还没有创建build.xml文件。
(3)编译LTP4J:
首先需要下载ltp4j源代码,下载完成之后,解压,比如我的地址为:D:\ltp4j-master(推荐重命名为ltp4j),打开cmd,进入d盘ltp4j项目根目录下,运行ant命令
D:\ltp4j>ant
得到:
Buildfile: D:\ltp4j\build.xml clean: [delete] Deleting directory D:\ltp4j\output compile: [mkdir] Created dir: D:\ltp4j\output\classes [javac] D:\ltp4j\build.xml:: warning: ‘includeantruntime’ was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling source files to D:\ltp4j\output\classes jar: [mkdir] Created dir: D:\ltp4j\output\jar [jar] Building jar: D:\ltp4j\output\jar\ltp4j.jar main: BUILD SUCCESSFUL Total time: seconds
说明编译成功!查看目录:D:\ltp4j\output\jar,发现存在ltp4j.jar文件,这时该Jar包就可以使用了。
2. Eclipse方法
参考https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md
Eclipse方法
(二)编译C++代理程序
1. 安装CMake
LTP使用编译工具CMake构建项目。在安装LTP之前,你需要首先安装CMake。CMake可以在 CMake项目官网(https://cmake.org/download/)下载 。Windows用户请下载CMake的二进制安装包(cmake-3.7.0-win64-x64.msi)。Linux,Mac OS或Cygwin的用户,可以通过编译源码的方式安装CMake,当然,你也可以使用Linux的软件源来安装(参考http://ltp.readthedocs.io/zh_CN/latest/install.html)。
2. 下载LTP的C++源码
LTP:ltp-3.2.2(未编译的C++版本);
ltp-win-x64-Release(已编译的C++版本,windows的二进制文件)
https://github.com/HIT-SCIR/ltp/releases
LTP模型文件:ltp-data-v3.3.1
http://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569
3. 配置LTP的安装路径
修改ltp4j的CMakeLists.txt中的LTP_HOME为ltp-win-x64-Release的路径。
set (LTP_HOME "D:/NLP_Project/LTP_project/ltp-win-x64-Release/")
4. 构建VC Project
①在ltp4j项目文件夹下新建一个名为build的文件夹,使用CMake-gui,在source code中填入项目文件夹,在binaries中填入build文件夹。然后Configure —> Generate。(注意:项目路径不能含有中文)
②点击Configure时选择本机电脑带有的Microsoft Visual Studio版本,而且里面必须安装好Visual C++ 2015库(或其他版本库)。重新Configure前点击目录File选择Delete Cache即可清除记录。
③运行正常时返回下面的结果:Configuring done;Generating done
(PS:如若报错,参考下面的网站寻找相应的解决方案:http://codepub.cn/2015/05/07/Compile-the-Language-Technology-Platform(C++)-and-LTP4J(Java)source-code/?utm_source=tuicool&utm_medium=referral)
5. 编译源码
①构建后,ltp4j/build文件夹中得到ALL_BUILD.vcxproj、ZERO_CHECK.vcxproj两个VC Project。使用Visual Studio打开ALL_BUILD.vcxproj项目,右键该项目选择属性,按下图所示选择Release,×64方式。确定后,按菜单栏的“生成(Build)”,构建ALL_BUILD项目。
②这时编译并不成功,需要先执行第6步——再次编译LTP4J。
6. 再次编译LTP4J
①在编译LTP4J前,我们还要用CMake编译ltp-3.2.2(未编译的C++版本)
②这时ltp-3.2.2/build文件夹下会生成VS Project——ALL_BUILD.vcxproj,用Visual Studio打开ltp-3.2.2/build/ ALL_BUILD.vcxproj ,同样用Release,×64方式,构建ALL_BUILD项目,ltp-3.2.2编译成功,编译需用时3-5分钟左右,运行结果的一部分截图如下。
③这时将ltp-3.2.2/lib/Debug里的所有文件copy到ltp4j/build目录下。在Visual Studio打开ltp4j/build/ ALL_BUILD.vcxproj,用Release,×64方式,构建ALL_BUILD项目,报错显示说在ltp文件夹无法找到dll文件,其实是项目用了同级的jni文件夹做路径根目录。于是,将ltp4j/libs/Release里的所有dll文件复制到ltp4j/jni中,在源代码报错的部分更改下这些dll文件的路径即可。ltp4j编译成功,运行结果的一部分截图如下。
编译后的dll文件存放在了ltp4j/libs/Debug中,有以下这些:
(三)在Eclipse中使用编译好的LTP4J
1. 配置Eclipse项目所需资源
在Eclipse中新建Java Project
(1)导入ltp4j.jar
(2)windows下将以下文件copy到Eclipse项目根目录:
① ltp4j/libs/Debug文件夹中生成的所有动态库:
② 原ltp-win-x64-Release/lib/Release文件夹下的splitsnt、segmentor、postagger、ner、parser、srl 6个动态库:
③ 原ltp-3.2.2/lib/Debug的exp、lib、dll库
③ LTP模板文件ltp-data-v3.3.1
项目包含的库如下图:
2. 写程序调用ltp4j进行句法分析
——回到 (二、使用哈工大LTP的实例分析)
<教程结束>
参考资料:
【1】哈工大语言技术平台云官网--LTP使用文档
http://ltp.readthedocs.io/zh_CN/latest/install.html
【2】《编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码》
【3】哈工大语言技术平台github—LTP4J使用文档
https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md
参考文件: