Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL-LAB12(10).doc
Скачиваний:
22
Добавлен:
12.02.2016
Размер:
1.69 Mб
Скачать

Розробка граматики

При автоматичному синтаксичному аналізі дерева для речень будуються згідно (наоснові) граматики. Всі приклади, які розглядалися в цій та по попередній лабораторних роботах, використовували дуже прості граматики з мінімальною кількістю правил. Для того що мати можливість працювати з реальними корпусами (текстами) мови, можна використати синтаксично розмічені корпуси текстів treebanks для розробки граматик більшого об’єму.

Treebanksта граматики

В модульcorpusвходить модуль treebankдля доступу до 10%фрагменту корпусаPennTreebankcorpus.

 

>>> from nltk.corpus import treebank

>>> t = treebank.parsed_sents('wsj_0001.mrg')[0]

>>> print t

(S

(NP-SBJ

(NP (NNP Pierre) (NNP Vinken))

(, ,)

(ADJP (NP (CD 61) (NNS years)) (JJ old))

(, ,))

(VP

(MD will)

(VP

(VB join)

(NP (DT the) (NN board))

(PP-CLR

(IN as)

(NP (DT a) (JJ nonexecutive) (NN director)))

(NP-TMP (NNP Nov.) (CD 29))))

(. .))

Можна використати ці дані для розробки граматики.Наприклад,наступна програма це простий фільтр для пошуку дієслів які беруть (вживаються з) , як доповнення ціле речення.Оскільки в граматиці є правило VP -> Vs S,то ця інформація дозволяє ідентифікувати такі специфічні дієслова.

 

def filter(tree):

child_nodes = [child.node for child in tree

if isinstance(child, nltk.Tree)]

return (tree.node == 'VP') and ('S' in child_nodes)

 

>>> from nltk.corpus import treebank

>>> [subtree for tree in treebank.parsed_sents()

... for subtree in tree.subtrees(filter)]

[Tree('VP', [Tree('VBN', ['named']), Tree('S', [Tree('NP-SBJ', ...]), ...]), ...]

Корпус Prepositional Phrase Attachment Corpus, nltk.corpus.ppattach це інше джерело інформації про валентність окремих дієслів. Наступний приклад ілюструє спосіб отримання інформації з цього корпусу. Програма допомагає знайти такі пари прийменникових виразів в яких є однакові прийменники та іменники, але в залежності від дієслова прийменниковий вираз приєднується до дієслівного виразу VP або до іменникового NP.

 

>>> entries = nltk.corpus.ppattach.attachments('training')

>>> table = nltk.defaultdict(lambda: nltk.defaultdict(set))

>>> for entry in entries:

... key = entry.noun1 + '-' + entry.prep + '-' + entry.noun2

... table[key][entry.attachment].add(entry.verb)

...

>>> for key in sorted(table):

... if len(table[key]) > 1:

... print key, 'N:', sorted(table[key]['N']), 'V:', sorted(table[key]['V'])

Одна зі стрічок, які виводяться програмою на екран offer-from-group N: ['rejected'] V: ['received'],вказує на те що receivedочікує окремий PPдодаток приєднаний до VP,водночас rejected - окремий PPдодаток приєднаний до NP.Ця інформація також може бути використана при розробленні граматики.

Набір корпусів які розповсюджуються разом з NLTKмістить дані зPE08Cross-FrameworkтаCrossDomainParserEvaluationSharedTask.Колекція великих граматик була створена для порівняння різних синтаксичних аналізаторів і може бути окремо завантажена за допомогою модуля nltk.download() або з командної стрічки (python -m nltk.downloader large_grammars).

Набір корпусів які розповсюджуються разом з NLTKтакож містить приклад Sinica Treebank Corpus,який складається з10,000синтаксично розмічених речень вибраних зAcademia Sinica Balanced Corpus of Modern Chinese.Одне з дерев цього корпусу зображено на рисунку.

 

>>> nltk.corpus.sinica_treebank.parsed_sents()[3450].draw()

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]