依存句法分析 python & pyltp实现

依存句法分析 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代表依存弧的关系

你可能感兴趣的:(自然语言处理)