热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

依存解析工具(百度DDParser)

继前面写了关于句法依存关系的理论文章和应用工具NLTKStandfordNLP之后,本文继续介绍一款方便好用的中文解析工具-百度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 = &#39;2020年美国制裁打压导致荣耀手机从华为剥离,此后荣耀将会以竞争对手的形 式出现在移动市场&#39;
result = ddp.parse(str)
print(result)得到如下信息:
[{&#39;word&#39;: [&#39;2020年&#39;, &#39;美国&#39;, &#39;制裁&#39;, &#39;打压&#39;, &#39;导致&#39;, &#39;荣耀&#39;, &#39;手机&#39;, &#39;从&#39;, &#39;华为&#39;, &#39;剥离&#39;, &#39;,&#39;, &#39;此后&#39;, &#39;荣耀&#39;, &#39;将会&#39;, &#39;以&#39;, &#39;竞争对手&#39;, &#39;的&#39;, &#39;形式&#39;, &#39;出现&#39;, &#39;在&#39;, &#39;移动&#39;, &#39;市场&#39;], &#39;head&#39;: [5, 3, 5, 3, 0, 7, 10, 9, 10, 5, 5, 19, 19, 19, 19, 18, 16, 15, 5, 19, 22, 20], &#39;deprel&#39;: [&#39;ADV&#39;, &#39;ATT&#39;, &#39;SBV&#39;, &#39;COO&#39;, &#39;HED&#39;, &#39;ATT&#39;, &#39;SBV&#39;, &#39;ADV&#39;, &#39;ADV&#39;, &#39;VOB&#39;, &#39;MT&#39;, &#39;ADV&#39;, &#39;SBV&#39;, &#39;ADV&#39;, &#39;ADV&#39;, &#39;ATT&#39;, &#39;MT&#39;, &#39;POB&#39;, &#39;IC&#39;, &#39;CMP&#39;, &#39;ATT&#39;, &#39;POB&#39;]}]

(二) 可视化

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

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

关于如何对结果进行CoNLL-X format格式输出,网上有多种不同的思路。有的简单,有的复杂,还有的不可行。我在这里,直接对DDParser安装包的源码进行了修改,具体为:在&#39;/home/XXX/anaconda3/envs/paddlepaddle/lib/python3.7/site-packages/ddparser/run.py&#39;文件的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.js和Dependency Tree Visualization等。以下为相应的依存图:

2)源码内部修改

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

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

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

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

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

outputs = [{&#39;word&#39;: list[str], &#39;head&#39;: list[int], &#39;deprel&#39;: list[str]}, {},...]visualize(outputs[i])

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

参考文献:

https://gitee.com/baidu/DDParser

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


推荐阅读
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 在生产环境中进行高效部署与优化 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 利用 Python 实现 Facebook 账号登录功能 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 本文深入探讨了Java枚举类型的使用与实践,详细解析了枚举的基本用法及其在实际开发中的应用。首先介绍了枚举作为常量的替代方案,自JDK 1.5起,通过枚举可以更加简洁、安全地定义常量,避免了传统方式中可能出现的错误。此外,文章还探讨了枚举在实现单例模式、状态机等场景中的优势,并提供了多个实际案例,帮助开发者更好地理解和运用这一强大的语言特性。 ... [详细]
author-avatar
建哥2502897913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有