Почему я не могу найти легкую функцию, очевидно находящуюся так близко, чтобы достичь решения?
С одной стороны, у меня есть структура:
[Tree ('kerb_NN', ['Dropped_VBN', Tree (' provide_VB ', [' to_TO ', Tree (' access_NN ', [Tree (' to_IN ', [Tree (' hardstanding_VBG ', [' new_JJ ',' permeable_JJ '])])]]], Tree ('for_IN', [Tree ('vehicle_NN', ['one_CD', 'domestic_JJ'])])])])]
получено из SpaCy
просто с помощью простой функции to_nltk_tree
.Предложение: (text
) Отброшенный бордюр для обеспечения доступа к новым проницаемым препятствиям для одного отечественного транспортного средства.
С другой стороны, я проанализировал то же предложение, используя NLTK:
words = word_tokenize(sent_tokenize(text)[0])
sent = nltk.pos_tag(words)
grammar = "NP: {<DT>?<JJ>*<NN><IN>?<NN>*}"
find = nltk.RegexpParser(grammar)
res = find.parse(sent)
Следовательно, я получаю res
, который выглядит следующим образом:
Tree ('S', [('Dropped', 'VBD')), Tree ('NP', [('curb ',' NN ')]), (' to ',' TO '), (' обеспечить ',' VB '), Tree (' NP ', [(' access ',' NN ')]), ('to', 'TO'), Tree ('NP', [('new', 'JJ'), ('permeable', 'JJ'), ('hardstanding', 'NN'), ('for', 'IN')]), ('one', 'CD'), Tree ('NP', [('domestic', 'JJ'), ('vehicle', 'NN')])])
Эти две версии отличаются, потому что с NLTK я был вынужден использовать некоторую пользовательскую грамматику.res
относится к типу tree.Tree
, а продукт SpaCy - это список.
Я хотел бы привести этот список к дереву, но не могу найти простой пример.Я нашел что-то вроде Tree.from_string
, но искал что-то противоположное или вроде Tree.from_list
.
Этот res
объект можно рассматривать как дерево, и было бы полезно использовать грамматику по умолчанию SpaCy и работать как дерево NLTK.Есть намеки?Может быть, я стреляю ногой, и это гораздо более простой способ добиться этого?