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

百度DDParser的依存分析

#安装✳安装前没注意,安装了paddlepaddle最新版2.0.1,结果引发了一些错误,好在不是严重的问题,修改后依旧可以
# 安装

  安装前没注意,安装了paddlepaddle最新版2.0.1,结果引发了一些错误,好在不是严重的问题,修改后依旧可以使用

  1. 安装百度深度学习框架paddlepaddle飞桨(版本2.0.1

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

  2. 安装DDParser(版本0.1.2

pip install ddparser

  3.  报错 [链接]

RuntimeError: paddle-ernie requires paddle 1.7+, got 2.0.1

  4. 打开C:\Anaconda3\lib\site-packages\ddparser\ernie\__init__.py,修改如下

'''原来'''
# paddle_version = [int(i) for i in paddle.__version__.split('.')]
# if paddle_version[1] <7:&#39;&#39;&#39;修改后&#39;&#39;&#39;
paddle_version &#61; [i for i in paddle.__version__.split(&#39;.&#39;)]
if 10 * int(paddle_version[0]) &#43;int(paddle_version[1]) <17:

  5. 初次运行会下载模型&#xff0c;放置在C:\Anaconda3\Lib\site-packages\ddparser\model_files

  6. 运行 ddp.parse("百度是一家高科技公司") 报错

AttributeError: module &#39;paddle.fluid.layers&#39; has no attribute &#39;index_select&#39;

7. 报错原因&#xff1a;从1.x版本升级为2.0版本&#xff0c;API有变动 [飞桨框架API映射表]

    打开C:\Anaconda3\lib\site-packages\ddparser\parser\nets\bilstm.py&#xff0c;修改成变动后的API&#xff08;注&#xff1a;dim参数名改为axis

8. 同样的问题还包括

C:\Anaconda3\lib\site-packages\ddparser\parser\nets\nn.py

AttributeError: module &#39;paddle.fluid.layers&#39; has no attribute &#39;arange&#39;


# 说明

  分词器&#xff1a;百度词法分析工具 LAC&#xff08;实现中文分词、词性标注、专名识别等功能&#xff09;&#xff0c;支持使用其他工具的分词结果进行依存分析

  附录1 pos&#xff1a;词性和专名类别标签集合

  附录2 dep&#xff1a;依存句法分析标注关系集合&#xff08;DuCTB1.0是百度构建的中文依存句法树库


# 操作

from ddparser import DDParserddp &#61; DDParser()results &#61; ddp.parse("清华大学研究核能的教授有哪些")>>> [{&#39;word&#39;: [&#39;清华大学&#39;, &#39;研究&#39;, &#39;核能&#39;, &#39;的&#39;, &#39;教授&#39;, &#39;有&#39;, &#39;哪些&#39;],   &#39;head&#39;: [5, 5, 2, 2, 6, 0, 6],  &#39;deprel&#39;: [&#39;ATT&#39;, &#39;ATT&#39;, &#39;VOB&#39;, &#39;MT&#39;, &#39;SBV&#39;, &#39;HED&#39;, &#39;VOB&#39;]}]

    为了将结果可视化&#xff0c;这里用DataFrame输出&#xff0c;数据格式按照 CoNLL-X format&#xff08;注&#xff1a;CoNLL-U是CoNLL-X的扩展版

CoNLL-U 格式


① CoNLL 格式是一种偏向于“机读"的形式。在CONLL格式中&#xff0c;每个词语占一行&#xff0c;无值列用下划线&#39;_&#39;代替&#xff0c;列的分隔符为制表符&#39;\t&#39;&#xff0c;行的分隔符为换行符&#39;\n&#39;&#xff1b;句子与句子之间用空行分隔。

② GitHub Issue&#xff1a;ddp.parse的结果可以直接输出CoNLL-X格式吗 

③ 另外可以试一下paddlehub &#xff0c;里面对ddparser做了封装&#xff0c;提供可视化表示。

col &#61; (&#39;FROM&#39;,&#39;LEMMA&#39;,&#39;CPOSTAG&#39;,&#39;POSTAG&#39;,&#39;FEATS&#39;,&#39;HEAD&#39;,&#39;DEPREL&#39;,&#39;PROB&#39;,&#39;PDEPREL&#39;)
row &#61; []for res in results:for i in range(len(res[&#39;word&#39;])):data &#61; {"FROM":res[&#39;word&#39;][i], "LEMMA":res[&#39;word&#39;][i], "HEAD":res[&#39;head&#39;][i], "DEPREL":res[&#39;deprel&#39;][i]}row.append(data)df &#61; pd.DataFrame(row,columns&#61;col)
df.fillna(&#39;_&#39;,inplace &#61; True) # 缺省值
df.index &#61; df.index &#43; 1 # 把索引号加1视为ID
print(df)

    Windows可以用DependencyViewer加载CoNLL格式的txt文件&#xff0c;其他可以用web端的conllu.js

    &#x1f4cd; UD提供的可视化工具&#xff1a;Visualisation 

    &#x1f4cd; HanLP进一步封装&#xff1a;Dependency Tree Visualization


# 扩展

    在DDParser()中指定参数prob和use_pos&#xff0c;使用prob可以指定输出概率&#xff0c;使用use_pos可以输出词性标签

from ddparser import DDParser
ddp &#61; DDParser(prob&#61;True, use_pos&#61;True)
ddp.parse(["百度是一家高科技公司"])
>>> [{&#39;word&#39;: [&#39;百度&#39;, &#39;是&#39;, &#39;一家&#39;, &#39;高科技&#39;, &#39;公司&#39;], &#39;postag&#39;: [&#39;ORG&#39;, &#39;v&#39;, &#39;m&#39;, &#39;n&#39;, &#39;n&#39;], &#39;head&#39;: [2, 0, 5, 5, 2], &#39;deprel&#39;: [&#39;SBV&#39;, &#39;HED&#39;, &#39;ATT&#39;, &#39;ATT&#39;, &#39;VOB&#39;], &#39;prob&#39;: [1.0, 1.0, 1.0, 1.0, 1.0]}]

     在class DDParser中指定参数buckets&#61;True可以在数据集长度不均时处理速度更快

from ddparser import DDParser
ddp &#61; DDParser(buckets&#61;True)

    在已分词情况下&#xff08;比如希望使用其他工具的分词结果&#xff09;&#xff0c;通过调用parse_seg()方法&#xff0c;可以进行依存句法树分析

ddp &#61; DDParser()
ddp.parse_seg([[&#39;百&#39;, &#39;度&#39;, &#39;是&#39;, &#39;一家&#39;, &#39;高科技&#39;, &#39;公司&#39;], [&#39;他&#39;, &#39;送&#39;, &#39; 了&#39;, &#39;一本&#39;, &#39;书&#39;]])
>>> [{&#39;word&#39;: [&#39;百&#39;, &#39;度&#39;, &#39;是&#39;, &#39;一家&#39;, &#39;高科技&#39;, &#39;公司&#39;], &#39;head&#39;: [2, 3, 0, 6, 6, 3], &#39;deprel&#39;: [&#39;ATT&#39;, &#39;SBV&#39;, &#39;HED&#39;, &#39;ATT&#39;, &#39;ATT&#39;, &#39;VOB&#39;]}, {&#39;word&#39;: [&#39;他&#39;, &#39;送&#39;, &#39;了&#39;, &#39;一本&#39;, &#39;书&#39;], &#39;head&#39;: [2, 0, 2, 5, 2], &#39;deprel&#39;: [&#39;SBV&#39;, &#39;HED&#39;, &#39;MT&#39;, &#39;ATT&#39;, &#39;VOB&#39;]}]

    更多请查看 GitHub BaiDu DDParser


# 工具学习系列
  • 哈工大LTP的依存分析
  • 百度DDParser的依存分析
  • HanLP的依存分析
  • Spacy的依存分析


词性标注集pos/tag依存句法分析标注集dep语义依存分析标注集sdp
LTP863词性标注集BH-DEPBH-SDP
SpaCy基于Google Universal POS Tag set扩展采用了 ClearNLP 的依存分析标签-
DDParser百度构建的标注集DuCTB-
HanLPCTB、PKU、863、UDSD、UDSemEval16、DM、PAS、PSD
stanford corenlpPenn Chinese Treebank Tag Set&#xff08;CTB&#xff09;没找到说明采用的标注集 [链接]-
jieba和 ictclas 兼容的标记法不支持不支持

# 参考

    2020.11-依存句法树baidu-DDParser工具使用


# 其他

1&#xff09;pandas似乎要在ddparser前导入&#xff0c;否则会报错

import pandas as pd
from ddparser import DDParser

BUG0&#xff1a;AttributeError: type object ‘Callable‘ has no attribute ‘_abc_registry‘  [解决方案]

BUG1&#xff1a;‘WindowsPath‘ object has no attribute ‘read_text‘ [解决方案]

2&#xff09;百度LAC分词

from LAC import LAC
lac &#61; LAC(mode&#61;&#39;seg&#39;) # mode选项&#xff1a;lac(默认)与seg&#xff0c;lac包含词性 seg_result &#61; lac.run(text)


推荐阅读
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • modulepaddle.fluidhasnoattributedata解决:pipinstallpaddlepaddle-gpu1.7.0.post107-ih ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
author-avatar
手机用户2602914827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有