Перейти к содержанию

Корпусные графики

ruts.visualizers.dispersion_plot(), ruts.visualizers.keyness_plot(), ruts.visualizers.collocation_network()

Описание

Графики к корпусным мерам: лексическая дисперсия - где в тексте встречается слово, диаграмма ключевых слов по результатам keyness и сеть коллокаций по результатам collocations. Функции matplotlib принимают оси ax и возвращают Axes: без ax создается новая фигура, с ax график ложится в сетку пользователя; сеть коллокаций строится graphviz и возвращает Graph, как дерево слов.

Лексическая дисперсия

Строка на каждое слово из targets, штрих на позиции каждого его вхождения в текст - как dispersion_plot в NLTK и textplot_xray в quanteda. Слова сравниваются как есть: регистр и лемматизация на стороне WordsExtractor, поиск по лемме - через use_lexemes=True.

Параметр Тип По умолчанию Описание
words list[str] - Слова текста по порядку
targets list[str] - Слова, вхождения которых нужно показать
ax Axes None Оси для графика

Диаграмма ключевых слов

Расходящиеся горизонтальные столбцы (quanteda textplot_keyness): слова из positive вправо, из negative (результат keyness с positive=False) влево, длина столбца - модуль значения поля field (score, g2, log_ratio), так что сторона задается списком, а не знаком меры; по top_n слов с каждой стороны, слова с неопределенным или бесконечным значением пропускаются. Для отношения шансов (score от 0 до бесконечности, единица - шансы равны) задайте log=True: откладывается модуль \(\log_2\) значения, симметричный относительно единицы.

Параметр Тип По умолчанию Описание
positive list[Keyword] - Положительные ключевые слова
negative list[Keyword] () Отрицательные ключевые слова
top_n int 20 Количество слов с каждой стороны
labels tuple[str, str] ("целевой корпус", "эталонный корпус") Подписи легенды
field str score Поле Keyword, значения которого откладываются
log bool False Откладывать \(\log_2\) значения - для отношения шансов
ax Axes None Оси для графика

Сеть коллокаций

Неориентированный граф (quanteda textplot_network): узлы - слова с размером шрифта по частоте, ребра - пары с толщиной по значению меры и подписью; раскладка neato. Для отрисовки нужны исполняемые файлы Graphviz; в Jupyter граф отображается сам, graph.render("network", format="png") сохраняет файл.

Параметр Тип По умолчанию Описание
collocations list[Collocation] - Коллокации
top_n int None Количество пар с начала списка; None - все

Пример использования

Рассмотрим работу визуализаторов на примере 12 текстов из набора данных StalinWorks.

Пример

Код:

# Загрузка библиотек
import matplotlib.pyplot as plt
from ruts import WordsExtractor
from ruts.corpus import collocations, keyness
from ruts.datasets import FreqDict, StalinWorks
from ruts.visualizers import collocation_network, dispersion_plot, keyness_plot

# Подготовка данных
sw = StalinWorks()
texts = list(sw.get_texts(limit=12))
we = WordsExtractor(use_lexemes=True, lowercase=True, filter_nums=True)
lemmas = [lemma for text in texts for lemma in we.extract(text)]

# Лексическая дисперсия
dispersion_plot(lemmas, ["партия", "рабочий", "революция", "царь"])

# Ключевые слова относительно частотного словаря
freq_dict = FreqDict()
keyness_plot(
    keyness(lemmas, freq_dict, min_freq=5, top_n=10),
    keyness(lemmas, freq_dict, positive=False, min_freq=5, top_n=10),
    labels=("тексты Сталина", "частотный словарь"),
)

# Сеть коллокаций
graph = collocation_network(collocations(lemmas, window=3, min_freq=5, top_n=25))
graph.render("network", format="png")

Результат:

ruts

ruts