加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

LTP使用指南

(2017-03-09 15:17:16)
分类: 实用技能

LTP使用指南

一、LTP简介

LTP提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分句分词词性标注命名实体识别句法分析语义依存分析等等工作。从应用角度来看,LTP为用户提供了下列组件:

 

1、针对单一自然语言处理任务,生成统计机器学习模型的工具

2、针对单一自然语言处理任务,调用模型进行分析的编程接口

3、使用流水线方式将各个分析工具结合起来,形成一套统一的中文自然语言处理系统

4、系统可调用的,用于中文语言处理的模型文件

5、针对单一自然语言处理任务,基于云端的编程接口

 

 

二、LTP的下载和安装【建议在Linux系统下使用,以下只介绍Linux系统的下载和使用,Windows配置比较麻烦,等我成功了再更新】

要使用LTP,首先得下载两个文件:

l  项目文件

l  模型文件

这两个文件我都给大家下载好了,其中的模型文件(ltp_data)放在项目文件夹(ltp-3.3.2)下面,我已经上传到百度云网盘,大家需要的可以找我拷或者到云盘下载:

链接: https://pan.baidu.com/s/1pLlovqj 密码: ihba

 

下载好文件以后,下面进行编译:

Linux系统下环境编译:

建议使用pip安装cmake

l  如果没有pip,先安装pip:

安装命令为:$ sudo apt-get install python-pip

l  Pip安装完成以后:

在终端执行以下命令:$ pip install cmake

显示successfully installed cmake则表示安装成功

l  Cmake安装成功以后:

在项目文件夹下面新建一个文件夹build,然后打开这个文件夹,然后在终端执行

$ cmake ..

l  然后回到项目文件根目录,打开终端依次执行$ ./configure;~$ make

编译成功后,会在 bin 目录下生成一些二进制程序,至于这些程序是啥不用管了,如果你非要知道是些啥,请上http://ltp.readthedocs.io/zh_CN/latest/install.html自己查看。

 

三、LTP的使用

完成第二步以后,就代表ltp已经完全安装完成啦!下面就是使用了,你会感到非常神奇的是不管是分句/分词/词性标注/句法分析/语义依存分析统统只要一行代码就可以完成!!!

在我们前面下载好的模型文件中一共有这么几个文件,看文件名就知道它们分别是用来做什么的了!!!

 

模型名

说明

cws.model

分词模型,单文件

pos.model

词性标注模型,单文件

ner.model

命名实体识别模型,单文件

parser.model

依存句法分析模型,单文件

srl_data/

语义角色标注模型,多文件

 

在项目文件根目录下的./bin/examples/里面还有这样一些文件:xxx_cmdline我们来看看都是些啥

u  cws_cmdline :分词命令行

u  pos_cmdline :词性标注命令行

u  par_cmdline :句法分析命令行

u  ner_cmdline :命名实体识别命令行

这些都是你在使用ltp过程中需要用到的东西!前缀和上面的模型一致!

 

 

下面正式进入命令的使用!!!!不要感到惊讶哟,睁大你们的眼睛!

假设你现在拥有的是一个生语料文本,文件名称为input(如果你的文本有后缀的话请加上后缀,比如input.txt),那么就从分词开始!你只需要在终端输入一下命令,其中output是你的输出文件:

v  【分词】

$ cat input | ./bin/cws_cmdline --segmentor-model ./ltp_data/cws.model > output

v  词性标注

$ cat input | ./bin/cws_cmdline --segmentor-model ./ltp_data/cws.model | ./bin/pos_cmdline --postagger-model ./ltp_data/pos.model > output

v  【句法分析】

$ cat input | ./bin/cws_cmdline --segmentor-model ./ltp_data/cws.model | ./bin/pos_cmdline --postagger-model ./ltp_data/pos.model | ./bin/par_cmdline --parser-model ./ltp_data/pos.model > output

 

在终端执行以上命令的时候会出现


TRACE: Model is loaded

TRACE: Running 1 thread(s)

WARN: Cann't open file! use stdin instead.

不用管这些,其实你的程序正在运行,是OK的!!!

 

为了防止用户输入太长的句子影响稳定性,ltp限制用户输入字数少于1024字,分词结果少于256词。所以针对DCC的语料,建议先分句。

 

四、Python调用ltp

要想在Python中调用ltp首先你要安装一个pyltp包,那么从哪儿下载和安装呢?很简单!!!直接在终端输入命令

$pip install pyltp    

是不是so easy?!!!(目前pyltp只支持Python2环境,因此在Python中调用的时候请用Python2执行程序!)

安装好了pyltp,你就可以用Python来调用ltp啦!(不过我觉得处理本地文件的时候,在python中调用没有在终端直接执行效率高哟)

 

【分句】(其中文字部分可以换成变量名哟,这个不用我解释吧)

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

sents = SentenceSplitter.split('元芳你怎么看?我就趴窗口上看呗!')  # 分句

print '\n'.join(sents)

这个的输出结果就可以将一段文本变成一行一句的文本啦!至于原理是什么,应该是按照标点符号来分的,嗯!

 

【分词cws.model

# -*- coding: utf-8 -*-

from pyltp import Segmentor

segmentor = Segmentor()  # 初始化实例

segmentor.load('这个地方填你模型的绝对路径')  # 加载模型

words = segmentor.segment('元芳你怎么看')  # 分词

print '\t'.join(words)

segmentor.release()  # 释放模型

 

【使用外部词典分词cws.model分词外部词典本身是一个文本文件(plain text),每行指定一个词,编码同样须为 UTF-8

# -*- coding: utf-8 -*-

from pyltp import Segmentor

segmentor = Segmentor()  # 初始化实例

segmentor.load_with_lexicon('这个地方填你模型的绝对路径', '这个地方填外部词典的绝对路径') # 加载模型

words = segmentor.segment('亚硝酸盐是一种化学物质')

print '\t'.join(words)

segmentor.release()

 

【词性标注pos.model参数 words 是分词模块的返回值,也可以是Python原生的列表类型

# -*- coding: utf-8 -*-

from pyltp import Postagger

postagger = Postagger() # 初始化实例

postagger.load('这个地方填你模型的绝对路径')  # 加载模型

postags = postagger.postag(words)  # 词性标注

print '\t'.join(postags)

postagger.release()  # 释放模型

词性标注集请参考http://ltp.readthedocs.io/zh_CN/latest/appendix.html#id3,同样也支持外部词典

 

【命名实体识别ner.model(人名/地名/机构名)

# -*- coding: utf-8 -*-

from pyltp import NamedEntityRecognizer

recognizer = NamedEntityRecognizer() # 初始化实例

recognizer.load('这个地方填你模型的绝对路径')  # 加载模型

netags = recognizer.recognize(words, postags)  # 命名实体识别

print '\t'.join(netags)

recognizer.release()  # 释放模型

其中,wordspostags 分别为分词和词性标注的结果

标记集请查看http://ltp.readthedocs.io/zh_CN/latest/appendix.html#id4

 

【句法分析parser.model

# -*- coding: utf-8 -*-

from pyltp import Parser

parser = Parser() # 初始化实例

parser.load('这个地方填你模型的绝对路径')  # 加载模型

arcs = parser.parse(words, postags)  # 句法分析

print "\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs)

parser.release()  # 释放模型

其中,wordspostags 分别为分词和词性标注的结果。

arc.head 表示依存弧的父节点词的索引,arc.relation 表示依存弧的关系。

标记集请看http://ltp.readthedocs.io/zh_CN/latest/appendix.html#id5

 

【语义角色标注】

# -*- coding: utf-8 -*-

from pyltp import SementicRoleLabeller

labeller = SementicRoleLabeller() # 初始化实例

labeller.load('这个地方填你模型的绝对路径/dir')  # 加载模型

roles = labeller.label(words, postags, netags, arcs)  # 语义角色标注

for role in roles:

    print role.index, "".join(

        ["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments])

labeller.release()  # 释放模型

arg.name 表示语义角色关系,arg.range.start 表示起始词位置,arg.range.end 表示结束位置。

标记集请看http://ltp.readthedocs.io/zh_CN/latest/appendix.html#id6

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有