使用哈工大LTP进行句法分析
作者注:本教程旨在对哈工大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
参考文件:
使用哈工大LTP进行句法分析的更多相关文章
- 3. 哈工大LTP解析
1. 通俗易懂解释知识图谱(Knowledge Graph) 2. 知识图谱-命名实体识别(NER)详解 3. 哈工大LTP解析 1. 前言 哈工大语言技术平台Language Technology ...
- 哈工大LTP进阶使用-三元组事件抽取
哈工大LTP基本使用-分词.词性标注.依存句法分析.命名实体识别.角色标注 上一节我们讲了LTP的基本使用,接下来我们使用其进行事件抽取. 参考代码:https://github.com/liuhua ...
- 哈工大LTP
http://ltp.ai/ http://pyltp.readthedocs.io/zh_CN/latest/ http://www.cnblogs.com/Denise-hzf/p/6612886 ...
- 哈工大LTP语言分析:分词、词性标注、句法分析等
1. LTP介绍和安装 LTP语言云官网 在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...
- 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注
代码 import os from pprint import pprint from pyltp import Segmentor, Postagger, Parser, NamedEntityRe ...
- ZH奶酪:哈工大LTP云平台标记含义及性能
从官网搬过来的 囧rz 哈工大讯飞语言云 由哈工大 和科大讯飞 联合研发的中文自然语言处理云服务平台.结合了哈工大“语言技术平台——LTP” 高效.精准的自然语言处理核心技术和讯飞公司在全国性大规模云 ...
- 使用哈工大LTP进行文本命名实体识别并保存到txt
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...
- python3调用哈工大ltp
运行环境ubuntu+python3 安装pyltp sudo pip3 install pyltp 下载ltp_data_v3.4.0模型 http://ltp.ai/ 分句 from pyltp ...
- 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...
随机推荐
- python - __str__ 和 __repr__
内建函数str()和repr() (representation,表达,表示)或反引号操作符(``)可以方便地以字符串的方式获取对象的内容.类型.数值属性等信息.str()函数得到的字符串可读性好(故 ...
- libubox-ustream
参考:libubox [4] - uloop runqueue ustream libubox提供了流缓冲管理,定义在文件ustream.h,ustream.c和ustream-fd.c. 1. 数据 ...
- java模拟http请求上传文件,基于Apache的httpclient
1.依赖 模拟http端的请求需要依赖Apache的httpclient,需要第三方JSON支持,项目中添加 <dependency> <groupId>org.apache& ...
- zabbix 源码安装
操作系统:CentOS IP地址:192.168.21.127 Web环境:Nginx+MySQL+PHP zabbix版本:Zabbix 2.2 LTS 备注:Linux下安装zabbix需要有LA ...
- 使用python进行新浪微博粉丝爬虫
由于最近没事在学python,正好最近也想趴下新浪微博上边的一些数据,在这里主要爬去的是一个人的粉丝具体信息(微博昵称,个人介绍,地址,通过什么方式进行关注),所以就学以致用,通过python来爬去微 ...
- Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- 读取Properties文件六种方法
1.使用java.util.Properties类的load()方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream ...
- openldap+php-ldap操作
一.基础知识首先,如果您对LDAP 不认识,建议先看看[原]LDAP服务介绍一文.本文以Linux 下常用的OpenLDAP为例说明.LDAP 以数方式存放数据,每个节点可存放属性或作为下面节点的父节 ...
- PhoneGap 获得设备属性Demo
<!DOCTYPE html> <html> <head> <title>设备属性Demo</title> <script type= ...
- Delphi StringReplace – 替换字符函数
Delphi StringReplace – 替换字符函数 Delphi中的StringReplace函数是SysUtils单元中自带的函数,该函数可以替换字符串中的指定字符. 1 2 3 4 5 6 ...