Pyltp的安装使用笔记


LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。

“语言云” 以哈工大社会计算与信息检索研究中心研发的 “语言技术平台(LTP)” 为基础,为用户提供高效精准的中文自然语言处理云服务。

pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能。


1.安装python3.6

因为pyltp支持版本的问题l,python的版本我u用到了3.6.1

https://www.python.org/ftp/python/3.6.1/python-3.6.1-amd64.exe

此链接下载python安装,然后在安装界面勾选把路径加到系统变量

在cmd中输入

python -V

出现如图所示,即安装成功


2.安装pyltp2.1

尝试了网上所有的方法pip,以及源码下载,都太麻烦

在此我下载了一个whl

链接:https://pan.baidu.com/s/1ee4IXNxuSFQRnoke0I3aNQ

提取码:9lac

下载之后打开cmd,进到对应下载目录,输入

pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl

等待安装成功


3.下载ltp模型文件

此连接为pyltp的一个使用文档

https://pyltp.readthedocs.io/zh_CN/latest/api.html

通过百度云可以下载相应的模型文件

https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569

按照网上查阅来说应该要版本对应一致,但是我下载2.0版本测试失败,所以我试着安装3.4版本的时候就可以,所以我下载了3.4版本的模型文件

解压之后使用的时候发现Ltp3.4.0在windows下进行语义角色标注失败,上网查阅发现原因是ltp3.4.0,3.4.0 版本 SRL模型 pisrl.model 如在windows系统下不可用

所以我到了此链接下下载了可用模型文件“pisrl_win.model”

http://ltp.ai/download.html,

也可以直接用下载链接:在此附http://model.scir.yunfutech.com/server/3.4.0/pisrl_win.model连接。

下载之后吧pisrl_win.model放到ltp模型文件夹与pisrl.model文件同路径即可。


4.代码测试

通过此github的Matt Zheng作者的LtpExtraction(基于ltp的简单评论观点抽取模块)项目中的SRLparsing.py代码运行成功,并成功抽取出评论中的观点

https://github.com/mattzheng/LtpExtraction

此为Matt Zheng作者在github上面的示例代码

# -*- coding: utf-8 -*-
# ltp模块
import sys, os
from pyltp import SentenceSplitter, Segmentor, Postagger, Parser, NamedEntityRecognizer, SementicRoleLabeller
import pandas as pd
import numpy as np
from tqdm import tqdm
#segmentor.release()  # 释放模型class ltp_api(object):def __init__(self,MODELDIR,exword_path = None):self.MODELDIR = MODELDIRself.output = {}self.words = Noneself.postags = Noneself.netags = Noneself.arcs = Noneself.exword_path = exword_path  #  e.x: '/data1/research/matt/ltp/exwords.txt'# 分词self.segmentor = Segmentor()if not self.exword_path:# 是否加载额外词典self.segmentor.load(os.path.join(self.MODELDIR, "cws.model"))else:self.segmentor.load_with_lexicon(os.path.join(self.MODELDIR, "cws.model"), self.exword_path)# 词性标注self.postagger = Postagger()self.postagger.load(os.path.join(self.MODELDIR, "pos.model"))# 依存句法self.parser = Parser()self.parser.load(os.path.join(self.MODELDIR, "parser.model"))# 命名实体识别self.recognizer = NamedEntityRecognizer()self.recognizer.load(os.path.join(self.MODELDIR, "ner.model"))# 语义角色self.labeller = SementicRoleLabeller()self.labeller.load(os.path.join(MODELDIR, "pisrl.model"))# 分词def ltp_segmentor(self,sentence):words = self.segmentor.segment(sentence)return words# 词性标注def ltp_postagger(self,words):postags = self.postagger.postag(words)return postags# 依存语法def ltp_parser(self,words, postags):arcs = self.parser.parse(words, postags)return arcs# 命名实体识别def ltp_recognizer(self,words, postags):netags = self.recognizer.recognize(words, postags)return netags# 语义角色识别def ltp_labeller(self,words,postags, arcs):output = []roles = self.labeller.label(words, postags, arcs)for role in roles:output.append([(role.index,arg.name, arg.range.start, arg.range.end) for arg in role.arguments])return outputdef release(self):self.segmentor.release()self.postagger.release()self.parser.release()self.recognizer.release()self.labeller.release()def get_result(self,sentence):self.words = self.ltp_segmentor(sentence)self.postags = self.ltp_postagger(self.words)self.arcs = self.ltp_parser(self.words, self.postags)self.netags = self.ltp_recognizer(self.words, self.postags)self.output['role'] = self.ltp_labeller(self.words,self.postags, self.arcs)# 载入outputself.output['words'] = list(self.words)self.output['postags'] = list(self.postags)self.output['arcs'] = [(arc.head, arc.relation) for arc in self.arcs]self.output['netags'] = list(self.netags)'''
语义角色的解读
主要定位到动词,然后动词实施者与动作的影响人
A0 - A1 ,A0代表主语,A1代表动作的影响
'''
def FindA0(labelle,word,postags,neg_word = ['就是','是'],n_pos = ['n','ns','nt']):''' 找到是否有A0  输入:labelle,word,postags相关词类型输出:A0 是否有A0 bool,True/Falseresult:[名词,动词,修饰词(相当于定语)]'''result = []A0 = False# 是否有A0,动作实施者,相当于主语sign_n = [n for n,la in enumerate(labelle) if la[1] == 'A0']if len(sign_n) > 0:A0 = Truela = labelle[sign_n[0]]verb_word = word[la[0]]if verb_word in neg_word:return A0,resultlow = la[2] high = la[3] if (la[3] + 1) > len(words) else la[3] + 1long_words = [words[n]  for n in range(low,high) if postags[n] in n_pos]n_word =  word[la[2]] if la[2] == la[3] else long_words# A1 动作影响,想当于宾语sign_n_A1 = [n for n,la in enumerate(labelle) if la[1] == 'A1']adore_word = []if len(sign_n_A1) > 0:la2 = labelle[sign_n_A1[0]]low = la2[2]high = la2[3] if (la2[3] + 1) > len(words) else la2[3] + 1adore_word = word[la2[2]] if la2[2] == la2[3] else words[ low : high ]result = [n_word,verb_word,adore_word]return A0,resultdef SRLparsing(labeller,words,postags,ToAfter = ['TMP','A1','DIS'],neg_word = ['就是','是'],n_pos = ['n','ns','nt']):'''输入:ToAfter,指的是这些语义角色的类型,TMP(时间),A1(动作的影响),DIS(标记语),这三个影响的对象在后面输出:([['ADV', ('最后', '打')], ['ADV', (['平均', '下来'], '便宜')], ['A0', ('40', '便宜')]], (True, ['40', '便宜', []]))'''labeller_refine = []labeller_A0 = []for labelle in labeller:#print(labelle)for la in labelle:if la[2] == la[3]:tmp = [la[1],(words[la[0]],words[la[3]])] if la[1] in ToAfter else [la[1],(words[la[3]],words[la[0]])]labeller_refine.append(tmp)#print('keypoint word :',words[la[0]])#print(tmp)else:low = la[2]high = la[3] if (la[3] + 1) > len(words) else la[3] + 1tmp = [la[1],(words[la[0]],words[low:high])] if la[1] in ToAfter else [la[1],(words[low:high],words[la[0]])]labeller_refine.append(tmp)#print('keypoint word :',words[la[0]])#print(tmp)#print('\n A0A1 ==== > ',FindA0(labelle,words,postags))labeller_A0 = FindA0(labelle,words,postags,neg_word = neg_word,n_pos = n_pos)#print('-----------\n')return labeller_refine,labeller_A0if __name__=="__main__":MODELDIR='ltp-models/ltp_data_v3.4.0'   #  模型文件ltp = ltp_api(MODELDIR)# ltp.release()  sentence = '陆丙文很帅!'words = ltp.ltp_segmentor(sentence)  # 分词postags = ltp.ltp_postagger(words)  # 词性arcs = ltp.ltp_parser(words,postags)  #依存netags = ltp.ltp_recognizer(words,postags)# 命名实体识别labeller = ltp.ltp_labeller(words,postags, arcs) #语义角色print(SRLparsing(labeller,words,postags,ToAfter = ['TMP','A1','DIS']))

现在您可以开始你的pyltp使用之旅了,冲冲冲!!

Pyltp的安装使用笔记相关推荐

  1. XHProf安装使用笔记

    XHProf安装使用笔记 from: http://www.sourcejoy.com/php_dev/xhprof_install_and_usage.html libpng: 先安装... gra ...

  2. Ubuntu14.04安装Torch7笔记

    Ubuntu14.04安装Torch7笔记 利用快捷键Ctrl+Alt+T打开Ubuntu终端 第一步: 获取安装LuauJIT(C语言编写的Lua的解释器)和Torch所必需的依赖包. 代码如下: ...

  3. freebsd 6.2 安装配置笔记[转]

    freebsd 6.2 安装配置笔记June 28th, 2007 作者: Jeffrey 出处:http://blog.zhangjianfeng.com/?p=588 freebsd 6.2 安装 ...

  4. 蚂蚁笔记 linux安装教程,群晖docker安装蚂蚁笔记安装教程

    原标题:群晖docker安装蚂蚁笔记安装教程 背景 偶然看见其他网友群晖一个 用途 当然是安装镜像了,需要安装2个 映像 mongo与leanote 2.直接创建mongo容器,端口27017 其他默 ...

  5. Python 的scikit-learn和tensorflow在虚拟环境下安装配置笔记

    Python 机器学习安装配置笔记 这学期开始上人工智能课,任课老师要求安装python和对于机器学习深度学习的各种库. 以前做过类似项目,顺便就把配置环境的流程记录下来. 中间有引用他人的博客,都有 ...

  6. 群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote)

    为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十).利用Docker安装蚂蚁笔记(leanote) 蚂蚁笔记是一款特别棒的笔记软件,支持Markdown语法,是程序员必备的软件 ...

  7. CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/123495062 各位读者,知识无穷而人力有穷 ...

  8. owncloud 配置mysql_owncloud安装配置笔记

    Mike的分享空间 owncloud安装配置笔记 date: 2017.05.05; modification:2018.07.25 目录: 1 服务端安装 服务器: ubuntu 18.04 1.1 ...

  9. Linux下安装JDK笔记与Linux安装Tomcat笔记

    项目需要,又要折腾Linux了,使用了VMware装一下linux,配置java运行环境,首先是配置JDK... OS:CentOS 64bit 一:到Oracle下载最新版的JDK http://w ...

  10. ATS6.2安装部署笔记

    ATS6.2安装部署笔记 原文:http://www.safecdn.cn/ats/2018/12/ats6-2-install/1046.html 系统版本:CentOS 6.7 1.安装依赖包 y ...

最新文章

  1. SQL中常用的日期计算
  2. ruby简单的基础 4
  3. c语言找最长串指针改错,全国计算机二级C语言上机 (改错题)【DOC精选】.doc
  4. vector 声明固定长度的数组
  5. 爬数据html解析,jsoup网络爬取数据HTML解析
  6. c语言的标准字符,C语言标准定义的32个关键字
  7. sklearn自学指南(part43)--数据加载工具
  8. 玩转控件:对Dev中GridControl控件的封装和扩展
  9. python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能
  10. excel制作一个信息录入系统_制作Excel仓库入库单,一键完成数据录入、计算及保存操作...
  11. WebView详解与简单实现Android与H5互调
  12. python小明爬楼梯_爬楼梯(Python and C++解法)
  13. 关于DatetTime?
  14. 【问题6】Redis 的过期策略都有哪些?内存淘汰机制都有哪些?
  15. 离散数学课后习题答案 左孝凌版
  16. 华为U2000网管研究实录 (1) - 安装
  17. 基于MTCNN+CNN的疲劳检测
  18. 黑马程序员-黑马,人生的一个重要转折
  19. 汇新云智慧城市解决方案——以区块链加速智慧城市建设
  20. 动态赋值_【东莞CBD】最新动态!整合大地块!打造未来东莞第一高楼!高度按500米赋值...

热门文章

  1. 大数据清洗、转换工具——ETL工具概述
  2. 酷Q机器人全自动聊天回复、管理Q群
  3. android 后台运行管理,Android 后台运行白名单,优雅实现保活
  4. 魅族android11,魅族17系列即将吃上安卓11,信息保护更稳了?
  5. 华为解锁密码忘了怎么办用计算机,华为笔记本忘记密码怎么办(免费教你3种解密方法)...
  6. 8086cpu物理寻址
  7. Linux cmd 常用快捷键(自用)
  8. cmd 实用快捷键。。
  9. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
  10. 静态链表 ( 数据结构 )