Как привести список SpaCy к Дереву NLTK? - PullRequest
0 голосов
/ 01 февраля 2019

Почему я не могу найти легкую функцию, очевидно находящуюся так близко, чтобы достичь решения?

С одной стороны, у меня есть структура:

[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.Есть намеки?Может быть, я стреляю ногой, и это гораздо более простой способ добиться этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...