依存解析工具(百度DDParser)

 继前面写了关于句法依存关系的理论文章应用工具NLTK+StandfordNLP之后,本文继续介绍一款方便好用的中文解析工具-百度DDParser。本文对该工具的介绍,主要包括两个部分:该工具的安装使用和结果可视化展示。

(一)安装使用

安装的步骤,其实可以遵循官网的方法。即安装python、paddlpaddle、lac等依赖组件,然后安装ddparser。其中依赖组件的版本要求为:

python: >=3.6.0, <3.8.0
paddlepaddle: >=1.8.2, <2.0
LAC: >=0.1.4

安装命令主要是官网,(比如)包括:

conda install paddlepaddle==2.3.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

pip3 install lac -i https://mirror.baidu.com/pypi/simple #(可能需要sudo安装)

pip3 install ddparser

注:有人提到版本不匹配的问题,我没有遇到相应的情况。如果有童鞋存在相应问题,推荐学习

接下来,我们可以在python命令中调取并使用DDParser进行中文的解析。这里的解析,可以是纯粹的原始未分割的字符串,也可以是分割后的单词列表。

from ddparser import DDParser
ddp = DDParser()
str = '2020年美国制裁打压导致荣耀手机从华为剥离,此后荣耀将会以竞争对手的形 式出现在移动市场'
result = ddp.parse(str)
print(result)


得到如下信息:
[{'word': ['2020年', '美国', '制裁', '打压', '导致', '荣耀', '手机', '从', '华为', '剥离', ',', '此后', '荣耀', '将会', '以', '竞争对手', '的', '形式', '出现', '在', '移动', '市场'], 'head': [5, 3, 5, 3, 0, 7, 10, 9, 10, 5, 5, 19, 19, 19, 19, 18, 16, 15, 5, 19, 22, 20], 'deprel': ['ADV', 'ATT', 'SBV', 'COO', 'HED', 'ATT', 'SBV', 'ADV', 'ADV', 'VOB', 'MT', 'ADV', 'SBV', 'ADV', 'ADV', 'ATT', 'MT', 'POB', 'IC', 'CMP', 'ATT', 'POB']}]

(二) 可视化

虽然我们获取了解析的结果,但是结果过于抽象。因此,我们还是希望能够把结果形式化展现出来。那么,这个时候,其实有多种不同的方法。我们来介绍其中的两种。

1)CoNLL-X format格式输出+外部展示:

关于如何对结果进行CoNLL-X format格式输出,网上有多种不同的思路。有的简单,有的复杂,还有的不可行。我在这里,直接对DDParser安装包的源码进行了修改,具体为:在'/home/XXX/anaconda3/envs/paddlepaddle/lib/python3.7/site-packages/ddparser/run.py'文件的DDParser类对象的parse()(以及parse_seg())函数return outputs之前,添加print(predicts),将CoNLL-X format格式输出。输出内容可见:

1	2020年	2020年	-	-	-	5	ADV	-	-
2	美国	美国	-	-	-	3	ATT	-	-
3	制裁	制裁	-	-	-	5	SBV	-	-
4	打压	打压	-	-	-	3	COO	-	-
5	导致	导致	-	-	-	0	HED	-	-
6	荣耀	荣耀	-	-	-	7	ATT	-	-
7	手机	手机	-	-	-	10	SBV	-	-
8	从	从	-	-	-	9	ADV	-	-
9	华为	华为	-	-	-	10	ADV	-	-
10	剥离	剥离	-	-	-	5	VOB	-	-
11	,	,	-	-	-	5	MT	-	-
12	此后	此后	-	-	-	19	ADV	-	-
13	荣耀	荣耀	-	-	-	19	SBV	-	-
14	将会	将会	-	-	-	19	ADV	-	-
15	以	以	-	-	-	19	ADV	-	-
16	竞争对手	竞争对手	-	-	-	18	ATT	-	-
17	的	的	-	-	-	16	MT	-	-
18	形式	形式	-	-	-	15	POB	-	-
19	出现	出现	-	-	-	5	IC	-	-
20	在	在	-	-	-	19	CMP	-	-
21	移动	移动	-	-	-	22	ATT	-	-
22	市场	市场	-	-	-	20	POB	-	-

接着,我们送入外部网站生成依存解析图。这些网站包括conllu.jsDependency Tree Visualization等。以下为相应的依存图:

2)源码内部修改

自动化的可视化展示,其实也可以。但是需要重新配置和安装PaddleHub,这无形中增大了工作量和产生不必要的麻烦。程序员,总是想法用自动化去减少麻烦。因此,我结合PaddleHub,修改了run.py文件,将可视化代码融入到run.py中,这样就能直接用了。具体的修改方案为:

a)下载你想要的输出字体,这里我下载的是思源。并将其放入某个地址 'YYY/SourceHanSansCN-Regular.otf'

b)将PaddleHub中的可视化函数visualize(),添加到run.py的DDParser类中,并在cv2.imwrite()中设置图片保存地址。(记得import相应的依存库)

c) 在DDParser类的parse()以及parse_seg()中调用visualize(),将return的结果outputs送入visualize()

注意:outputs是一个字典的列表,而visualize()接受一个字典并使用字典的部分键值。因此,需要将outputs的元素依次送入visualize()。

outputs = [{'word': list[str], 'head': list[int], 'deprel': list[str]}, {},...]

visualize(outputs[i])

修改后的run.py代码,此处可见

参考文献:

https://gitee.com/baidu/DDParser

百度DDParser的依存分析_Dawn_www的博客-CSDN博客_ddparser

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值