четвер, 5 листопада 2009 р.

Задача №6. Лабораторна робота №4.

Задача викликала у студентів значні труднощі, а рішення просте.
Потрібно аналізувати завдання, читати і аналізувати методичні вказівки!!!
Рішення задачі нижче з детальними коментарями.

Аналізую завдання і вибираю послідовність кроків, які треба зробити для його виконання.
1. Спочатку потрібно вирішити задачу для одного синсету, а потім узагальнити рішення в функції.
2. Для синсету.
а) визначаю опис значення для синсету;
б) визначаю гіперніми синсету;
в) визначаю описи значень для гіпернімів синсету;
г) визначаю гіпоніми синсету;
д) визначаю описи значень для гіпонімів синсету;
е) всі описи збираю разом


# стандартний початок
>>> import nltk
>>> from nltk.corpus import wordnet as wn
# визначаю опис значення для синсету
>>> car=wn.synset('car.n.01')
>>> car.definition
'a motor vehicle with four wheels; usually propelled by an internal combustion engine'
# визначаю гіперніми синсету;
>>> car_hypernyms=car.hypernyms()
>>> car_hypernyms
[Synset('motor_vehicle.n.01')]
# визначаю описи значень для гіпернімів синсету
>>> car_hypernyms_definition=car_hypernyms.definition()

Traceback (most recent call last):
File "", line 1, in
car_hypernyms_definition=car_hypernyms.definition()
AttributeError: 'list' object has no attribute 'definition'
# ПОМИЛКА - Що робити???
# ЧИТАЮ МЕТОДИЧНІ ВКАЗІВКИ!!!
# СТОРІНКА 10!!!(ТЕ ЩО ПОТРІБНО - ПРОБУЮ)
>>> motorcar = wn.synset('car.n.01')
>>> types_of_motorcar = motorcar.hyponyms()
>>> types_of_motorcar[26]
Synset('ambulance.n.01')
# Ключовий момент. Синсет може мати багато гіпонімів. В результаті застосування методу .hyponyms() отримуємо список гіпонімів. Тому, коли потрібно щось зробити з окремим гіпонімів, потрібно доступитися до нього за допомогою його індексу.
>>> types_of_motorcar[26].definition
'a vehicle that takes people to and from hospitals'
# Пробую те саме для "свого" синсету
>>> car_hypernyms[0].definition
'a self-propelled wheeled vehicle that does not run on rails'
# Все працює можна починати писати функцію. Але ще декілька експериментів
>>> len(car_hypernyms)
1 # синсет 'car.n.01' має один гіпернім
>>> len(types_of_motorcar)
31 # синсет 'car.n.01' має тридцять один гіпонім
# Потрібно щоб у функції в циклі оброблялися гіперніми та гіпоніми
# Пробую це зробити
>>> deff=[]
>>> for i in wn.synset('dog.n.01').hypernyms():
deff.append(i.definition)

>>> deff
['any of various animals that have been tamed and made fit for a human environment', 'any of various fissiped mammals with nonretractile claws and typically long muzzles']
# Чудово. Пробую цикл переписати, як "list comprehension"
>>> [i.definition for i in wn.synset('dog.n.01').hypernyms()]
['any of various animals that have been tamed and made fit for a human environment', 'any of various fissiped mammals with nonretractile claws and typically long muzzles']
# Пишу функцію
>>> def supergloss(synset): # оголошення функції supergloss, яка приймає один аргумент синсет (synset)
sg=[] # пустий список
sg.append(wn.synset(synset).definition) # до списку додаю опис значення синсету synset
sg.append([i.definition for i in wn.synset(synset).hypernyms()]) # до списку додаю описи значень гіпернімів синсету synset
sg.append([i.definition for i in wn.synset(synset).hyponyms()]) # до списку додаю описи значень гіпонімів синсету synset
return sg # функція повертає стрічку в якій зібрані описи значень

# Пробую, як працює функція
>>> supergloss('dog.n.01')
['a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds', ['any of various animals that have been tamed and made fit for a human environment', 'any of various fissiped mammals with nonretractile claws and typically long muzzles'], ['a young dog', 'bred of large heavy-coated white dogs resembling the Newfoundland', 'small smooth-haired breed of African origin having a tightly curled tail and the inability to bark', 'a breed of very large heavy dogs with a thick coarse usually black coat; highly intelligent dogs and vigorous swimmers; developed in Newfoundland', 'a dog small and tame enough to be held in the lap', 'an intelligent dog with a heavy curly solid-colored coat that is usually clipped; an old breed sometimes trained as sporting dogs or as performing dogs', 'a large dog (usually with a golden coat) produced by crossing a St Bernard and a Newfoundland', 'any of several breeds of very small dogs kept purely as pets', 'any of various stocky heavy-coated breeds of dogs native to northern regions having pointed muzzles and erect ears with a curled furry tail', 'informal terms for dogs', 'an inferior dog or one of mixed breed', 'any of an old breed of small nearly hairless dogs of Mexico', 'a dog used in hunting game', 'any of several breeds of usually large powerful dogs bred to work as draft animals and guard and guide dogs', 'a large breed having a smooth white coat with black or brown spots; originated in Dalmatia', 'small compact smooth-coated breed of Asiatic origin having a tightly curled tail and broad flat wrinkled muzzle', 'either of two Welsh breeds of long-bodied short-legged dogs with erect ears and a fox-like head', 'breed of various very small compact wiry-coated dogs of Belgian origin having a short bearded muzzle']]
>>>

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

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