我使用的教材是郑捷的NLP汉语自然语言处理原理与实践
示例代码下载地址:http://www.threedweb.cn/data/attachment/bigupload/NLPBook.zip
记录一下安装pyltp过程中遇到的问题
按照书上的说明,首先我想在Win10上安装pyltp,但是一直会出各种奇怪的问题安装失败,原因是因为ltp3.4不兼容win10,所以还是得老老实实在空虚的泰坦上安装,我让空虚帮我开了个账号,并且在我的账号下安装了Anaconda,Anaconda里面已经自带Python3,Pip,Scipy,Numpy等包了,所以非常方便,而且也和原来的Python2环境隔离了开来。安装好Anaconda后按照书上的说明即可把环境安装好。
为了方便编译,我在win10使用Pycharm远程调用Ubuntu上的解释器并且回传编译结果,这样就可以在win10上写代码,而在Linux上跑,非常方便。登录远程服务器的软件建议使用MobaXterm,空虚倾力推荐,6的一比。
运行代码的过程中前面基本都没有问题,因为书上的代码是Python2,但实际上我的运行环境是Python3,这里说一下要注意的地方。
1. UTF8环境
1 2 3 4 |
# 设置 UTF-8输出环境 reload(sys) sys.setdefaultencoding('utf-8') |
这句话在Python2中经常出现,因为要中文输出调格式,但是Python3中本身就是UTF8环境,所以不需要它,注释掉
2. Print
Python3的print语句写成了对象,所以要加括号。
1 2 3 |
print "Hello World" #Python2语法 print ("Hello World") #Python3语法 |
3. 语义角色标注模块
第1.7节的示例程序,语义角色标注模块,新版本的ltp做了更新:
更新好的代码如下所示
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 |
# -*- coding: utf-8 -*- import sys import os from pyltp import * MODELDIR = "/home/chenda/Downloads/ltp_data_v3.4.0/" sentence = "欧洲东部的罗马尼亚,首都是布加勒斯特,也是一座世界性的城市。" segmentor = Segmentor() segmentor.load(os.path.join(MODELDIR, "cws.model")) words = segmentor.segment(sentence) wordlist = list(words) postagger = Postagger() postagger.load(os.path.join(MODELDIR, "pos.model")) postags = postagger.postag(words) parser = Parser() parser.load(os.path.join(MODELDIR, "parser.model")) arcs = parser.parse(words, postags) recognizer = NamedEntityRecognizer() recognizer.load(os.path.join(MODELDIR, "ner.model")) netags = recognizer.recognize(words, postags) labeller = SementicRoleLabeller() labeller.load(os.path.join(MODELDIR, "pisrl.model")) roles = labeller.label(words, postags, arcs) for role in roles: print ('rel:',wordlist[role.index]) for arg in role.arguments: if arg.range.start!=arg.range.end: print (arg.name,' '.join(wordlist[arg.range.start:arg.range.end])) else: print (arg.name,wordlist[arg.range.start]) |