Stanford NLP формат дерева разбора
Это может быть глупым вопросом, но как можно выполнить итерацию по дереву синтаксического анализа в качестве вывода синтаксического анализатора NLP (например, Stanford 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))))))))
2 ответа
Этот конкретный формат вывода Stanford Parser называется "синтаксический разбор (дерево)". Предполагается, что читать как график с
- слова как узлы (например, как, бухгалтер)
- фраза / предложение в качестве меток (например, S, NP, VP)
- края связаны иерархически и
- как правило, синтаксический анализ TOP или корневой узел галлюцинирует
ROOT
(В этом случае вы можете прочитать его как Направленный ациклический граф (DAG), поскольку он однонаправленный и нециклический)
Есть библиотеки для чтения в скобках, например, в NLTK
"s nltk.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']
Обратите внимание, что если вас интересуют конкретные узлы в дереве, идентифицируемые по правилам, подобным регулярным выражениям, вы можете использовать этот класс рук для извлечения всех таких узлов, используя сопоставление, подобное регулярному выражению:
http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/tregex/TregexPattern.html