nlp - 斯坦福 NLP 解析树格式

标签 nlp stanford-nlp parse-tree

这可能是一个愚蠢的问题,但是如何迭代解析树作为 NLP 解析器(如斯坦福 NLP)的输出?它都是嵌套的括号,既不是 array 也不是 dictionary 或我使用过的任何其他集合类型。

(ROOT\n  (S\n    (PP (IN As)\n      (NP (DT an) (NN accountant)))\n    (NP (PRP I))\n    (VP (VBP want)\n      (S\n        (VP (TO to)\n          (VP (VB make)\n            (NP (DT a) (NN payment))))))))

最佳答案

斯坦福解析器的这种特殊输出格式称为“括号解析(树)”。它应该被解读为带有

的图表
  • 单词作为节点(例如 As、an、accountant)
  • 短语/从句作为标签(例如 S、NP、VP)
  • 边按层次结构链接
  • 通常解析的 TOP 或根节点是幻觉的 ROOT

(在这种情况下,您可以将其视为有向无环图(DAG),因为它是单向且非循环的)

有一些库可以读取括号解析,例如在 NLTKnltk.tree.Tree ( http://www.nltk.org/howto/tree.html ) 中:

>>> from nltk.tree import Tree
>>> output = '(ROOT (S (PP (IN As) (NP (DT an) (NN accountant))) (NP (PRP I)) (VP (VBP want) (S (VP (TO to) (VP (VB make) (NP (DT a) (NN payment))))))))'
>>> parsetree = Tree.fromstring(output)
>>> print parsetree
(ROOT
  (S
    (PP (IN As) (NP (DT an) (NN accountant)))
    (NP (PRP I))
    (VP
      (VBP want)
      (S (VP (TO to) (VP (VB make) (NP (DT a) (NN payment))))))))
>>> parsetree.pretty_print()
                           ROOT                             
                            |                                
                            S                               
      ______________________|________                        
     |                  |            VP                     
     |                  |    ________|____                   
     |                  |   |             S                 
     |                  |   |             |                  
     |                  |   |             VP                
     |                  |   |     ________|___               
     PP                 |   |    |            VP            
  ___|___               |   |    |    ________|___           
 |       NP             NP  |    |   |            NP        
 |    ___|______        |   |    |   |         ___|_____     
 IN  DT         NN     PRP VBP   TO  VB       DT        NN  
 |   |          |       |   |    |   |        |         |    
 As  an     accountant  I  want  to make      a      payment

>>> parsetree.leaves()
['As', 'an', 'accountant', 'I', 'want', 'to', 'make', 'a', 'payment']

关于nlp - 斯坦福 NLP 解析树格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395127/

相关文章:

nlp - 在哪里可以找到最先进的关系提取数据集

python - 如何使用 python 删除 xml 或 html 命令行并检索实际文本数据?

ruby - 你如何将一段文字解析成句子? (最好用 Ruby)

python-2.7 - 如何使用斯坦福NER(命名实体识别器)的python接口(interface)?

Javascript 语法测试用例

python - 代码的行分析器是否需要解析树,这就足够了吗?

JAVA:如何将 Gazettes 与 Stanford NLP 结合使用?

java - 如何为 stanford tagger 创建自己的训练语料库?

java - 斯坦福 pos 标记器中的 xml 格式

python - 我如何轻松地从斯坦福大学解析 python 中的数据绘制解析树?