Отлично. Я могу сделать подробное решение и пошаговую инструкцию по построению мини-визуализации облака слов из предвыборных программ. Точная обработка требует текстов самих программ кандидатов (или ссылки на них). У меня сейчас нет доступа к актуальным документам без предоставленных текстов, но ниже ты получишь полный план, чтобы сделать это самостоятельно и с минимальными усилиями.
Что нужно для задачи
- Тексты предвыборных программ кандидатов (или ссылки на официальные тексты).
- Опционально: информация об идеологии каждого кандидата или партии (левые/правые/центрист и т.д.), чтобы сопоставлять словарь с идеологией.
Цель и подход
- Цель: понять структуру словарного набора в программах и определить, какие существительные чаще всего встречаются, а затем сделать выводы об акцентах идеологии.
- Подход: для каждого кандидата (или по совокупности) извлечь существительные, привести их к нормальной форме (лемматизация), отбросить стоп-слова, посчитать частоты. Сформировать топ-10 существительных. Построить облако слов (word cloud), где размер слова пропорционален частоте. По группировке по идеологиям сравнить игруши тем и сделать выводы об основной идеологической основе.
План действий (пошагово)
- Сбор данных
- Собери тексты программ: президентские, парламентские или местные советы — в зависимости от актуальных выборов.
- Организуй данные в структурированном виде, например:
- candidate: имя кандидата
- ideology: обозначенная идеология (левый/правый/центр/другая)
- text: полный текст программы
- (опционально) источник_url
- Предобработка текста
- Привести к нижнему регистру.
- Удалить знаки препинания и лишние символы.
- Токенизация и лемматизация на русском языке.
- Отфильтровать по частям речи: оставить только существительные (NOUN и PROPN).
- Удалить стоп-слова (частые служебные слова, не несущие смысловой нагрузки).
- Подсчет частот существительных
- Для каждого кандидата собрать частоты лемм существительных.
- Сгенерировать общий частотный словарь по всем кандидатам (если нужно агрегировать).
- Визуализация облака слов
- Построить облако слов на основе частот существительных.
- В облаке размер слова пропорционален его частоте.
- Отразить топ-10 существительных (можно ограничить облако первыми 10 самым частотным словам).
- Сравнение по идеологиям
- Для каждого идеологического блока посчитать суммарные частоты существительных (агрегировать по ideology).
- Сформировать топ-10 nouns для каждого блока.
- Сравнить блоки: какие темы и слова доминируют в разных идеологиях.
- Сделать вывод: какие существительные чаще встречаются в рамках той или иной идеологической основы; осторожно: совпадение слов не означает строгую идеологическую принадлежность, это лишь индикатор.
- Интерпретация и вывод
- Необходимо объяснить, что облако слов отражает акценты и тематику программы, а не полноту идей.
- Объяснить, какие темы указывают на конкретную идеологию (например, большое число слов, связанных с социальным обеспечением и образованием — может указывать на акцент на государственном участии, т.е. левый уклон; акцент на экономику, снижение налогов — на правый/либеральный уклон).
- Примечание: вывод об ideологии на основе одного облака слов — это ориентировочный анализ, который лучше сопровождать метаданными (название партий, официальные программы и т. п.).
Пример кода (Python) Заметь: ниже пример демонстрирует полноту процесса на локальной машине. Тебе потребуется установить библиотеки spaCy и wordcloud и скачать русскую языковую модель.
Что нужно установить:
- Python 3.x
- pip install spacy, wordcloud, matplotlib
- python -m spacy download ru_core_news_sm
Код (упрощённый рабочий прототип)
- Скопируй в файл analyze_candidates.py и запусти.
from collections import Counter, defaultdict import spacy from spacy.lang.ru.stop_words import STOP_WORDS from wordcloud import WordCloud import matplotlib.pyplot as plt
Инициализация NLP-модели для русского языка
nlp = spacy.load("ru_core_news_sm")
def extract_nouns(text): doc = nlp(text) nouns = [] for token in doc: if token.pos_ in ("NOUN", "PROPN"): lemma = token.lemma_.lower() if lemma not in STOP_WORDS and lemma.isalpha(): nouns.append(lemma) return nouns
def build_frequency(texts): # texts: список словарей {'candidate': ..., 'ideology': ..., 'text': ...} per_candidate = {} per_ideology = defaultdict(Counter) combined = Counter()
for item in texts:
nouns = extract_nouns(item['text'])
freq = Counter(nouns)
per_candidate[item['candidate']] = freq
ideol = item['ideology']
per_ideology[ideol].update(freq)
combined.update(freq)
return per_candidate, per_ideology, combined
def top_n_from_counter(counter, n=10): return counter.most_common(n)
def plot_wordcloud(freq_dict, title="Облако слов"): wc = WordCloud(width=800, height=400, background_color="white", max_words=100, colormap="viridis", relative_scaling=0.5) wc.generate_from_frequencies(dict(freq_dict)) plt.figure(figsize=(10, 5)) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title) plt.show()
Пример использования
if name == "main": # Пример данных (замени на реальные тексты) texts = [ {"candidate": "Иван Иванов", "ideology": "левый", "text": "Мы будем развивать образование, здравоохранение, социальную защиту граждан, улучшать доступ к услугам."}, {"candidate": "Петр Петров", "ideology": "правый", "text": "Мы снизим налоги, будем поддерживать бизнес, экономику, инвестиции, безопасность и порядок."}, {"candidate": "Мария Соколова", "ideology": "центр", "text": "Развитие инфраструктуры, образование, здравоохранение, устойчивое бюджетирование, прозрачность."} ]
per_candidate, per_ideology, combined = build_frequency(texts)
print("Топ-10 слов по всем кандидатам (существительные):")
print(top_n_from_counter(combined, 10))
# Облако для объединённых существительных
plot_wordcloud(combined, title="Общее облако слов (топ-10 существительных)")
# Облако по идеологиям
for ideol, counter in per_ideology.items():
print(f"Идеология: {ideol} — топ-10 nouns:")
print(top_n_from_counter(counter, 10))
plot_wordcloud(counter, title=f"Облако слов для идеологии: {ideol}")
Примечания к коду
- extract_nouns: извлекает существительные и лемматизирует их. Фильтрация по STOP_WORDS исключает служебные слова.
- build_frequency: строит частоты по каждому кандидату, по каждой идеологии и объединённый. Можно добавить поддержку объединённой таблицы.
- plot_wordcloud: строит облако слов. Ты можешь менять параметры (width, height, colormap) под стиль твоей работы.
Как интерпретировать результаты
- Топ-10 существительных покажут, на чем в программах акцентируют внимание кандидаты.
- Облако слов для каждого кандидата (или для идеологии) визуализирует важность тем. Крупные слова — наиболее частые.
- Сравнение облаков по идеологиям:
- Если в облаке одной идеологии много слов вроде: образование, здравоохранение, социальная защита, жильё, пенсии — такой набор характерен для более левой/социально ориентированной политики.
- Если в облаке доминируют слова типа: экономическая свобода, инвестиции, налоговая политика, предпринимательство, рынок — это может указывать на более правую/либеральную экономическую ориентацию.
- Важное предупреждение: слова сами по себе не доказывают идеологию. Это только индикатор направленности. Чтобы сделать надёжный вывод, лучше сочетать анализ слов с метаданными (партия/кандидат, официальные лозунги) и, при необходимости, с качественной оценкой содержания.
Что сделать дальше
- Пришли тексты или ссылки на них.
- Я проведу точную обработку: выделю nouns, построю топ-10, создам облако слов и сделаю сравнительный анализ по идеологиям.
- Либо можешь сам подставить свои тексты в пример выше и запустить локально. Если нужно, могу адаптировать код под твою структуру данных (например, загрузка из файлов .txt/.csv, работа с несколькими документами, сохранение облаков в файлы PNG).
Без текста сейчас могу привести лишь ориентировочный вывод по структуре:
- Общее топ-10 существительных может включать слова: образование, здравоохранение, экономика, безопасность, работа, инфраструктура, пенсионное обеспечение, налог, жильё, образование.
- По идеологиям можно ожидать различия в темах: левая часть часто подчеркивает социальную защиту и услуги; правая — экономика, бизнес, налоговая политика, безопасность; центр — сбалансированные слова, упор на инфраструктуру и прозрачность.
Готов приступить к конкретному анализу, как только пришлёшь тексты программ кандидатов или ссылки на них.