本文实验环境为64位win10系统,python3.6.2,LTP项目文件和模型文件使用的3.3.1版本
1.LTP下载
(1)LTP项目文件ltp-3.3.1-win-x86.zip(下载链接)
(2)LTP模型文件3.3.1(下载链接)
Windows系统直接下载编译好的二进制文件ltp-3.3.1-win-x86.zip,不用管编译。使用较新版本时,注意项目文件与模型文件版本的匹配性,否则可能会出错。
2.文件夹放置
(1)新建一个项目文件夹,比如:D:\myprojects\LTP;
(2)将模型文件解压后的ltp_data文件夹放入项目文件夹;
(3)将ltp-3.3.1-win-x86.zip解压后的dll、exe文件全部拷入项目文件夹。
最后文件夹列表如下:
说明:因为内部默认路径的关系,这样放置可以使ltp_data文件夹处在默认路径上。
3.Python使用ltp_test
LTP提供的模型包括:(在ltp_data文件夹里面)
cws.model 分句模型,单文件
pos.model 词性标注模型,单文件
ner.model 命名实体识别模型,单文件
parser.model 依存句法分析模型,单文件
srl_data/ 语义角色标注模型,多文件(文件夹srl)
ltp_test是一个整合LTP中各模块的命令行工具。它完成加载模型,依照指定方法执行分析的功能。
主要参数:线程数、最终步骤、输入文件路径、模型路径、词典路径等。
具体可通过CMD运行ltp_test.exe查看。
4.其他准备工作
(1)下载安装Visual C++ 2015(下载链接)
(2)pip install pyltp
5.Python程序简单调用
程序代码如下:
# -*- coding: utf-8 -*-
import os
LTP_DATA_DIR = 'D:\myprojects\LTP\ltp_data' # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径,模型名称为`cws.model`
pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model') # 词性标注模型路径,模型名称为`pos.model`
ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model') # 命名实体识别模型路径,模型名称为`pos.model`
par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model') # 依存句法分析模型路径,模型名称为`parser.model`
srl_model_path = os.path.join(LTP_DATA_DIR, 'srl') # 语义角色标注模型目录路径,模型目录为`srl`。注意该模型路径是一个目录,而不是一个文件。
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer
from pyltp import Parser
from pyltp import SementicRoleLabeller
#分句,也就是将一片文本分割为独立的句子
def sentence_splitter(sentence='人生苦短。我用python。你呢?'):
sents = SentenceSplitter.split(sentence) # 分句
print ('\n'.join(sents))
#分词
def segmentor(sentence='我是中国人'):
segmentor = Segmentor() # 初始化实例
segmentor.load(cws_model_path) # 加载模型
words = segmentor.segment(sentence) # 分词
#默认可以这样输出
print ('\t'.join(words))
# 可以转换成List 输出
words_list = list(words)
segmentor.release() # 释放模型
return words_list
def posttagger(words):
postagger = Postagger() # 初始化实例
postagger.load(pos_model_path) # 加载模型
postags = postagger.postag(words) # 词性标注
for word,tag in zip(words,postags):
print (word+'/'+tag)
postagger.release() # 释放模型
return postags
#命名实体识别
def ner(words, postags):
recognizer = NamedEntityRecognizer() # 初始化实例
recognizer.load(ner_model_path) # 加载模型
netags = recognizer.recognize(words, postags) # 命名实体识别
for word, ntag in zip(words, netags):
print (word + '/' + ntag)
recognizer.release() # 释放模型
return netags
#依存语义分析
def parse(words, postags):
parser = Parser() # 初始化实例
parser.load(par_model_path) # 加载模型
arcs = parser.parse(words, postags) # 句法分析
print ("\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs))
parser.release() # 释放模型
return arcs
#角色标注
def role_label(words, postags, netags, arcs):
labeller = SementicRoleLabeller() # 初始化实例
labeller.load(srl_model_path) # 加载模型
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() # 释放模型
#测试分句子
print('******************测试将会顺序执行:**********************')
sentence_splitter()
print('###############以上为分句子测试###############')
#测试分词
words=segmentor()
print('###############以上为分词标注测试###############')
#测试标注
tags = posttagger(words)
print('###############以上为词性标注测试###############')
#命名实体识别
netags = ner(words,tags)
print('###############以上为命名实体识别测试###############')
#依存句法识别
arcs = parse(words,tags)
print('###############以上为依存句法测试###############')
#角色标注
roles = role_label(words,tags,netags,arcs)
print('###############以上为角色标注测试###############')
本文介绍了在64位Windows 10系统中,使用Python3.6.2调用哈工大LTP3.3.1版本的详细步骤,包括下载LTP项目和模型文件,正确放置文件夹结构,安装必要的库,以及Python程序的基本调用方法。

540

被折叠的 条评论
为什么被折叠?



