- •Мета робота
- •Короткі теоретичні відомості
- •1. Складні випадки використання функцій
- •1.1 Функція, як аргумент
- •1.2 Функції накопичення
- •Функція використовує рекурсію – техніку яка буде розглядатися в подальшому. Перестановки слів у наборах слів корисно використовувати при створенні даних для тестування граматик.
- •1.3 Функції вищого рівня
- •1.4 Зазначені (поіменовані) аргументи.
- •2.1 Структура модуля в Python
- •2. Розробка програми
- •2.2 Багатомодульні програми
- •2.3 Помилки
- •2.4 Техніка налагодження (зневаджування) програм
- •3. Розробка алгоритму програми
- •3.1 Рекурсія
- •3.2 Динамічне програмування
- •4. Приклади бібліотек Python
- •4.5 Інші бібліотеки
- •Порядок виконання роботи
- •Інтернет посилання
- •Методичні вказівки
4. Приклади бібліотек Python
Існують сотні Python бібліотек сторонніх розробників, які є спеціалізованими програмними пакетами для розширення функціональності Python. NLTK є однією з таких бібліотек. Для використання всіх можливостей програмування на Python потрібно бути знайомими та використовувати такі бібліотеки. Більшість з цих бібліотек потрібно окремо встановлювати на комп’ютер.
4.1 Matplotlib
В Python розроблені спеціальні бібліотеки для візуалізації лінгвістичних даних. Пакет Matplotlib містить складні функції для побудови графічних зображень в стилі MATLAB. Бібліотека доступна за адресою http://matplotlib.sourceforge.net/.
Для представлення результатів роботи програми переважно використовується вивід по формату на екран або у файл. Графічна форма представлення результатів часто буває більш наочною та презентабельною. Наприклад, при виконанні лабораторної роботи №3 частотний розподіл модальних дієслів в різних жанрах корпуса Brown представлявся у вигляді таблиці. За допомогою наступної програми ці самі дані можуть бути представлені в графічному вигляді. Результат роботи програми представлено на рис 3.
colors = 'rgbcmyk' # red, green, blue, cyan, magenta, yellow, black
def bar_chart(categories, words, counts):
"Plot a bar chart showing counts for each word by category"
import pylab
ind = pylab.arange(len(words))
width = 1 / (len(categories) + 1)
bar_groups = []
for c in range(len(categories)):
bars = pylab.bar(ind+c*width, counts[categories[c]], width,
color=colors[c % len(colors)])
bar_groups.append(bars)
pylab.xticks(ind+width, words)
pylab.legend([b[0] for b in bar_groups], categories, loc='upper left')
pylab.ylabel('Frequency')
pylab.title('Frequency of Six Modal Verbs by Genre')
pylab.show()
>>> genres = ['news', 'religion', 'hobbies', 'government', 'adventure']
>>> modals = ['can', 'could', 'may', 'might', 'must', 'will']
>>> cfdist = nltk.ConditionalFreqDist(
... (genre, word)
... for genre in genres
... for word in nltk.corpus.brown.words(categories=genre)
... if word in modals)
...
>>> counts = {}
>>> for genre in genres:
... counts[genre] = [cfdist[genre][word] for word in modals]
>>> bar_chart(genres, modals, counts)
Рисунок 3 Гісторгама (діаграма у вигляді стовпчиків) частоти модальних дієслів в корпусі Brown.
З гістограми відразу зрозуміло що may та must мають приблизно однакові розподіли частот. Те саме можна сказати і про could та might.
4.2 NetworkX
Пакет NetworkX створений для роботи з графами. При необхідності його потрібно додатково встановлювати. Інсталяційні файли знаходяться на сторінці https://networkx.lanl.gov/. NetworkX може бути використаний разом з бібліотекою Matplotlib для візуалізації таких мереж, як WordNet (семантична мережа). В наступній програмі спочатку створюється пустий граф #1 далі здійснюється обхід по вузлах ієрархії гіпернімів WordNet (дуги додаються до графа) #2 . Здійснення обходу по вузлах потребує рекурсії #3. Результати візуалізації показані на рис 4.
import networkx as nx
import matplotlib
from nltk.corpus import wordnet as wn
def traverse(graph, start, node):
graph.depth[node.name] = node.shortest_path_distance(start)
for child in node.hyponyms():
graph.add_edge(node.name, child.name) #1
traverse(graph, start, child) #2
def hyponym_graph(start):
G = nx.Graph() #3
G.depth = {}
traverse(G, start, start)
return G
def graph_draw(graph):
nx.draw_graphviz(graph,
node_size = [16 * graph.degree(n) for n in graph],
node_color = [graph.depth[n] for n in graph],
with_labels = False)
matplotlib.pyplot.show()
>>> dog = wn.synset('dog.n.01')
>>> graph = hyponym_graph(dog)
>>> graph_draw(graph)
Рисунок 4. Візуалізація за домомогою NetworkX та Matplotlib: Показано частину ієрархії гіпернімів, починаючи від синсету dog.n.01 (темний вузол посередині); розмір візлів визначається кількістю його дітей, а колір визначається відстанню вузла від dog.n.01;
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)).
