依存句法分析 python & pyltp实现
本文用python,借助pyltp实现依存句法分析。
有关pyltp的详细介绍可以查阅其官方网站。
说明:使用前需要先下载ltp的模型文件,下载地址:百度云
整体思路是先分词,在词性标注,最后依存句法分析
# -*- coding: utf-8 -*-
import os
## 加载模型文件
LTP_DATA_DIR = 'D:\SpyderWorkspace\parser\ltp_data' # ltp模型目录的路径
pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model') # 词性标注模型路径,模型名称为`pos.model`
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径,模型名称为`cws.model`
par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model') # 依存句法分析模型路径,模型名称为`parser.model`
## 分词
from pyltp import Segmentor
segmentor = Segmentor() # 初始化实例
segmentor.load_with_lexicon(cws_model_path,'dict1.txt') # 加载模型
words = list(segmentor.segment('栈是只允许一端删除和插入的线性表')) # 分词
segmentor.release() # 释放模型
print(words)
## 词性标注
from pyltp import Postagger
postagger = Postagger() # 初始化实例
postagger.load(pos_model_path) # 加载模型
postags = postagger.postag(words) # 词性标注
tags= list(''.join(postags))
#print (tags)
postagger.release() # 释放模型
## 依存句法分析
from pyltp import Parser
parser = Parser() # 初始化实例
parser.load(par_model_path) # 加载模型
arcs = parser.parse(words, postags) #句法分析
print ('arcs 的结果:','\t'.join("%d:%s" % (arc.head, arc.relation) for arc in arcs))
结果:
['栈', '是', '只', '允许', '一', '端', '删除', '和', '插入', '的', '线性表']
arcs 的结果: 2:SBV 0:HED 4:ADV 2:VOB 6:ATT 7:ADV 11:ATT 9:LAD 7:COO 7:RAD 4:VOB
其中arc.head代表父节点的索引,arc.relation代表依存弧的关系