неділю, 29 листопада 2009 р.

Задача № 10 лабораторна робота №5

Модуль random включає функцію choice(), яка випадковим чином вибирає елементи послідовності. Наприклад, choice("aehh ") буде вибирати один з чотирьох символів. Напишіть програму генерації стрічки з 500 випадково вибраних символів "aehh ". Для поєднання елементів в стрічку використовуйте ''.join() . Нормалізуйте отриманий результат використовуючи split() та join().


import random
aa=[]
for i in range(500):
aa.append(random.choice("aehh "))
ss=''.join(aa)

Лабораторна робота №5

Доброго вечора! Підкажіть, будь ласка, як закінчити отаке завдання:

Створіть файл, який буде містити слова та їх частоту записані в окремих
рядках
через пробіл ( fuzzy 53). Прочитайте цей файл використовуючи
open(filename).readlines().
Розділіть кожну стрічку на дві частини використовуючи split(),
і перетворіть число в ціле значення використовуючи int().
Результат повинен бути у вигляді списку: [['fuzzy', 53], ...].

1. Початок, думаю, мав би бути приблизно такий:
from __future__ import division
import nltk, re, pprint
f = open('f.txt')
p=f.readlines()
print p
['word 34\n', 'day 13\n', 'read 45\n', 'free 15']
p=''word 34\n day 13\n read 45\n free 15'
words=p.split()
words
['word', '34', 'day', '13', 'read', '45', 'free', '15']
2. А перетворити число в ціле значення мені не вдається.
Пробувала робити цикл, в якому перевіряла чи стрічка складається з цифр, і
їх записати окремо, але то не то...

Лабораторна робота №5

Я намагаюся зробити 5 лабораторну, але в мене виникли деякі запитання, і я вирішила звернутися до Вас за допомогою.
1. Я коли вписую from _future_ import division то в мене вибиває помилку...:( не знаю з чим це повязано..
2. Я б дуже Вас просила допомогти з третім завданням 5 лаби. Не знаю як зробити цикл list comprehension.

Лабораторна робота №5

добрий вечір!!!! поясніть будь ласка,чому вираз raw_contents =
urllib.urlopen('http://www.nltk.org/').read(), який заданий в умові першого завдання
лабораторної роботи №5 не працює і видає таку помилку:
raw_contents = urllib.urlopen('http://www.nltk.org/').read()
Traceback (most recent call last):
File "", line 1, in
raw_contents = urllib.urlopen('http://www.nltk.org/').read()
NameError: name 'urllib' is not defined
хоча такого не повинно би було бути,бо цей вираз заміняє вираз:
from urllib import urlopen
url = "http://www.gutenberg.org/files/2554/2554.txt";
raw = urlopen(url).read()
моя функція для цієї задачі така:
def net(url):
raw_contents=urllib.urlopen(url).read() raw=nltk.clean_html(raw_contents)
tokens=nltk.word_tokenize(raw)
return tokens
Допоможіть,будьласка.
і ще, якщо можна підскажіть з 12тим завданням тієї ж 5лабораторної роботи!!! Щиро
вдячна!!!

Хіт сезону - полісемія

Полісемія - це явище коли одне слово має декілька значень ( іменник dog має 7 значень, кількість яких визначити можна як len(wn.synsets('dog', 'n'))). Знайдіть середнє значення полісемії...

Полісемія - багатозначність
Як визначити - поділити сумарну кількість значень слів нп кількість слів.
car має 5 значень dog має 7 значень. середня полісемія цих двох слів (5+7)/2=6
Як вирішити задачу. Рішень є багато, яке з них правільне студенти хай самі аналізують. Я
думаю що правільні значення полісемії дає така програма

Для інших частин мови потрібно тільки замінити n на v-дієслова,a-прикметники,r-прислівники

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

Прочитайте деякий текст з корпуса, здійсніть його токенізацію і збережіть у список всі wh-слова, які в ньому зустрічаються.

По пятій беріть будь-який файл *.html який є у вас вказуйте шлях до нього при виконанні
завдань.
Дивно, що навіть шоста задача викликає проблеми (дивіться рисунок1 і повторюйте ).
import nltk
from nltk.corpus import gutenberg
gutenberg.fileids()
['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt',
'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt',
'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt',
'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt',
'whitman-leaves.txt']
raw=gutenberg.raw('chesterton-ball.txt') #стрічка символів з тексту
len(raw)
457450
tokens1 = nltk.word_tokenize(raw) # токенізація тексту (виділені слова)
len(tokens1)
93663
tokens1[:100]
['[', 'The', 'Ball', 'and', 'The', 'Cross', 'by', 'G.K.', 'Chesterton', '1909', ']', 'I.', 'A', 'DISCUSSION', 'SOMEWHAT', 'IN', 'THE', 'AIR', 'The', 'flying', 'ship', 'of',
'Professor', 'Lucifer', 'sang', 'through', 'the', 'skies', 'like', 'a', 'silver',
'arrow', ';', 'the', 'bleak', 'white', 'steel', 'of', 'it', ',', 'gleaming', 'in', 'the',
'bleak', 'blue', 'emptiness', 'of', 'the', 'evening.', 'That', 'it', 'was', 'far',
'above', 'the', 'earth', 'was', 'no', 'expression', 'for', 'it', ';', 'to', 'the', 'two',
'men', 'in', 'it', ',', 'it', 'seemed', 'to', 'be', 'far', 'above', 'the', 'stars.',
'The', 'professor', 'had', 'himself', 'invented', 'the', 'flying', 'machine', ',', 'and',
'had', 'also', 'invented', 'nearly', 'everything', 'in', 'it.', 'Every', 'sort', 'of',
'tool', 'or', 'apparatus']
tokens2 = nltk.wordpunct_tokenize(raw) # токенізація тексту (виділені слова і
розділові знаки)
len(tokens2)
96996
tokens2[:100]
['[', 'The', 'Ball', 'and', 'The', 'Cross', 'by', 'G', '.', 'K', '.', 'Chesterton', '1909', ']', 'I', '.', 'A', 'DISCUSSION', 'SOMEWHAT', 'IN', 'THE', 'AIR', 'The',
'flying', 'ship', 'of', 'Professor', 'Lucifer', 'sang', 'through', 'the', 'skies',
'like', 'a', 'silver', 'arrow', ';', 'the', 'bleak', 'white', 'steel', 'of', 'it', ',',
'gleaming', 'in', 'the', 'bleak', 'blue', 'emptiness', 'of', 'the', 'evening', '.',
'That', 'it', 'was', 'far', 'above', 'the', 'earth', 'was', 'no', 'expression', 'for',
'it', ';', 'to', 'the', 'two', 'men', 'in', 'it', ',', 'it', 'seemed', 'to', 'be', 'far',
'above', 'the', 'stars', '.', 'The', 'professor', 'had', 'himself', 'invented', 'the',
'flying', 'machine', ',', 'and', 'had', 'also', 'invented', 'nearly', 'everything', 'in',
'it']
text1=nltk.Text(tokens1) # перетворили в текст NLTK
text2=nltk.Text(tokens2) # перетворили в текст NLTK
words1=[w.lower() for w in text1]
words2=[w.lower() for w in text2]
len(words1)
93663
len(words2)
96996
wh_words1=[w.lower() for w in text1 if w.startswith('wh')] # список wh - слів
wh_words2=[w.lower() for w in text2 if w.startswith('wh')] # список wh - слів
len(wh_words1) # сподіваємось, що отримали однакові списки
1213
len(wh_words2) # наші сподівання не справдилися
1227
[w for w in wh_words2 if w not in wh_words1] # можна побавитись, щоб знайти причину,
що списки не є однакові
['wheel', 'whirlpool']

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

Використовуючи один з методів визначення подібності слів побудуйте відсортований по спаданню список значень подібності для наступних пар слів

#список кортежів заданих слів
a=[(A,B),(C,D),(F,G),(N,M)]
s=[]
# цикл по елементах(кортежах) списку
for i,j in a:
#для пар визначаю значення подібності
d=i.подібне до j
sorted(s.append(d))

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

Модифікувати програму генерації випадкового тексту для виконання наступного: тренування програми на текстах двох різних жанрів та генерації тексту об’єднаного жанру.

Задачу 9 приблизно виконуєте наступним чином:
bigrams = nltk.bigrams(text)
text-тексту жанру1
nltk.ConditionalFreqDist(bigrams)
generate_model(cfd, 'слово за вашим бажанням')
text-тексту жанру2
nltk.ConditionalFreqDist(bigrams)
generate_model(cfd, 'те саме слово ')
text-тексту жанр1+жанр2
nltk.ConditionalFreqDist(bigrams)
generate_model(cfd, 'те саме слово ')

ті три стрічки які згенерувались порівнюєте, яка скоріше зациклилась, де текст більш
інтеректуальний.....

Відповіді на листи

Під час карантину дехто звертався до мене за допомогою. Публікую листи та відповіді на них.

четвер, 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']]
>>>