最近在学习处理自然语言处理,就发现LTP的(哈工大语言云),这个比我最先使用的jieba分词更好,词库更大,功能也更强大。

这里介绍两种方法:1、调用LTP的API,2、使用pyltp,这里的方法基于python,对于其它语言的使用的请大家了解这里:LTP 3.3文档

1、调用LTP的API

①进入哈工大语言云进行注册

②注册之后哈工大语言云的官网会给你一个API key,但是好像一开始并不能使用,要等官网审核之后,显示你的本月使用流量有18G左右就可以了,

新用户一般会给你送20G(我好像一开始就是18G)

③代码实现自然语言处理:

# -*- coding: utf-8 -*-
import urllib2 url_get_base = "http://api.ltp-cloud.com/analysis/?"
api_key = '*********' # 输入注册API_KEY # 待分析的文本
text = "国务院总理李克强调研上海外高桥时提出,支持上海积极探索新机制。" format0 = 'plain' # 结果格式,有xml、json、conll、plain(不可改成大写)
pattern = 'ws' # 指定分析模式,有ws、pos、ner、dp、sdp、srl和all #分词
result = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'ws'))
content = result.read().strip()
print content
print '*'*60
#词性标注
result1 = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'pos'))
content1 = result1.read().strip()
print content1
print '*'*60
#命名实体识别
result2 = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'ner'))
content2 = result2.read().strip()
print content2
print '*'*60
#依存句法分析
result3 = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'dp'))
content3 = result3.read().strip()
print content3
print '*'*60
#语义依存分析
result4 = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'sdp'))
content4 = result4.read().strip()
print content4
print '*'*60
#语义角色标注
result1 = urllib2.urlopen("%sapi_key=%s&text=%s&format=%s&pattern=%s"
% (url_get_base, api_key, text, format0, 'srl'))
content1 = result1.read().strip()
print content1
print '*'*60

显示结果:

国务院 总理 李克强 调研 上海 外高桥 时 提出 , 支持 上海 积极 探索 新 机制 。
************************************************************
国务院_ni 总理_n 李克强_nh 调研_v 上海_ns 外高桥_ns 时_n 提出_v ,_wp 支持_v 上海_ns 积极_a 探索_v 新_a 机制_n 。_wp
************************************************************
[国务院]Ni 总理 [李克强]Nh 调研 [上海 外高桥]Ns 时 提出 , 支持 [上海]Ns 积极 探索 新 机制 。
************************************************************
国务院_0 总理_1 ATT
总理_1 李克强_2 ATT
李克强_2 调研_3 SBV
调研_3 时_6 ATT
上海_4 外高桥_5 ATT
外高桥_5 调研_3 VOB
时_6 提出_7 ADV
提出_7 -1 HED
,_8 提出_7 WP
支持_9 提出_7 COO
上海_10 探索_12 SBV
积极_11 探索_12 ADV
探索_12 支持_9 VOB
新_13 机制_14 ATT
机制_14 探索_12 VOB
。_15 提出_7 WP
************************************************************
国务院_0 总理_1 Nmod
总理_1 调研_3 Agt
李克强_2 总理_1 Nmod
调研_3 提出_7 dTime
上海_4 外高桥_5 Nmod
外高桥_5 调研_3 Dir
时_6 调研_3 mTime
提出_7 -1 Root
,_8 提出_7 mPunc
支持_9 提出_7 ePurp
上海_10 探索_12 Agt
积极_11 探索_12 Mann
探索_12 支持_9 dCont
新_13 机制_14 Feat
机制_14 探索_12 Prod
。_15 支持_9 mPunc
************************************************************
[国务院 总理 李克强 调研 上海 外高桥 时]TMP [提出]v , [支持 上海 积极 探索 新 机制]A1 。
国务院 总理 李克强 调研 上海 外高桥 时 提出 , [支持]v [上海]A1 积极 探索 新 机制 。
************************************************************

如果大家想看到更加直观的的结果可以进入哈工大语言云的在线测试,就可以看到更加直观的结果,如下:

2、使用pyltp

这里参考:Python下的自然语言处理利器-LTP语言技术平台 pyltp 学习手札

按照上面的博客安装是没有问题的,我的系统是win8.1、python2.7,需要注意的是,pip pyltp install要基于C++的编译器,所以我安装的是Micorsoft Visual C++ Compiler for Python 2.7

因为本人电脑上已经安装了VS2012。

安装完成以后,就可以进行测试了:

注意下面的ltp路径要换上你自己的路径

①使用 pyltp 进行分句示例如下

# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
sents = SentenceSplitter.split('元芳你怎么看?我就趴窗口上看呗!') # 分句
print '\n'.join(sents)

结果如下:

元芳你怎么看?

我就趴窗口上看呗!

②使用 pyltp 进行分词示例如下

# -*- coding: utf-8 -*-
import os
LTP_DATA_DIR = '/path/to/your/ltp_data' # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径,模型名称为`cws.model` from pyltp import Segmentor
segmentor = Segmentor() # 初始化实例
segmentor.load(cws_model_path) # 加载模型
words = segmentor.segment('元芳你怎么看') # 分词
print '\t'.join(words)
segmentor.release() # 释放模型

结果如下:

元芳  你       怎么      看

③使用 pyltp 进行命名实体识别示例如下

# -*- coding: utf-8 -*-
from pyltp import NamedEntityRecognizer
recognizer = NamedEntityRecognizer() # 初始化实例
recognizer.load('/path/to/your/model') # 加载模型
netags = recognizer.recognize(words, postags) # 命名实体识别
print '\t'.join(netags)
recognizer.release() # 释放模型

④使用 pyltp 进行依存句法分析示例如下

# -*- coding: utf-8 -*-
from pyltp import SementicRoleLabeller
labeller = SementicRoleLabeller() # 初始化实例
labeller.load('/path/to/your/model/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() # 释放模型

⑤pyltp 暂不提供语义依存分析功能。若需使用该功能,请使用 语言云 。

 以下为全部代码:
# -*- coding: utf-8 -*-
import sys, os ROOTDIR = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path = [os.path.join(ROOTDIR, "lib")] + sys.path # Set your own model path
MODELDIR=os.path.join(ROOTDIR, "ltp_data") from pyltp import SentenceSplitter, Segmentor, Postagger, Parser, NamedEntityRecognizer, SementicRoleLabeller paragraph = '国务院总理李克强调研上海外高桥时提出,支持上海积极探索新机制。' sentence = SentenceSplitter.split(paragraph)[0] segmentor = Segmentor()
segmentor.load(os.path.join(MODELDIR, "你的路径\\cws.model"))
words = segmentor.segment(sentence)
print "\t".join(words) postagger = Postagger()
postagger.load(os.path.join(MODELDIR, "你的路径\\pos.model"))
postags = postagger.postag(words)
# list-of-string parameter is support in 0.1.5
# postags = postagger.postag(["中国","进出口","银行","与","中国银行","加强","合作"])
print "\t".join(postags) parser = Parser()
parser.load(os.path.join(MODELDIR, "你的路径\\parser.model"))
arcs = parser.parse(words, postags) print "\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs) recognizer = NamedEntityRecognizer()
recognizer.load(os.path.join(MODELDIR, "你的路径\\ner.model"))
netags = recognizer.recognize(words, postags)
print "\t".join(netags) labeller = SementicRoleLabeller()
labeller.load(os.path.join(MODELDIR, "你的路径\\srl/"))
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]) segmentor.release()
postagger.release()
parser.release()
recognizer.release()
labeller.release()

结果:

国务院 总理 李克强 调研 上海 外高桥 时 提出 , 支持 上海 积极 探索 新 机制 。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ni n nh v ns ns n v wp v ns a v a n wp

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2:ATT 3:ATT 4:SBV 7:ATT 6:ATT 4:VOB 8:ADV 0:HED 8:WP 8:COO 13:SBV 13:ADV 10:VOB 15:ATT 13:VOB 8:WP

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
S-Ni O S-Nh O B-Ns E-Ns O O O O S-Ns O O O O O

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3 A0:(0,2)A1:(4,5)
7 TMP:(0,6)
9 A1:(10,14)
12 A0:(10,10)ADV:(11,11)A1:(13,14)

 

python处理自然语言:1、调用LTP的API,2、使用pyltp的更多相关文章

  1. Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  2. Python如何调用新浪api接口的问题

    前言:这些天在研究如何调用新浪开放平台的api分析新浪微博用户的数据 成果:成功调用了新浪api获取了用户的一些个人信息和无数条公共微博 不足:新浪开放平台访问有限制,返回的数据着实有限,不足以分析问 ...

  3. python调用openstack的api,create_instance的程序解析

    python调用openstack的api,create_instance的程序解析 2017年10月17日 15:27:24 CloudXli 阅读数:848   版权声明:本文为博主原创文章,未经 ...

  4. Python 调用图像融合API

    Python 调用图像融合API 本文记录使用Python,调用腾讯AI开放平台的图像融合API.官网给出的Demo用的是PHP,博主作为Python的粉丝,自然想用它来和『最好的』的语言一较高下,顺 ...

  5. Python 调用阿里云 API 收集 ECS 数据

    #!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2. ...

  6. [Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...

  7. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  8. VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库

    API函数很强大,但是声明的时候比较繁琐. 我开发的封装库,包括窗口.键盘.鼠标.消息等常用功能.用户不需要添加API函数的声明,就可以用到API的功能. 在VBA.VB6的引用对话框中引用API.t ...

  9. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...

随机推荐

  1. Linux 修改 IP地址 和 网关

    修改IP地址和网关是很常见的操作,在做相关实验的时候,如果没有设置好,会带来很多不必要的麻烦.. 1. 修改IP地址vi /etc/sysconfig/network-scripts/ifcfg-et ...

  2. 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.

    官网解释与方法:1 当向服务器发出一个ajax请求,Datatables将会把服务器请求到的数据构造成一个数据对象. 2 实际上他是参考jQuery的ajax.data属性来的,他能添加额外的参数传给 ...

  3. Spring MVC controller 被执行两次

    interceptor 被执行两次 后来发现 时controller被执行两次 后来发现是jsp页面有个: <img src="#" > 导致被执行两次. 解决方案:去 ...

  4. spring mvc与mybatis整合错误提示

    java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L ...

  5. MFC 怎样获得某个窗口的句柄?

    GetSafeHandle();this-> hWnd;GetDlgItem(hwnd,ID);//获取窗口ID所对应的HWND的子窗口句柄 在主窗口中,如果要用到父窗口的句柄,可以用 HWND ...

  6. 无限存储之胖文本数据库TTD(Thick Text Database)

    无限存储之胖文本数据库TTD(Thick Text Database) 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com 所谓的“胖”就是多.大.丰富的意思,像我们平时看到的 ...

  7. mysql免安装版 安装配置 (转)

    1. 下载MySQL Community Server 5.6.13 2. 解压MySQL压缩包     将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:     "D:\Pr ...

  8. java使用properties文件

    使用对用的util包下的properties包就可以了,这样我们有配置的话,写到一个properties文件中更直观. 这里写一个比较丑的例子: package com.property; impor ...

  9. 在AbpZero中hangfire后台作业的使用——开启hangfire

    AbpZero框架已经集成了hangfire,但它默认是关闭的,我们可以在运行站点下的Startup.cs文件中把这行代码注释取消就行了,代码如下:     //Hangfire (Enable to ...

  10. UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...