Мы можем использовать Stanford Parser из NLTK.
Требования
Вам нужно скачать две вещи с их сайта:
- Анализатор Stanford CoreNLP .
- Модель языка для выбранного языка (например, модель английского языка )
Внимание!
Убедитесь, что версия вашей языковой модели соответствует версии вашего синтаксического анализатора Stanford CoreNLP!
Текущая версия CoreNLP по состоянию на 22 мая 2018 года - 3.9.1.
После загрузки двух файлов распакуйте zip-файл в любое место.
Код Python
Далее загрузите модель и используйте ее через NLTK
from nltk.parse.stanford import StanfordDependencyParser
path_to_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_to_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dependency_parser = StanfordDependencyParser(path_to_jar=path_to_jar, path_to_models_jar=path_to_models_jar)
result = dependency_parser.raw_parse('I shot an elephant in my sleep')
dep = result.next()
list(dep.triples())
выход
Вывод последней строки:
[((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
((u'elephant', u'NN'), u'det', (u'an', u'DT')),
((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))]
Я думаю, это то, что вы хотите.