Корпусные графики¶
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")
Результат:

