Pyltp的安装使用笔记
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的安装使用笔记相关推荐
- XHProf安装使用笔记
XHProf安装使用笔记 from: http://www.sourcejoy.com/php_dev/xhprof_install_and_usage.html libpng: 先安装... gra ...
- Ubuntu14.04安装Torch7笔记
Ubuntu14.04安装Torch7笔记 利用快捷键Ctrl+Alt+T打开Ubuntu终端 第一步: 获取安装LuauJIT(C语言编写的Lua的解释器)和Torch所必需的依赖包. 代码如下: ...
- freebsd 6.2 安装配置笔记[转]
freebsd 6.2 安装配置笔记June 28th, 2007 作者: Jeffrey 出处:http://blog.zhangjianfeng.com/?p=588 freebsd 6.2 安装 ...
- 蚂蚁笔记 linux安装教程,群晖docker安装蚂蚁笔记安装教程
原标题:群晖docker安装蚂蚁笔记安装教程 背景 偶然看见其他网友群晖一个 用途 当然是安装镜像了,需要安装2个 映像 mongo与leanote 2.直接创建mongo容器,端口27017 其他默 ...
- Python 的scikit-learn和tensorflow在虚拟环境下安装配置笔记
Python 机器学习安装配置笔记 这学期开始上人工智能课,任课老师要求安装python和对于机器学习深度学习的各种库. 以前做过类似项目,顺便就把配置环境的流程记录下来. 中间有引用他人的博客,都有 ...
- 群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote)
为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十).利用Docker安装蚂蚁笔记(leanote) 蚂蚁笔记是一款特别棒的笔记软件,支持Markdown语法,是程序员必备的软件 ...
- CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/123495062 各位读者,知识无穷而人力有穷 ...
- owncloud 配置mysql_owncloud安装配置笔记
Mike的分享空间 owncloud安装配置笔记 date: 2017.05.05; modification:2018.07.25 目录: 1 服务端安装 服务器: ubuntu 18.04 1.1 ...
- Linux下安装JDK笔记与Linux安装Tomcat笔记
项目需要,又要折腾Linux了,使用了VMware装一下linux,配置java运行环境,首先是配置JDK... OS:CentOS 64bit 一:到Oracle下载最新版的JDK http://w ...
- ATS6.2安装部署笔记
ATS6.2安装部署笔记 原文:http://www.safecdn.cn/ats/2018/12/ats6-2-install/1046.html 系统版本:CentOS 6.7 1.安装依赖包 y ...
最新文章
- SQL中常用的日期计算
- ruby简单的基础 4
- c语言找最长串指针改错,全国计算机二级C语言上机 (改错题)【DOC精选】.doc
- vector 声明固定长度的数组
- 爬数据html解析,jsoup网络爬取数据HTML解析
- c语言的标准字符,C语言标准定义的32个关键字
- sklearn自学指南(part43)--数据加载工具
- 玩转控件:对Dev中GridControl控件的封装和扩展
- python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能
- excel制作一个信息录入系统_制作Excel仓库入库单,一键完成数据录入、计算及保存操作...
- WebView详解与简单实现Android与H5互调
- python小明爬楼梯_爬楼梯(Python and C++解法)
- 关于DatetTime?
- 【问题6】Redis 的过期策略都有哪些?内存淘汰机制都有哪些?
- 离散数学课后习题答案 左孝凌版
- 华为U2000网管研究实录 (1) - 安装
- 基于MTCNN+CNN的疲劳检测
- 黑马程序员-黑马,人生的一个重要转折
- 汇新云智慧城市解决方案——以区块链加速智慧城市建设
- 动态赋值_【东莞CBD】最新动态!整合大地块!打造未来东莞第一高楼!高度按500米赋值...
热门文章
- 大数据清洗、转换工具——ETL工具概述
- 酷Q机器人全自动聊天回复、管理Q群
- android 后台运行管理,Android 后台运行白名单,优雅实现保活
- 魅族android11,魅族17系列即将吃上安卓11,信息保护更稳了?
- 华为解锁密码忘了怎么办用计算机,华为笔记本忘记密码怎么办(免费教你3种解密方法)...
- 8086cpu物理寻址
- Linux cmd 常用快捷键(自用)
- cmd 实用快捷键。。
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
- 静态链表 ( 数据结构 )