使用nltk查找祖父母节点

指挥棒

我正在使用nltk和python 2.7中的Tree-package,我想从树的祖父母节点中提取所有规则。我有下面的树

t = Tree('S', [Tree('NP', [Tree('D', ['the']), Tree('N', ['dog'])]), Tree('VP', [Tree('V', ['chased']), Tree('NP', [Tree('D', ['the']), Tree('N', ['cat'])])])])

和生产

   t.productions
   [S -> NP VP, NP -> D N, D -> 'the', N -> 'dog', VP -> V NP, V -> 'chased', NP -> D N, D -> 'the', N -> 'cat']

对于树:

               S               
       ________|_____           
      |              VP        
      |         _____|___       
      NP       |         NP    
   ___|___     |      ___|___   
  D       N    V     D       N 
  |       |    |     |       |  
 the     dog chased the     cat

我想要的是表格上的内容:

[S -> NP VP, S ^ NP -> D N, NP ^ D -> 'the', NP ^ N -> 'dog'.......]

我看过ParentedTree类,但是我不知道如何使用它来解决我的问题。

拉维

您需要修改/覆盖生产方法

代码:

from nltk.tree import Tree
from nltk.compat import string_types
from nltk.grammar import Production, Nonterminal
from nltk.tree import _child_names

def productions(t, parent):
    if not isinstance(t._label, string_types):
        raise TypeError('Productions can only be generated from trees having node labels that are strings')

    # t._label ==> parent + " ^ " + t._label
    prods = [Production(Nonterminal(parent + " ^ " + t._label), _child_names(t))]
    for child in t:
        if isinstance(child, Tree):
            prods += productions(child, t._label)
    return prods


t = Tree('S', [Tree('NP', [Tree('D', ['the']), Tree('N', ['dog'])]), Tree('VP', [Tree('V', ['chased']), Tree('NP', [Tree('D', ['the']), Tree('N', ['cat'])])])])

# To Add Parent of 'S' as 'Start'
# prods = productions(t, "Start")

# To Skip Parent of 'S'
prods = [Production(Nonterminal(t._label), _child_names(t))]
for child in t:
    if isinstance(child, Tree):
        prods += productions(child, t._label)

print prods

输出:

[S -> NP VP, S ^ NP -> D N, NP ^ D -> 'the', 
    NP ^ N -> 'dog', S ^ VP -> V NP, VP ^ V -> 'chased', 
    VP ^ NP -> D N, NP ^ D -> 'the', NP ^ N -> 'cat']

欲了解更多信息检查productions的方法nltk.tree-在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ui路由器进入祖父母州

来自分类Dev

在子代的祖父母中维护父节点。XSL

来自分类Dev

访问祖父母的变量

来自分类Dev

使用jQuery load()函数获取元素的祖父母

来自分类Dev

QPushButton附加到祖父母

来自分类Dev

git rebase与祖父母的分支

来自分类Dev

Angular指令隐藏元素的“祖父母”

来自分类Dev

覆盖在祖父母的构造函数中调用的祖父母的虚拟方法

来自分类Dev

获取特定孩子的父母和祖父母

来自分类Dev

SQL Select祖父母

来自分类Dev

祖父母的第一个孩子

来自分类Dev

Flex div继承祖父母的高度而不是父母的高度

来自分类Dev

ActiveRecord:按祖父母值查找记录

来自分类Dev

在集合和祖父母上都使用.where创建范围

来自分类Dev

使用祖父母块

来自分类Dev

xpath查找元素的祖父母

来自分类Dev

使DIV达到祖父母高度的100%,同时也拉伸祖父母的宽度

来自分类Dev

Javascript:当用户从树中选择/取消选择节点时,如何保留树结构和祖父母/子关系

来自分类Dev

使用jquery .parentsUntil()或parent()获取html元素的祖父母

来自分类Dev

在孩子的祖父母或外祖父母中建立父节点。XSL

来自分类Dev

查找不属于某个祖父母的第一条记录

来自分类Dev

C ++继承-将父母更改为祖父母

来自分类Dev

使用快捷方式选择父母和祖父母

来自分类Dev

从子元素覆盖祖父母的css

来自分类Dev

使用react的上下文允许将子组件呈现为父/祖父母/曾祖父母....反模式?

来自分类Dev

使用Django选择数据库的祖父母表

来自分类Dev

SilverStripe 3-下一个使用祖父母的兄弟姐妹

来自分类Dev

获取节点的祖父母的名称

来自分类Dev

从不是 jQuery 中祖父母的前两个孩子的父母中选择不是 h3 的孩子节点

Related 相关文章

  1. 1

    使用ui路由器进入祖父母州

  2. 2

    在子代的祖父母中维护父节点。XSL

  3. 3

    访问祖父母的变量

  4. 4

    使用jQuery load()函数获取元素的祖父母

  5. 5

    QPushButton附加到祖父母

  6. 6

    git rebase与祖父母的分支

  7. 7

    Angular指令隐藏元素的“祖父母”

  8. 8

    覆盖在祖父母的构造函数中调用的祖父母的虚拟方法

  9. 9

    获取特定孩子的父母和祖父母

  10. 10

    SQL Select祖父母

  11. 11

    祖父母的第一个孩子

  12. 12

    Flex div继承祖父母的高度而不是父母的高度

  13. 13

    ActiveRecord:按祖父母值查找记录

  14. 14

    在集合和祖父母上都使用.where创建范围

  15. 15

    使用祖父母块

  16. 16

    xpath查找元素的祖父母

  17. 17

    使DIV达到祖父母高度的100%,同时也拉伸祖父母的宽度

  18. 18

    Javascript:当用户从树中选择/取消选择节点时,如何保留树结构和祖父母/子关系

  19. 19

    使用jquery .parentsUntil()或parent()获取html元素的祖父母

  20. 20

    在孩子的祖父母或外祖父母中建立父节点。XSL

  21. 21

    查找不属于某个祖父母的第一条记录

  22. 22

    C ++继承-将父母更改为祖父母

  23. 23

    使用快捷方式选择父母和祖父母

  24. 24

    从子元素覆盖祖父母的css

  25. 25

    使用react的上下文允许将子组件呈现为父/祖父母/曾祖父母....反模式?

  26. 26

    使用Django选择数据库的祖父母表

  27. 27

    SilverStripe 3-下一个使用祖父母的兄弟姐妹

  28. 28

    获取节点的祖父母的名称

  29. 29

    从不是 jQuery 中祖父母的前两个孩子的父母中选择不是 h3 的孩子节点

热门标签

归档