Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011-kl-lab9.doc
Скачиваний:
16
Добавлен:
12.11.2019
Размер:
2 Мб
Скачать
☆

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:

 

>>> import csv

>>> input_file = open("lexicon.csv", "rb") #1 Для виконання цього прикладу потрібно створити файл lexicon.csv з відповідними даними.

>>> for row in csv.reader(input_file): #2

... print row

['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']

Кожен рядок це список стрічок. Якщо певні поля містять числові дані то вони представляються, як стрічки і якщо потрібно то для подальшої роботи їх можна перетворити використовуючи функції int() або float().

4.4 NumPy

Пакет NumPy забезпечує виконання числових обчислень in Python. NumPy містить об’єкт – багатовимірний масив, який просто створити та доступатися до даних, які в ньому зберігаються:

 

>>> from numpy import array

>>> cube = array([ [[0,0,0], [1,1,1], [2,2,2]],

... [[3,3,3], [4,4,4], [5,5,5]],

... [[6,6,6], [7,7,7], [8,8,8]] ])

>>> cube[1,1,1]

4

>>> cube[2].transpose() # Транспонування матриці, операція транспонування: заміна рядків матриці на стовпчики.

array([[6, 7, 8],

[6, 7, 8],

[6, 7, 8]])

>>> cube[2,1:]

array([[7, 7, 7],

[8, 8, 8]])

NumPy містить також функції лінійної алгебри. В пакет кластеризації NLTK clustering package nltk.cluster широко використовуються масиви NumPy. Детальну інформацію можна отримати скориставшись файлами допомоги (в інтерпретаторі набрати help(nltk.cluster)).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]