1.句法分析
句法分析(syntactic parsing)是自然语言处理中的关键技术之一,它是对输入的文本句子进行分析以得到句子的句法结构的处理过程。句法分析的任务主要包含三个,分别是:
- 句法结构分析(syntactic structure parsing),又称短语结构分析(phrase structure parsing),也叫成分句法分析(constituent syntactic parsing)。作用是识别出句子中的短语结构以及短语之间的层次句法关系。
- 依存关系分析,又称依存句法分析(dependency syntactic parsing),简称依存分析,作用是识别句子中词汇与词汇之间的相互依存关系。
- 深层文法句法分析,即利用深层文法,例如词汇化树邻接文法(Lexicalized Tree Adjoining Grammar, LTAG)、词汇功能文法(Lexical Functional Grammar, LFG)、组合范畴文法(Combinatory Categorial Grammar, CCG)等,对句子进行深层的句法以及语义分析。
2.依存分析&pyltp
使用文档https://pyltp.readthedocs.io/zh_CN/latest/api.html
使用前需要先下载模型
# -*- coding: utf-8 -*-
import os
## 加载模型文件
LTP_DATA_DIR = 'ltp_data_v3.4.0' # 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))
postags = postagger.postag(words) # 词性标注
tags= list(''.join(postags))
#print (tags)
postagger.release() # 释放模型
注:
arc.head
表示依存弧的父节点词的索引。ROOT节点的索引是0,第一个词开始的索引依次为1、2、3…
arc.relation
表示依存弧的关系。
arc.head
表示依存弧的父节点词的索引,arc.relation
表示依存弧的关系。