哈工大ltp小试
今天开始探索学习使用哈工大的LTP(Language Technology Platform)。
这里是官网地址
这里是GitHub地址
这里是pyltp的使用文档
平台采用的语言是C++,但是也提供了Python和Java的封装。由于本人目前使用Python作为自然语言处理的工具语言,所以以下的探索流程都是使用本人电脑中的Window8.1操作系统的PyCharm集成开发环境,使用的Python版本是3.6。
使用流程很简单:
- 下载最新版本的模型(目前是3.4)
- 安装pyltp,在命令行输入指令:
pip install pyltp
。
不过我的一直安装失败,总是不成功,后来从网上找了pyltp 3.6的whl文件,然后通过pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl
成功了。
这里有一篇博客专门讲安装的,发现他的界面有点黑客风,挺炫酷的哈~
通过PyCharm新建Python项目后,整个工程长成这个样子:
不过其中的data文件夹、source文件夹和test文件夹是自己新创建的,其中data文件夹内放置下载的模型,source文件夹放置那个其实也没啥东西的txt文件,test中放置编写的Python代码。
照着使用文档敲的testltp.py
内容如下:
import pyltp
# 分句
from pyltp import SentenceSplitter
sents = SentenceSplitter.split('元芳你怎么看?我就趴窗口上看呗!')
print('\n'.join(sents))
# 分词
from pyltp import Segmentor
segmentor = Segmentor()
segmentor.load('../data/cws.model')
words = segmentor.segment("元芳你怎么看")
segmentor.release()
print(list(words))
# 词性标注
from pyltp import Postagger
postagger = Postagger()
postagger.load('../data/pos.model')
posts = postagger.postag(list(words))
postagger.release()
print(list(zip(list(words),list(posts))))
#命名实体识别
from pyltp import NamedEntityRecognizer
recognizer = NamedEntityRecognizer()
recognizer.load('../data/ner.model')
nettags = recognizer.recognize(list(words),list(posts))
recognizer.release()
print(list(zip(list(words),list(nettags))))
#依存语法分析
from pyltp import Parser
parer = Parser()
parer.load('../data/parser.model')
arcs = parer.parse(list(words),list(posts))
parer.release()
print(list(zip(list(words),[(arc.head,arc.relation) for arc in arcs])))
#语义角色标注
from pyltp import SementicRoleLabeller
labeller = SementicRoleLabeller()
labeller.load('../data/pisrl_win.model')
roles = labeller.label(list(words),list(posts),arcs)
labeller.release()
for role in roles:
print(role.index, "".join(
["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments]))
其中我的pyltp不知道怎么安装的,竟然成了build-in里的东西了,而不是在site-packages里面。
执行以上代码的结果为:
其中要注意的是这里在语义角色标注中使用的并非pisrl.model而是pisrl_win.model,前者会报错的。
同时由于文档中提到:
于是我又去申请了哈工大的语言云个人账号,经过邮箱激活之后,按照人家的使用文档就要探索一下,不过没想到出现了问题。。。
由于官网提供的Python示例代码使用的是2.7版本,所以这里我使用的是另外的一个网络请求模块:requests
,最终的代码testltpCloud.py
长成这样:
COPYimport requests
from settings import APIKEY
url_get_base = "http://api.ltp-cloud.com/analysis/"
args = {
'api_key': APIKEY,
'text': '我是中国人。',
'pattern': 'dp',
'format': 'plain'
}
# result = urllib.request.urlopen(url_get_base, urllib.parse.urlencode(args)) # POST method
result = requests.post(url_get_base,args)
print(result.text)
在同路径下的settings.py
的内容为:
其中APIKEY的内容是邮件发给你的api_key字符串。
不过运行的结果为:
显示未授权用户,但是我的账户类型是免费的,刚注册的啊,为啥这样,搜了搜没搜出个啥,就先这样吧。
又向目标迈进了一步,嘿嘿,加油!