суботу, 8 квітня 2017 р.

Задача №16a 8 розділ

Умова задачі: Write a program to find those verbs in the PP Attachment Corpus nltk.corpus.ppattach. Find any cases where the same verb exhibits two different attachments, but where  the  first noun, or  second noun, or preposition  stays unchanged (as we saw in our discussion of syntactic ambiguity in Section 8.2).

Аналіз задачі:
1. Переглядаємо формат корпуса PP Attachment Corpus.

The PP Attachment Corpus contains several files having the format:
sentence_id verb noun1 preposition noun2 attachment
For example:
42960 gives authority to administration V 
46742 gives inventors of microchip N
The PP attachment is to the verb phrase (V) or noun phrase (N), i.e.:
(VP gives (NP authority) (PP to administration)) (VP gives (NP inventors (PP of microchip)))
2. Аналізуємо приклад на сторінці 316.
# записи корпуса з частини 'training'
entries = nltk.corpus.ppattach.attachments('training')
# пустий словник по замовчуванню, значеннями записів якого будуть словники
table = nltk.defaultdict(lambda: nltk.defaultdict(set))
# заповнення словника за ключами які будуть містити іменник1-прийменник-іменник1
# а значеннями за цими ключами будуть словники з ключами attachment (V або N - до чого приєднується прийменниковий вираз) і значеннями - дієслово
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'])


Пробуємо розв'язати задачу.
В результаті отримуємо щось таке:
('give', 'gives-authority', defaultdict(, {'V': set(['authority-to-Department']), 'N': set(['authority-for-veto'])}))
('give', 'give-sets', defaultdict(, {'V': set(['sets-in-promotion']), 'N': set(['sets-of-Boy'])}))
('give', 'given-attractiveness', defaultdict(, {'V': set(['attractiveness-as-consolidation']), 'N': set(['attractiveness-of-flows'])}))


Для зручності переписуємо програмку з використанням функцій:

Немає коментарів:

Дописати коментар