Листинг 2. Пользовательская НС-грамматика в NLTK
#coding: utf-8 import nltk
from nltk.draw.tree import draw_trees grammar = nltk.CFG.fromstring(""" Предложение -> ИГ ГГ
ПГ -> П ИГ
ИГ -> С | С ПГ
ГГ -> Г ИГ | ГГ ПГ
С -> 'Николай' | 'гостей' | 'коридоре'
Г -> 'встретил'
П -> 'в'
""", encoding="utf-8")
sent = [u'Николай', u'встретил', u'гостей', u'в', u'коридоре'] parser = nltk.ChartParser(grammar)
draw_trees(*(tree for tree in parser.parse(sent)))
Эта программа выведет на экран графические представления постро- енных деревьев:
Рис. 15. NLTK: обнаружены все версии разбора
NLTK позволяет также строить версии разбора и в виде деревьев за- висимостей, однако на сегодняшний день не выполняет разбор в терминах ТСГ (комбинированных структур НС и ГЗ). Кроме того, для разбора в терминах ГЗ требуется указание в грамматике всех возможных зависимо- стей между конкретными словоформами в явном виде, что в некотором роде делает эту процедуру бессмысленной.
Способов семантической фильтрации версий синтаксического разбо- ра в NLTK не предусмотрено, однако пользователь может указывать веро- ятности для каждого правила грамматики в квадратных скобках (реализуя тем самым модель PCFG, см. выше).
Достарыңызбен бөлісу: |