递归英文

更新时间:2022-11-24 18:06:55 阅读: 评论:0


2022年11月24日发(作者:cba全明星首发出炉)

利⽤递归层次遍历句法结构树(Stanfordcorenlp及nltk)

在⾃然语⾔处理中,处理句法结构树是⽐较常见的处理问题,如何对句法结构树进⾏遍历,以及如何抽取出其中的层次关系,是值得去深究

的。

本⽂将从Stanfordcorenlp的句法结构树和nltk中的Tree的数据结构⼊⼿,进⾏对句法结构树的层次遍历,抽取出句⼦中所包含的句法的层

次结构。

⾸先需要安装Stanfordcorenlp(请⾃⾏CSDN),然后安装nltk(pip⼀下就可以⽤其中的Tree模块了)

例句:公安部治安局局长刘绍武介绍,这次销毁的⾮法枪⽀来源于三个⽅⾯。

句法结构树可以通过nltk中draw()画出来如下图:

(字体有些变形)

通过递归来进⾏对句法结构的遍历,代码简洁,运⾏结果如下:

对照上⾯的结构树可见“->”代表的是层次关系,“->”前是上⼀层的叶节点(这⼀层的根节点),‘->’后是这⼀层的叶节点,然后同层

的叶节点以空格连接,从⽽反应出句法结构的层次关系。

代码如下:

fromstanfordcorenlpimportStanfordCoreNLP

fromnltkimportTree

cen=[]

defcenxun(tree):

c=[]#每⼀层结果的储存

iftype(tree[0])==str:#如果遇到字符,即到达了叶⼦节点,便返回

return

el:

root=[]#储存⼦树,即遍历下⼀层时,每个⼦树的开始都是作为根

r=()#取出当前节点的句法英⽂标注

foriinrange(len(tree)):#遍历这棵树的⼦树,root中储存⼦树,c中保留每棵⼦树根节点的标注

(tree[i])#即这棵树的叶节点的标注,作为⼀层的信息

(tree[i].label())

c="".join(c)#每层的叶⼦节点⽤空格连接

c=r+"->"+c#根节点⽤->连接每层的叶节点

(c)#将每次遍历的结果存cen中

forrtinroot:#遍历得到的⼦树,将每个⼦树作为新的⼀棵树进⾏遍历

cenxun(rt)#递归调⽤就可以

return

defmain():

lang="zh"

nlp=StanfordCoreNLP(r'E:stanford-corenlp-4.2.2',lang=lang)

try:

ntence="公安部治安局局长刘绍武介绍,这次销毁的⾮法枪⽀来源于三个⽅⾯。"

par=(ntence)

t=ring(par)

cenxun(t[0])

()#展⽰句法结构树

except:

print("meeterror")

()

print("n".join(cen))

if__name__=='__main__':

main()

``

本文发布于:2022-11-24 18:06:55,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/13390.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:汽车节能
下一篇:障碍高尔夫
标签:递归英文
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图