Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL-LAB8(9).doc
Скачиваний:
18
Добавлен:
12.02.2016
Размер:
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;

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