利用递归层次遍历句法结构树(Stanfordcorenlp及nltk)
在自然语言处理中,处理句法结构树是比较常见的处理问题,如何对句法结构树进行遍历,以及如何抽取出其中的层次关系,是值得去深究的。
本文将从Stanfordcorenlp的句法结构树和nltk中的Tree的数据结构入手,进行对句法结构树的层次遍历,抽取出句子中所包含的句法的层次结构。
首先需要安装Stanfordcorenlp(请自行CSDN),然后安装nltk(pip一下就可以用其中的Tree模块了)
例句:公安部治安局局长刘绍武介绍,这次销毁的非法枪支来源于三个方面。
句法结构树可以通过nltk中draw()画出来如下图:
(字体有些变形)
通过递归来进行对句法结构的遍历,代码简洁,运行结果如下:
对照上面的结构树可见 “->”代表的是层次关系,“->”前是上一层的叶节点(这一层的根节点),‘->’后是这一层的叶节点,然后同层的叶节点以空格连接,从而反应出句法结构的层次关系。
代码如下:
from stanfordcorenlp import StanfordCoreNLP
from nltk import Treecen = []
def cenxun(tree):c = [] # 每一层结果的储存if type(tree[0]) == str: # 如果遇到字符,即到达了叶子节点,便返回returnelse:root = [] # 储存子树,即遍历下一层时,每个子树的开始都是作为根r = tree.label() # 取出当前节点的句法英文标注for i in range(len(tree)): # 遍历这棵树的子树,root中储存子树,c中保留每棵子树根节点的标注root.append(tree[i]) # 即这棵树的叶节点的标注,作为一层的信息c.append(tree[i].label())c = " ".join(c) # 每层的叶子节点用空格连接c = r + "->" + c # 根节点用->连接每层的叶节点cen.append(c) # 将每次遍历的结果存cen中for rt in root: # 遍历得到的子树,将每个子树作为新的一棵树进行遍历cenxun(rt) # 递归调用就可以returndef main():lang = "zh"nlp = StanfordCoreNLP(r'E:\stanford-corenlp-4.2.2', lang=lang)try:sentence = "公安部治安局局长刘绍武介绍,这次销毁的非法枪支来源于三个方面。"parse = nlp.parse(sentence)t = Tree.fromstring(parse)cenxun(t[0])t.draw() # 展示句法结构树except:print("meet error")nlp.close()print("\n".join(cen))if __name__ == '__main__':main()
``
利用递归层次遍历句法结构树(Stanfordcorenlp及nltk)相关推荐
- 查找树的指定层级_非递归层次遍历方法实现二叉树中指定节点的层次数查找
数据结构教材中,提供了基于队列实现一个二叉树的非递归层次遍历算法.但对于一个任意二叉树,如果要查找其中任何一个节点所在的层次数,教科书中并没有给出基于层次遍历的非递归算法.鉴于层次遍历算法比较容易理解 ...
- java实现递归层次遍历_Java实现二叉树的前序、中序、后序、层序遍历(递归方法)...
在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了. 二叉树的遍历方法分为四种,分别为前序遍历.中序遍历.后序.层序遍历.下图即为一个二叉树 ...
- 二叉树的三种遍历(递归与非递归) + 层次遍历
<转载于 >>> > 二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的.二叉树有前.中.后三种遍历方式,因为树的本身就是用递归定义的,因此 ...
- C++ 实现二叉树的非递归层次遍历(队列实现)
代码如下: void BinaryTree::LevelOrder(BinTreeNode *cur) {if (cur == NULL)return ;queue<BinTreeNode *& ...
- 二叉树(前中后序递归非递归遍历,层次遍历
#ifndef _BITREE_H #define _BITREE_H #include "Stack.h" #include "Queue.h" te ...
- 数据结构(三)打印二叉树中结点层次遍历序列的实现
1.实验目的: 掌握二叉树的结构特性以及二叉链表的存储结构的特点及适用范围.同时,掌握用指针类型描述.访问和处理二叉树的运算. 2.试验问题: 建立一棵二叉树,按层次遍历该二叉树,并显示出这棵二叉树. ...
- java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)
package com.yc.test; import java.util.ArrayList; import java.util.List; import com.yc.tree.ThreeLink ...
- 树的先序、中序、后序和层次遍历的C++递归实现
树的遍历及遍历规则: 先序遍历:根左右 (即先访问根节点,在访问左儿子,最后访问右儿子) 中序遍历:左根右 后序遍历:左右根 层次遍历:按树的深度从小到大一层一层遍历 C++实现(递归): #incl ...
- (伪代码)树的前中后遍历和层次遍历算法实现(考研适用,递归和非递归)
文章目录 前言 一.递归实现树的遍历 二.非递归实现 层次遍历 总结 前言 2022考研初试结束,总结了一些考研中基本常用算法.这篇主要是关于树的前中后遍历,递归实现和非递归实现两种,现在很多自命题在 ...
- UVA122 树的层次遍历 Trees on the level(两种方法详解)
UVA122 树的层次遍历 Trees on the level 输入: (11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ...
最新文章
- 宝塔Linux常用命令
- 使用Nginx为Leanote配置Https
- Google Container Engine进军生产环境,容器技术势不可挡
- python将字符串中的数字相加求和的实现
- html表格判断,lua table 长度解析
- Java程序员从笨鸟到菜鸟之(十)枚举,泛型详解
- WSL2——Linux C中进程相关操作编程问题
- Git版本回退之 reset 和 revert
- 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用
- Trace文件过量生成问题解决
- 乐高百变工程旋转飞椅知识点_每日一个知识点:关于磁盘的一些事儿
- Java数据类型及类型转换
- H5商城与小程序商城哪个好_应该怎么选择_OctShop
- 玩客云pc端_玩客云下载-玩客云电脑版下载-华军软件园
- 电气绘图软件课程设计
- [Java学习] BFS算法示例
- halcon中面到面的距离_halcon学习网
- 《VSTO开发入门教程》配套资源下载
- 虹软人脸识别SDK离线激活(RV1109开发板)
- springcloud在 repository层通过sql语句实现查询功能
热门文章
- 虚拟光驱传文件到服务器,虚拟光驱服务器
- 虚拟主机安装php,php网站怎么安装到虚拟主机
- HTML5 页面布局【结合案例】
- Java毕设项目直播购物平台(java+VUE+Mybatis+Maven+Mysql)
- iphone6 计算机无法检测到照相机,爱思助手无法识别设备怎么办 爱思助手无法识别设备解决方法...
- 有哪些管理类书籍值得推荐?
- 考虑一个包含n个元素的普通二叉最小堆数据结构,它支持最坏情况时间代价为O(lgn)的操作INSERT和EXTRACT-MIN。请给出一个势函数Φ,使得INSERT的平摊代价为O(lgn),EXTRAC
- windows系统下更改itunes默认备份地址(小白实操)
- IT男不得不看的影视剧---《数字追凶》
- 【Word】编号与文字间距过大