码迷,mamicode.com
首页 > Web开发 > 详细

本地版pylpt执行结果的格式转换与访问——以json为例

时间:2015-04-29 07:18:22      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

前文说了如何在本地安装pyltp。在官方的例子中,各功能的处理结果都是纯文本(plain text),这不太便于我们解析和使用其结果。经尝试,可以将他的处理结果转为json格式。我将pyltp的功能放到一个函数中,然后可以在项目的其它程序中调用它。仍以官方example为例,我直接在它上面修改的代码。【注:我没有考虑如何整合语义角色标注结果到json中】

common_callLTP.py,在这里封闭和改造pyltp功能

'''
Created on 2015-4-29

@author: 郭喜跃
'''
import sys, os
import json
from pyltp import Segmentor, Postagger, Parser, NamedEntityRecognizer, SementicRoleLabeller
ROOTDIR = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path.append(os.path.join(ROOTDIR, "lib"))
# 设置模型文件的路径
MODELDIR=os.path.join(ROOTDIR, "ltp_data")

def callLTP(sentence):# 参数就是待处理的句子
    # sentence = "国家主席胡锦涛携夫人刘永青出访俄罗斯。"
    
    #分词功能
    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)
    #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]))
        
    # 结果整合为json。这是重点。我把原代码的print全部注释。
    resultJson=[] #创建一个空列表,用于保存json数据。
    for index in range(len(words)):#遍历结果
        resultJson.append({'id':index,'cont':words[index],'pos':postags[index],'relate':arcs[index].relation,'ne':netags[index]}) #将各功能的结果对应地添加到json中    
        
    return resultJson # 返回函数结果

test.py,这里调用上述函数

import common_callLTP;
import json;

finalResult=common_callLTP.callLTP("国家主席胡锦涛携夫人刘永青出访俄罗斯。")
jsonStr=json.dumps(finalResult,ensure_ascii=False,indent=2);  #这两行代码用于美观显示json数据,你感受下。如果不这样,直接print(json变量)的话,默认是在一行上显示所有结果,非常不便于查看。
print(jsonStr)

结果:

技术分享

至于说得到json数据如何遍历,请参考以下代码:

for eachItem in finalResult:
    print(eachItem['cont'])
作用是输出json中每一项的‘cont‘键的值。你可以举一反三去使用了。


本地版pylpt执行结果的格式转换与访问——以json为例

标签:

原文地址:http://blog.csdn.net/laoyaotask/article/details/45357609

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!