哈工大ltp小试

 

今天开始探索学习使用哈工大的LTP(Language Technology Platform)。

这里是官网地址

这里是GitHub地址

这里是pyltp的使用文档

平台采用的语言是C++,但是也提供了Python和Java的封装。由于本人目前使用Python作为自然语言处理的工具语言,所以以下的探索流程都是使用本人电脑中的Window8.1操作系统的PyCharm集成开发环境,使用的Python版本是3.6。

使用流程很简单:

  1. 下载最新版本的模型(目前是3.4)
  2. 安装pyltp,在命令行输入指令:pip install pyltp
    不过我的一直安装失败,总是不成功,后来从网上找了pyltp 3.6的whl文件,然后通过pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl成功了。

这里有一篇博客专门讲安装的,发现他的界面有点黑客风,挺炫酷的哈~

通过PyCharm新建Python项目后,整个工程长成这个样子:

project-structure

不过其中的data文件夹、source文件夹和test文件夹是自己新创建的,其中data文件夹内放置下载的模型,source文件夹放置那个其实也没啥东西的txt文件,test中放置编写的Python代码。

照着使用文档敲的testltp.py内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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里面。

执行以上代码的结果为:

testltp-result

其中要注意的是这里在语义角色标注中使用的并非pisrl.model而是pisrl_win.model,前者会报错的。

同时由于文档中提到:

no-support

于是我又去申请了哈工大的语言云个人账号,经过邮箱激活之后,按照人家的使用文档就要探索一下,不过没想到出现了问题。。。

由于官网提供的Python示例代码使用的是2.7版本,所以这里我使用的是另外的一个网络请求模块:requests,最终的代码testltpCloud.py长成这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import 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

其中APIKEY的内容是邮件发给你的api_key字符串。

不过运行的结果为:

testltpCloud-result

显示未授权用户,但是我的账户类型是免费的,刚注册的啊,为啥这样,搜了搜没搜出个啥,就先这样吧。

又向目标迈进了一步,嘿嘿,加油!