作者注:本教程旨在对哈工大LTP在github上的LTP4J(LTP的java版本)教程的补充,请结合以下参考网站一起食用。

参考网站:

【1】哈工大语言技术平台云官网--LTP使用文档

http://ltp.readthedocs.io/zh_CN/latest/install.html

【2】《编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码》

http://codepub.cn/2015/05/07/Compile-the-Language-Technology-Platform(C++)-and-LTP4J(Java)source-code/?utm_source=tuicool&utm_medium=referral

【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】首先注明本次实验的环境变量以及版本号:

JDKjava 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)

OSwin8  64bit

CMakecmake-3.7.0-win64-x64.msi

LTPltp-3.2.2(未编译的C++版本);

ltp-win-x64-Release(已编译的C++版本,windows的二进制文件)

LTP4JV1.0

LTP模型文件:ltp-data-v3.3.1

Microsoft Visual StudioV2015(带有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++源码

LTPltp-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)源码》

http://codepub.cn/2015/05/07/Compile-the-Language-Technology-Platform(C++)-and-LTP4J(Java)source-code/?utm_source=tuicool&utm_medium=referral

【3】哈工大语言技术平台github—LTP4J使用文档

https://github.com/HIT-SCIR/ltp4j/blob/master/doc/ltp4j-document-1.0.md

参考文件:

使用哈工大LTP进行句法分析的更多相关文章

  1. 3. 哈工大LTP解析

    1. 通俗易懂解释知识图谱(Knowledge Graph) 2. 知识图谱-命名实体识别(NER)详解 3. 哈工大LTP解析 1. 前言 哈工大语言技术平台Language Technology ...

  2. 哈工大LTP进阶使用-三元组事件抽取

    哈工大LTP基本使用-分词.词性标注.依存句法分析.命名实体识别.角色标注 上一节我们讲了LTP的基本使用,接下来我们使用其进行事件抽取. 参考代码:https://github.com/liuhua ...

  3. 哈工大LTP

    http://ltp.ai/ http://pyltp.readthedocs.io/zh_CN/latest/ http://www.cnblogs.com/Denise-hzf/p/6612886 ...

  4. 哈工大LTP语言分析:分词、词性标注、句法分析等

    1. LTP介绍和安装 LTP语言云官网  在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...

  5. 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注

    代码 import os from pprint import pprint from pyltp import Segmentor, Postagger, Parser, NamedEntityRe ...

  6. ZH奶酪:哈工大LTP云平台标记含义及性能

    从官网搬过来的 囧rz 哈工大讯飞语言云 由哈工大 和科大讯飞 联合研发的中文自然语言处理云服务平台.结合了哈工大“语言技术平台——LTP” 高效.精准的自然语言处理核心技术和讯飞公司在全国性大规模云 ...

  7. 使用哈工大LTP进行文本命名实体识别并保存到txt

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...

  8. python3调用哈工大ltp

    运行环境ubuntu+python3 安装pyltp sudo pip3 install pyltp 下载ltp_data_v3.4.0模型 http://ltp.ai/ 分句 from pyltp ...

  9. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码

    转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...

随机推荐

  1. ext异常,ExceptionReturn

    package cn.edu.hbcf.common.vo; import java.io.PrintWriter; import java.io.StringWriter; /** * Ext 异常 ...

  2. 【转】Oracle Sys和system用户、sysdba 和sysoper系统权

    一:最重要的区别,存储的数据的重要性不同 [sys]所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更 ...

  3. React从入门到精通系列之(14)refs和DOM元素

    react.js 3.7k 次阅读  ·  读完需要 8 分钟 8 十四.refs和DOM元素 在典型的React数据流中,props是父组件与其子组件交互的唯一方式. 要修改子组件,需要使用一个新的 ...

  4. C++ 类模板四(typename关键字)

  5. MathType可以在Word、PPT中插入矩阵吗

    工科学生或者老师在写论文时最头痛的就是编辑公式,因为word自带的公式编辑器往往满足不了专业的公式需求,MathType就很好的解决了这个问题.在进行公式编辑时,难免会遇到输入矩阵的情况,那么怎么输入 ...

  6. pycharm 相关设置问题

    pycharm设置自动换行 file→settings→Editor→General→勾选 Use soft wraps in eitor → ok

  7. java如何遍历当月所有的日期?

    转自:https://zhidao.baidu.com/question/360215274.html import java.util.ArrayList;import java.util.Cale ...

  8. [POJ] Brackets Sequence

    This problem can be solved elegantly using dynamic programming. We maintain two arrays: cnt[i][j] -- ...

  9. 170227、java分布式系统开关功能设计(服务升降级)

    首先讲一下开关的由来,例如东京在6月18日做店庆促销活动,在交易下单环节,可能需要调用A.B.C三个接口来完成,但是其实A和B是必须的,C只是附加的功能(例如在下单的时候做一下推荐),可有可无,在平时 ...

  10. C# .net 数组倒序排序

    1.数组方法 Array.Sort(Array Array);  此方法为数组的排序(正序)方法 Array.Reverse(Array Array);  此方法可以将数组中的值颠倒 两个方法结合使用 ...