句法分析是自然语言处理(NLP)中的关键技术之一,其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。主要包括两方面的内容:一是确定语言的语法体系,即对语言中合法句子的语法结构给予形式化的定义;另一方面是句法分析技术,即根据给定的语法体系,自动推导出句子的句法结构,分析句子所包含的句法单位和这些句法单位之间的关系。
句法分析被用在很多场景中,比如搜索引擎用户日志分析和关键词识别,比如信息抽取、自动问答、机器翻译等其他自然语言处理相关的任务。
用可视化的工具 Stanford Parser 来看看句法分析的整个过程:
短语结构树由终节点、非终结点以及短语标记三部分组成。句子分裂的语法规则为若干终结点构成一个短语,作为非终结点参与下一次规约,直至结束。如下图:
依存句法分析
依存句法
依存句法(Dependency Parsing, DP)通过分析语言单位内成分之间的依存关系揭示其句法结构。
直观来讲,依存句法的目的在于分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系。
依存句法的结构没有非终结点,词与词之间直接发生依存关系,构成一个依存对,其中一个是核心词,也叫支配词,另一个叫修饰词,也叫从属词。
依存关系用一个有向弧表示,叫做依存弧。依存弧的方向为由从属词指向支配词,当然反过来也是可以的,按个人习惯统一表示即可。
依存关系
依存句法通过分析语言单位内成分之前的依存关系解释其句法结构,主张句子中核心动词是支配其他成分的中心成分。而它本身却不受其他任何成分的支配,所有受支配成分都以某种关系从属于支配者。
在20世纪70年代,Robinson 提出依存句法中关于依存关系的四条公理,在处理中文信息的研究中,中国学者提出了依存关系的第五条公理,分别如下:
句子成分之间相互支配与被支配、依存与被依存的现象,普遍存在于汉语的词汇(合成语)、短语、单句、段落、篇章等能够独立运用和表达的语言之中,这一特点体现了依存关系的普遍性。依存句法分析可以反映出句子各成分之间的语义修饰关系,它可以获得长距离的搭配信息,并与句子成分的物理位置无关。
依存句法分析标注关系(共14种)及含义如下表所示:
语义依存分析
语义依存分析(Semantic Dependency Parsing, SDP),分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多。
语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。例如以下三个句子,用不同的表达方式表达了同一个语义信息,即张三实施了一个吃的动作,吃的动作是对苹果实施的。
语义依存分析不受句法结构的影响,将具有直接语义关联的语言单元直接连接依存弧并标记上相应的语义关系。这也是语义依存分析与依存句法分析的重要区别。
语义依存关系分为三类,分别是主要语义角色,每一种语义角色对应存在一个嵌套关系和反关系;事件关系,描述两个事件间的关系;语义依附标记,标记说话者语气等依附性信息。
Pyhanlp 实战依存句法
通过 Pyhanlp 库实现依存句法的实战练习。选用 Dependency Viewer 工具进行可视化展示。可视化时, txt 文档需要采用 UTF-8 编码。
首先,引入包,然后可直接进行分析:
from pyhanlp import *
sentence = "徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。"
print(HanLP.parseDependency(sentence))
得到的结果:
然后,将结果保存在 txt 文件中:
f = open("D://result.txt",'a+')
print((HanLP.parseDependency(sentence )),file = f)
最后,通过 Dependency Viewer 工具进行可视化,如果出现乱码,记得把 txt 文档保存为 UTF-8 式即可,得到的可视化结果如下图所示: