- •Міністерство освіти і науки україни
- •Укладачі: Романюк а. Б., канд. Техн. Наук, ст. Викладач
- •1.2 Функції накопичення
- •Функція використовує рекурсію – техніку яка буде розглядатися в подальшому. Перестановки слів у наборах слів корисно використовувати при створенні даних для тестування граматик.
- •1.3 Функції вищого рівня
- •1.4 Зазначені (поіменовані) аргументи.
- •2. Розробка програми
- •2.1 Структура модуля в Python
- •2.3 Помилки
- •2.2 Багатомодульні програми
- •2.4 Техніка налагодження (зневаджування) програм
- •3. Розробка алгоритму програми
- •3.1 Рекурсія
- •3.2 Динамічне програмування
- •4. Приклади бібліотек Python
- •4.1 Matplotlib
- •4.2 NetworkX
- •4.3 Csv
- •4.4 NumPy
- •4.5 Інші бібліотеки
- •Порядок виконання роботи
- •Зміст звіту
- •Інтернет посилання
- •Методичні вказівки
- •Укладачі: Романюк Андрій Богданович
4.3 Csv
При аналізі лінгвістичних даних зручно представляти ці дані у вигляді таблиць. CSV(відангл.Comma-Separated Values,Значення, розділені комою) —файловий формат, котрий є форматом відмежовування для представлення табличних даних, у якому поля відокремлюються символом коми та переходу на новий рядок. Фрагмент лексикону в CSV форматі буде наступний:
sleep, sli:p, v.i, a condition of body and mind ...
walk, wo:k, v.intr, progress by lifting and setting down each foot ...
wake, weik, intrans, cease to sleep
Можна використовувати бібліотеку Python CSV для читання та запису файлів у цьому форматі. Наприклад, можна відкритиCSV файл lexicon.csv #1і проітерувати його рядки #2:
|
Кожен рядок це список стрічок. Якщо певні поля містять числові дані то вони представляються, як стрічки і якщо потрібно то для подальшої роботи їх можна перетворити використовуючи функції int() або float().
4.4 NumPy
Пакет NumPy забезпечує виконання числових обчислень in Python. NumPy містить об’єкт – багатовимірний масив, який просто створити та доступатися до даних, які в ньому зберігаються:
|
NumPy містить також функції лінійної алгебри. В пакет кластеризаціїNLTK clustering package nltk.cluster широко використовуються масивиNumPy. Детальну інформацію можна отримати скориставшись файлами допомоги (в інтерпретаторі набрати help(nltk.cluster)).
4.5 Інші бібліотеки
На сьогодні розроблено багато інших бібліотек Python, перелік яких можна знайти за адресою http://pypi.python.org/. Багато бібліотек забезпечують інтерфейс з іншим програмним забезпеченням, таким як реляційні бази даних (наприклад mysql-python) та великими колекціями документів(наприклад PyLucene). Інші бібліотеки забезпечують доступ до файлів у таких форматах як:PDF, MSWord, та XML (pypdf, pywin32, xml.etree), RSS (наприклад feedparser), та файлів електронної пошти (наприклад imaplib, email).
Порядок виконання роботи
Ознайомитися з теоретичними відомостями.
Виконати приклади, які використовуються в теоретичних відомостях.
Виконати наступні вправи.
Створити список слів і зберегти їх в змінній sent1. Здійснити операцію присвоювання sent2 = sent1. Змінити один з елементів вsent1 і перевірити чи змінивсяsent2.Результат письмово пояснити.
Створити список слів і зберегти їх в змінній sent1.Здійснити операцію присвоюванняsent2 = sent1[:].Змінити один з елементів вsent1 і перевірити чи змінивсяsent2.Результат письмово пояснити.
Створити список списків слів [ [‘’,’’,’’… ], [[‘’,’’,’’… ], [[‘’,’’,’’…],…](наприклад текст складається з речень, які складаються з стрічок). Здійснити операцію присвоюванняtext2 = text1[:],та здійснити операцію присвоювання нового значення одному зі слів (text1[1][1] = 'Monty'). Перевірити як ці операції вплинули на text2. Результат письмово пояснити.
Завантажити функцію Python deepcopy() ( from copy import deepcopy). Прочитати документацію про цю функцію. Перевірити яким чином ця функція створює нові копії об’єктів.
Створити список списків пустих стрічок використовуючи множення списків, наприклад word_table = [[''] * n] * m. Що станеться, якщо встановити одне зі значень такого списку, наприклад word_table[1][2] = "hello"? Пояснити письмово отримані результати. Створіть аналогічний список використовуючи функціюrange() і продемонструйте що такий список позбавлений такого недоліку при присвоєнні значення одному з його елементів.
Написати програму для створення двовимірного масиву word_vowels елементами якого є набори. Програма повинна обробити список слів і додати результати обробки доword_vowels[l][v] де l – довжина слова, v – кількість голосних у слові.
Написати функцію novel10(text), яка виводить на екран нові слова що вперше зустрілися в останніх 10% тексту.
Написати програму, яка обробляє речення представлене у вигляді стрічки, розділяє його на окремі слова і підраховує частоту вживання окремих слів. Програма повинна виводити на екран впорядковані за абеткою та в окремих рядках всі слова та їх частоти.
Гематрія – метод виявлення прихованого змісту слів на основі порівняння чисел, які відповідають словам. Слова з однаковими числами мають однаковий зміст. Число слова визначається сумуванням чисел, як відповідають його літерам. Написати функціюgematria() для сумування числових значень літер в слові згідно наступних значеньletter_vals:>>> letter_vals = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':80, 'g':3, 'h':8,'i':10, 'j':10, 'k':20, 'l':30, 'm':40, 'n':50, 'o':70, 'p':80, 'q':100, 'r':200, 's':300, 't':400, 'u':6, 'v':6, 'w':800, 'x':60, 'y':10, 'z':7}
Гематрія – метод виявлення прихованого змісту слів на основі порівняння чисел, які відповідають словам. Слова з однаковими числами мають однаковий зміст. Число слова визначається сумуванням чисел, як відповідають його літерам. Здійснити аналіз корпусу (наприклад nltk.corpus.state_union). Для кожного з текстів визначити скільки слів мають номер 555 та 777. (Використовуватиletter_valsз попередньої задачі)
Гематрія – метод виявлення прихованого змісту слів на основі порівняння чисел, які відповідають словам. Слова з однаковими числами мають однаковий зміст. Число слова визначається сумуванням чисел, як відповідають його літерам. Написати функцію decode() для обробки тексту, яка випадковим чином замінює слова на їх Гематрія-еквіваленти. Чи вдалося виявити"прихований зміст" тексту? (Використовуватиletter_valsз попередньої задачі)
Написати функцію shorten(text, n) обробки тексту , для вилученняn найбільш частотних слів в тексті. Яким чином змінилась читабельність тексту, після вилучення цих слів?
Написати list comprehension для сортування списку синсетівWordNet за близькістю до заданого синсету. Наприклад, дані синсети minke_whale.n.01, orca.n.01, novel.n.01, та tortoise.n.01, потрібно їх відсортувати згідно їхpath_distance() від right_whale.n.01.
Написати функцію, яка обробляє список слів (з дублюванням слів) і повертає список слів (без дублювання) відсортований в порядку спадання їх частоти.
Написати функцію, яка приймає текст і словник, як аргументи і повертає набір слів, які є у тексті але відсутні у словнику. Аргументи повинні бути представлені, як списки стрічок. Чи може функція мати один рядок при використанніset.difference()?
Імпортувати функцію itemgetter() модуляoperator зі стандартної бібліотекиPython( from operator import itemgetter). Створити список words , який містить декілька слів. Спробувати виконати: sorted(words, key=itemgetter(1)), та sorted(words, key=itemgetter(-1)). Пояснити письмово роботу функції itemgetter().
В NLTK реалізовано алгоритм Левінштейна для порівняння стрічок. Спробуйте скористатись цим модулемnltk.edit_dist(). Яким чином в цьому модулі використовується динамічне програмування? Який підхід використовується знизу-вверх чи зверху-вниз? Пояснити письмово.
Підготувати і оформити звіт.
-
Варіант
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Номери завдань
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
4
5
6
7
8
4
5
6
7
8
4
5
6
7
8
9
10
11
9
10
11
9
10
11
9
10
11
9
10
11
12
13
14
12
13
14
12
13
14
12
13
14
12
13
14
15
16
15
16
15
16
15
16
15
16
15
16
15
16
15
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
-
Варіант
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Номери завдань
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
4
5
6
7
8
4
5
6
7
8
4
5
6
7
8
9
10
11
9
10
11
9
10
11
9
10
11
9
10
11
12
13
14
12
13
14
12
13
14
12
13
14
12
13
14
15
16
15
16
15
16
15
16
15
16
15
16
15
16
16
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
