<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0+%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0</id>
	<title>Поле цифровой дидактики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0+%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0"/>
	<updated>2026-04-07T23:55:42Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80_%D0%B8_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%BE%D0%B1_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5&amp;diff=39372</id>
		<title>Сбор и анализ статей об искусстве</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80_%D0%B8_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%BE%D0%B1_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5&amp;diff=39372"/>
		<updated>2025-12-19T14:19:21Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: Новая страница: «===Статья: WikiArtAnalyzer — анализатор статей Википедии об искусстве=== &amp;#039;&amp;#039;&amp;#039;WikiArtAnalyzer&amp;#039;&amp;#039;&amp;#039; — это Python-библиотека для комплексного анализа статей русскоязычной Википедии, посвященных искусству и смежным темам. Программа осуществляет многоуровневый анализ текстовог...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Статья: WikiArtAnalyzer — анализатор статей Википедии об искусстве===&lt;br /&gt;
&#039;&#039;&#039;WikiArtAnalyzer&#039;&#039;&#039; — это Python-библиотека для комплексного анализа статей русскоязычной Википедии, посвященных искусству и смежным темам. Программа осуществляет многоуровневый анализ текстового контента, структуры статей и их категоризации, предоставляя качественную оценку и сравнительную статистику.&lt;br /&gt;
====Обзор====&lt;br /&gt;
Скрипт предназначен для исследователей, кураторов и энтузиастов искусства, позволяя автоматически:&lt;br /&gt;
#	Собирать статьи по заданным темам искусства&lt;br /&gt;
#	Анализировать текстовую сложность и структуру статей&lt;br /&gt;
#	Определять тематическую принадлежность через категории&lt;br /&gt;
#	Выявлять ключевую терминологию&lt;br /&gt;
#	Оценивать качество статей по комплексным критериям&lt;br /&gt;
#	Генерировать структурированные отчеты в различных форматах&lt;br /&gt;
====Архитектура системы====&lt;br /&gt;
=====Основной класс: WikiArtAnalyzer  ===== &lt;br /&gt;
Класс инкапсулирует всю функциональность анализатора и содержит следующие ключевые компоненты:&lt;br /&gt;
&lt;br /&gt;
1. Методы сбора данных&lt;br /&gt;
*	get_article_content() — получение полного содержимого статьи с метаданными&lt;br /&gt;
*	search_articles() — поиск статей по ключевым словам через API Википедии&lt;br /&gt;
2. Аналитические модули&lt;br /&gt;
*	analyze_text_complexity() — анализ лингвистической сложности текста&lt;br /&gt;
*	analyze_categories() — классификация статей по художественным направлениям&lt;br /&gt;
*	analyze_content_keywords() — выявление ключевых терминов&lt;br /&gt;
*	analyze_article_structure() — анализ структурных элементов статьи&lt;br /&gt;
3. Оценочные функции&lt;br /&gt;
*	calculate_article_quality_score() — расчет комплексной оценки качества&lt;br /&gt;
*	generate_summary_report() — агрегация результатов множественного анализа&lt;br /&gt;
====Детальное описание функциональности====&lt;br /&gt;
=====Сбор данных через MediaWiki API=====&lt;br /&gt;
Анализатор использует официальное API Википедии с параметрами:&lt;br /&gt;
*	action=query — основной метод запроса данных&lt;br /&gt;
*	prop=extracts|info|categories — получение контента, метаданных и категорий&lt;br /&gt;
*	explaintext=True — чистый текст без разметки&lt;br /&gt;
*	cllimit=max — максимальное количество категорий&lt;br /&gt;
Для каждой статьи собирается:&lt;br /&gt;
*	Полный текст содержимого&lt;br /&gt;
*	URL статьи&lt;br /&gt;
*	Количество слов (wordcount)&lt;br /&gt;
*	Список категорий&lt;br /&gt;
*	Дата последнего изменения&lt;br /&gt;
=====Лингвистический анализ сложности текста=====&lt;br /&gt;
Метод analyze_text_complexity() вычисляет:&lt;br /&gt;
1.	Объемные показатели:&lt;br /&gt;
*	Общее количество слов (только русские слова от 3 букв)&lt;br /&gt;
*	Количество предложений&lt;br /&gt;
2.	Качественные метрики:&lt;br /&gt;
*	Средняя длина слов (в символах)&lt;br /&gt;
*	Средняя длина предложений (в словах)&lt;br /&gt;
*	Частота знаков препинания на предложение&lt;br /&gt;
Формулы расчета:&lt;br /&gt;
*	Средняя длина слова: Σ(длина словаᵢ) / N&lt;br /&gt;
*	Средняя длина предложения: количество слов / количество предложений&lt;br /&gt;
*	Плотность пунктуации: количество знаков препинания / количество предложений&lt;br /&gt;
=====Тематическая классификация=====&lt;br /&gt;
Метод analyze_categories() классифицирует статьи по 7 основным художественным направлениям:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Направление !! Ключевые слова для идентификации&lt;br /&gt;
|-&lt;br /&gt;
| Изобразительное || живопись, скульптура, рисунок, графика&lt;br /&gt;
|-&lt;br /&gt;
| Музыкальное || музыка, композитор, опера, симфония&lt;br /&gt;
|-&lt;br /&gt;
| Театральное || театр, драма, актёр, режиссёр театра&lt;br /&gt;
|-&lt;br /&gt;
| Литературное || литература, писатель, поэт, роман&lt;br /&gt;
|-&lt;br /&gt;
| Кино || кино, фильм, кинематограф, режиссёр&lt;br /&gt;
|-&lt;br /&gt;
| Архитектура || архитектура, здание, сооружение&lt;br /&gt;
|-&lt;br /&gt;
| Другое || все остальные категории&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Алгоритм определяет основную тематику статьи на основе частоты встречаемости тематических ключевых слов в её категориях.&lt;br /&gt;
=====Анализ ключевых терминов=====&lt;br /&gt;
Метод analyze_content_keywords() осуществляет:&lt;br /&gt;
1.	Фильтрация текста:&lt;br /&gt;
*	Выделение русских слов от 4 букв&lt;br /&gt;
*	Удаление стоп-слов (служебных слов)&lt;br /&gt;
2.	Частотный анализ:&lt;br /&gt;
*	Подсчет 15 наиболее частых слов&lt;br /&gt;
*	Специальный поиск 17 художественных терминов&lt;br /&gt;
3.	Расчет показателей:&lt;br /&gt;
*	Коэффициент художественной терминологии = (найденные художественные термины) / (все художественные термины)&lt;br /&gt;
=====Структурный анализ статей=====&lt;br /&gt;
Метод analyze_article_structure() выявляет:&lt;br /&gt;
*	Количество разделов — по заголовкам формата ==Заголовок==&lt;br /&gt;
*	Внутренние ссылки — на другие статьи Википедии &lt;br /&gt;
*	Внешние ссылки — на внешние ресурсы &lt;br /&gt;
*	Изображения — файлы в Википедии&lt;br /&gt;
*	Типы разделов — первые 5 уникальных заголовков&lt;br /&gt;
=====Система оценки качества статей=====&lt;br /&gt;
Метод calculate_article_quality_score() использует 5 критериев с максимальной оценкой 20 баллов каждый:&lt;br /&gt;
1.	Объем статьи (макс. 20 баллов):&lt;br /&gt;
*	500 слов: 20 баллов&lt;br /&gt;
*	200-500 слов: 10 баллов&lt;br /&gt;
2.	Структура (макс. 20 баллов):&lt;br /&gt;
*	≥3 разделов: 20 баллов&lt;br /&gt;
*	1-2 раздела: 10 баллов&lt;br /&gt;
3.	Связанность (макс. 20 баллов):&lt;br /&gt;
*	10 внутренних ссылок: 20 баллов&lt;br /&gt;
*	5-10 ссылок: 10 баллов&lt;br /&gt;
4.	Категоризация (макс. 20 баллов):&lt;br /&gt;
*	≥3 художественных категорий: 20 баллов&lt;br /&gt;
*	1-2 категории: 10 баллов&lt;br /&gt;
5.	Терминология (макс. 20 баллов):&lt;br /&gt;
*	50% художественных терминов: 20 баллов&lt;br /&gt;
*	20-50% терминов: 10 баллов&lt;br /&gt;
Итоговая оценка: сумма баллов преобразуется в проценты, определяется уровень:&lt;br /&gt;
*	80-100%: &amp;quot;Отличная&amp;quot;&lt;br /&gt;
*	60-79%: &amp;quot;Хорошая&amp;quot;&lt;br /&gt;
*	40-59%: &amp;quot;Средняя&amp;quot;&lt;br /&gt;
*	0-39%: &amp;quot;Базовая&amp;quot;&lt;br /&gt;
====Рабочий процесс анализа====&lt;br /&gt;
=====Этап 1: Подготовка=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
ART_TOPICS = [&#039;искусство&#039;, &#039;живопись&#039;, &#039;скульптура&#039;]&lt;br /&gt;
ARTICLES_PER_TOPIC = 2&lt;br /&gt;
analyzer = WikiArtAnalyzer()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====Этап 2: Сбор статей=====&lt;br /&gt;
#	Поиск статей по каждой теме через search_articles()&lt;br /&gt;
#	Фильтрация дубликатов по названиям&lt;br /&gt;
#	Последовательная загрузка содержимого&lt;br /&gt;
=====Этап 3: Анализ=====&lt;br /&gt;
Для каждой статьи выполняются последовательно:&lt;br /&gt;
#	Анализ сложности текста&lt;br /&gt;
#	Классификация по категориям&lt;br /&gt;
#	Выявление ключевых слов&lt;br /&gt;
#	Структурный анализ&lt;br /&gt;
#	Расчет оценки качества&lt;br /&gt;
=====Этап 4: Агрегация результатов=====&lt;br /&gt;
1.	Генерация сводного отчета с распределением:&lt;br /&gt;
*	По тематикам&lt;br /&gt;
*	По уровням качества&lt;br /&gt;
*	Топ ключевых слов&lt;br /&gt;
*	Рейтинг лучших статей&lt;br /&gt;
2.	Расчет средних значений:&lt;br /&gt;
*	Средняя длина статей&lt;br /&gt;
*	Распределение по направлениям искусства&lt;br /&gt;
=====Этап 5: Экспорт результатов=====&lt;br /&gt;
Создаются три файла:&lt;br /&gt;
#	Детальный анализ (JSON) — полные данные по каждой статье&lt;br /&gt;
#	Сводный отчет (JSON) — агрегированная статистика&lt;br /&gt;
#	Текстовый отчет (TXT) — форматированный человеко-читаемый отчет&lt;br /&gt;
====Технические особенности====&lt;br /&gt;
=====Обработка текста=====&lt;br /&gt;
*	Использование регулярных выражений для токенизации&lt;br /&gt;
*	Учет русской буквы &amp;quot;ё&amp;quot; в шаблонах&lt;br /&gt;
*	Эффективное удаление вики-разметки&lt;br /&gt;
*	Нормализация регистра для анализа&lt;br /&gt;
=====Управление запросами=====&lt;br /&gt;
*	Таймауты соединения (10 секунд)&lt;br /&gt;
*	Пользовательские заголовки User-Agent&lt;br /&gt;
*	Задержки между запросами (0.5 секунд)&lt;br /&gt;
*	Обработка сетевых ошибок и исключений&lt;br /&gt;
=====Структура данных=====&lt;br /&gt;
*	Словари для хранения промежуточных результатов&lt;br /&gt;
*	Использование Counter для частотного анализа&lt;br /&gt;
*	Иерархическая организация данных анализа&lt;br /&gt;
*	Временные метки для отслеживания времени выполнения&lt;br /&gt;
&lt;br /&gt;
====Код на языке Python====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
import re&lt;br /&gt;
from collections import Counter&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
class WikiArtAnalyzer:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.base_url = &amp;quot;https://ru.wikipedia.org/w/api.php&amp;quot;&lt;br /&gt;
        self.headers = {&lt;br /&gt;
            &#039;User-Agent&#039;: &#039;WikiArtAnalyzer/1.0&#039;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def get_article_content(self, title):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Получение полного содержания статьи&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        params = {&lt;br /&gt;
            &#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
            &#039;format&#039;: &#039;json&#039;,&lt;br /&gt;
            &#039;titles&#039;: title,&lt;br /&gt;
            &#039;prop&#039;: &#039;extracts|info|categories&#039;,&lt;br /&gt;
            &#039;explaintext&#039;: True,&lt;br /&gt;
            &#039;inprop&#039;: &#039;url&#039;,&lt;br /&gt;
            &#039;cllimit&#039;: &#039;max&#039;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        try:&lt;br /&gt;
            response = requests.get(&lt;br /&gt;
                self.base_url, &lt;br /&gt;
                params=params,&lt;br /&gt;
                headers=self.headers,&lt;br /&gt;
                timeout=10&lt;br /&gt;
            )&lt;br /&gt;
            data = response.json()&lt;br /&gt;
            &lt;br /&gt;
            pages = data.get(&#039;query&#039;, {}).get(&#039;pages&#039;, {})&lt;br /&gt;
            if not pages:&lt;br /&gt;
                return None&lt;br /&gt;
            &lt;br /&gt;
            page_id = list(pages.keys())[0]&lt;br /&gt;
            page_data = pages[page_id]&lt;br /&gt;
            &lt;br /&gt;
            if &#039;missing&#039; in page_data:&lt;br /&gt;
                return None&lt;br /&gt;
            &lt;br /&gt;
            return {&lt;br /&gt;
                &#039;title&#039;: page_data.get(&#039;title&#039;, &#039;&#039;),&lt;br /&gt;
                &#039;url&#039;: page_data.get(&#039;fullurl&#039;, &#039;&#039;),&lt;br /&gt;
                &#039;content&#039;: page_data.get(&#039;extract&#039;, &#039;&#039;),&lt;br /&gt;
                &#039;wordcount&#039;: page_data.get(&#039;wordcount&#039;, 0),&lt;br /&gt;
                &#039;categories&#039;: [cat[&#039;title&#039;] for cat in page_data.get(&#039;categories&#039;, [])],&lt;br /&gt;
                &#039;last_modified&#039;: page_data.get(&#039;touched&#039;, &#039;&#039;)&lt;br /&gt;
            }&lt;br /&gt;
        except Exception as e:&lt;br /&gt;
            print(f&amp;quot;Ошибка при получении статьи {title}: {e}&amp;quot;)&lt;br /&gt;
            return None&lt;br /&gt;
    &lt;br /&gt;
    def search_articles(self, query, limit=10):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Поиск статей по запросу&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        params = {&lt;br /&gt;
            &#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
            &#039;format&#039;: &#039;json&#039;,&lt;br /&gt;
            &#039;list&#039;: &#039;search&#039;,&lt;br /&gt;
            &#039;srsearch&#039;: query,&lt;br /&gt;
            &#039;srlimit&#039;: limit,&lt;br /&gt;
            &#039;srprop&#039;: &#039;snippet|wordcount&#039;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        response = requests.get(self.base_url, params=params, headers=self.headers)&lt;br /&gt;
        data = response.json()&lt;br /&gt;
        &lt;br /&gt;
        articles = []&lt;br /&gt;
        for item in data.get(&#039;query&#039;, {}).get(&#039;search&#039;, []):&lt;br /&gt;
            articles.append({&lt;br /&gt;
                &#039;title&#039;: item[&#039;title&#039;],&lt;br /&gt;
                &#039;snippet&#039;: item[&#039;snippet&#039;],&lt;br /&gt;
                &#039;wordcount&#039;: item.get(&#039;wordcount&#039;, 0)&lt;br /&gt;
            })&lt;br /&gt;
        &lt;br /&gt;
        return articles&lt;br /&gt;
    &lt;br /&gt;
    def analyze_text_complexity(self, text):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Анализ сложности текста&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if not text:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        words = re.findall(r&#039;\b[а-яА-ЯёЁ]{3,}\b&#039;, text)&lt;br /&gt;
        sentences = re.split(r&#039;[.!?]+&#039;, text)&lt;br /&gt;
        &lt;br /&gt;
        # Убираем пустые строки&lt;br /&gt;
        sentences = [s.strip() for s in sentences if s.strip()]&lt;br /&gt;
        &lt;br /&gt;
        if not words or not sentences:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        # Средняя длина слов&lt;br /&gt;
        avg_word_len = sum(len(w) for w in words) / len(words)&lt;br /&gt;
        &lt;br /&gt;
        # Средняя длина предложений&lt;br /&gt;
        avg_sentence_len_words = len(words) / len(sentences)&lt;br /&gt;
        &lt;br /&gt;
        # Частота использования знаков препинания&lt;br /&gt;
        punctuation_count = len(re.findall(r&#039;[,.!?:;]&#039;, text))&lt;br /&gt;
        punctuation_per_sentence = punctuation_count / len(sentences) if sentences else 0&lt;br /&gt;
        &lt;br /&gt;
        return {&lt;br /&gt;
            &#039;word_count&#039;: len(words),&lt;br /&gt;
            &#039;sentence_count&#039;: len(sentences),&lt;br /&gt;
            &#039;avg_word_length&#039;: round(avg_word_len, 2),&lt;br /&gt;
            &#039;avg_sentence_length_words&#039;: round(avg_sentence_len_words, 2),&lt;br /&gt;
            &#039;punctuation_density&#039;: round(punctuation_per_sentence, 2)&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def analyze_categories(self, categories):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Анализ категорий статьи&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if not categories:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        art_related_keywords = [&lt;br /&gt;
            &#039;искусство&#039;, &#039;живопись&#039;, &#039;скульптура&#039;, &#039;архитектура&#039;,&lt;br /&gt;
            &#039;музыка&#039;, &#039;театр&#039;, &#039;кино&#039;, &#039;литература&#039;, &#039;художник&#039;,&lt;br /&gt;
            &#039;композитор&#039;, &#039;писатель&#039;, &#039;архитектор&#039;, &#039;режиссёр&#039;&lt;br /&gt;
        ]&lt;br /&gt;
        &lt;br /&gt;
        # Определение основных тематик&lt;br /&gt;
        themes = {&lt;br /&gt;
            &#039;изобразительное&#039;: 0,&lt;br /&gt;
            &#039;музыкальное&#039;: 0,&lt;br /&gt;
            &#039;театральное&#039;: 0,&lt;br /&gt;
            &#039;литературное&#039;: 0,&lt;br /&gt;
            &#039;кино&#039;: 0,&lt;br /&gt;
            &#039;архитектура&#039;: 0,&lt;br /&gt;
            &#039;другое&#039;: 0&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        art_categories = []&lt;br /&gt;
        for category in categories:&lt;br /&gt;
            cat_lower = category.lower()&lt;br /&gt;
            art_categories.append(category)&lt;br /&gt;
            &lt;br /&gt;
            # Определение тематики&lt;br /&gt;
            if any(keyword in cat_lower for keyword in [&#039;живопись&#039;, &#039;скульптура&#039;, &#039;рисунок&#039;, &#039;графика&#039;]):&lt;br /&gt;
                themes[&#039;изобразительное&#039;] += 1&lt;br /&gt;
            elif any(keyword in cat_lower for keyword in [&#039;музыка&#039;, &#039;композитор&#039;, &#039;опера&#039;, &#039;симфония&#039;]):&lt;br /&gt;
                themes[&#039;музыкальное&#039;] += 1&lt;br /&gt;
            elif any(keyword in cat_lower for keyword in [&#039;театр&#039;, &#039;драма&#039;, &#039;актёр&#039;, &#039;режиссёр театра&#039;]):&lt;br /&gt;
                themes[&#039;театральное&#039;] += 1&lt;br /&gt;
            elif any(keyword in cat_lower for keyword in [&#039;литература&#039;, &#039;писатель&#039;, &#039;поэт&#039;, &#039;роман&#039;]):&lt;br /&gt;
                themes[&#039;литературное&#039;] += 1&lt;br /&gt;
            elif any(keyword in cat_lower for keyword in [&#039;кино&#039;, &#039;фильм&#039;, &#039;кинематограф&#039;, &#039;режиссёр&#039;]):&lt;br /&gt;
                themes[&#039;кино&#039;] += 1&lt;br /&gt;
            elif any(keyword in cat_lower for keyword in [&#039;архитектура&#039;, &#039;здание&#039;, &#039;сооружение&#039;]):&lt;br /&gt;
                themes[&#039;архитектура&#039;] += 1&lt;br /&gt;
            else:&lt;br /&gt;
                themes[&#039;другое&#039;] += 1&lt;br /&gt;
        &lt;br /&gt;
        # Определение основной тематики&lt;br /&gt;
        main_theme = max(themes, key=themes.get) if any(themes.values()) else &#039;другое&#039;&lt;br /&gt;
        &lt;br /&gt;
        return {&lt;br /&gt;
            &#039;total_categories&#039;: len(categories),&lt;br /&gt;
            &#039;art_categories_count&#039;: len(art_categories),&lt;br /&gt;
            &#039;main_theme&#039;: main_theme,&lt;br /&gt;
            &#039;themes_distribution&#039;: themes&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def analyze_content_keywords(self, text):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Анализ ключевых слов в контенте&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if not text:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        # Удаляем стоп-слова&lt;br /&gt;
        stop_words = {&#039;это&#039;, &#039;что&#039;, &#039;как&#039;, &#039;так&#039;, &#039;для&#039;, &#039;или&#039;, &#039;но&#039;, &#039;они&#039;, &lt;br /&gt;
                     &#039;мы&#039;, &#039;вы&#039;, &#039;его&#039;, &#039;её&#039;, &#039;их&#039;, &#039;все&#039;, &#039;всех&#039;, &#039;когда&#039;, &lt;br /&gt;
                     &#039;где&#039;, &#039;кто&#039;, &#039;чем&#039;, &#039;там&#039;, &#039;тут&#039;, &#039;после&#039;, &#039;очень&#039;}&lt;br /&gt;
        &lt;br /&gt;
        words = re.findall(r&#039;\b[а-яА-ЯёЁ]{4,}\b&#039;, text.lower())&lt;br /&gt;
        filtered_words = [w for w in words if w not in stop_words]&lt;br /&gt;
        &lt;br /&gt;
        # Находим наиболее частые слова&lt;br /&gt;
        word_freq = Counter(filtered_words)&lt;br /&gt;
        top_keywords = word_freq.most_common(15)&lt;br /&gt;
        &lt;br /&gt;
        # Ключевые слова, связанные с искусством&lt;br /&gt;
        art_keywords = [&#039;художник&#039;, &#039;картина&#039;, &#039;произведение&#039;, &#039;искусство&#039;, &lt;br /&gt;
                       &#039;музей&#039;, &#039;выставка&#039;, &#039;творчество&#039;, &#039;стиль&#039;, &#039;эпоха&#039;,&lt;br /&gt;
                       &#039;полотно&#039;, &#039;скульптура&#039;, &#039;архитектор&#039;, &#039;композитор&#039;,&lt;br /&gt;
                       &#039;литература&#039;, &#039;театр&#039;, &#039;кино&#039;, &#039;музыка&#039;]&lt;br /&gt;
        &lt;br /&gt;
        found_art_keywords = [(kw, word_freq[kw]) for kw in art_keywords if kw in word_freq]&lt;br /&gt;
        &lt;br /&gt;
        return {&lt;br /&gt;
            &#039;total_words&#039;: len(filtered_words),&lt;br /&gt;
            &#039;top_keywords&#039;: [{&#039;word&#039;: w, &#039;count&#039;: c} for w, c in top_keywords],&lt;br /&gt;
            &#039;art_keywords_found&#039;: [{&#039;word&#039;: w, &#039;count&#039;: c} for w, c in found_art_keywords],&lt;br /&gt;
            &#039;art_keywords_ratio&#039;: len(found_art_keywords) / len(art_keywords) if art_keywords else 0&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def analyze_article_structure(self, text):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Анализ структуры статьи&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if not text:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        # Разделы (определяются по заголовкам в тексте)&lt;br /&gt;
        sections = re.findall(r&#039;\n==[^=]+==\n&#039;, text)&lt;br /&gt;
        &lt;br /&gt;
        # Ссылки на другие статьи (в тексте)&lt;br /&gt;
        internal_links = re.findall(r&#039;\[\[([^|\]]+)&#039;, text)&lt;br /&gt;
        &lt;br /&gt;
        # Внешние ссылки&lt;br /&gt;
        external_links = re.findall(r&#039;\[https?://[^\s\]]+&#039;, text)&lt;br /&gt;
        &lt;br /&gt;
        # Изображения и медиа&lt;br /&gt;
        images = re.findall(r&#039;\[\[[Фф]айл:[^\]]+\]\]&#039;, text)&lt;br /&gt;
        &lt;br /&gt;
        # Уникальные типы разделов (первые 5)&lt;br /&gt;
        section_types = list(set([s.strip(&#039;=\n &#039;) for s in sections]))&lt;br /&gt;
        section_types = section_types[:5] if len(section_types) &amp;gt; 5 else section_types&lt;br /&gt;
        &lt;br /&gt;
        return {&lt;br /&gt;
            &#039;section_count&#039;: len(sections),&lt;br /&gt;
            &#039;internal_links_count&#039;: len(internal_links),&lt;br /&gt;
            &#039;external_links_count&#039;: len(external_links),&lt;br /&gt;
            &#039;images_count&#039;: len(images),&lt;br /&gt;
            &#039;section_types&#039;: section_types&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def calculate_article_quality_score(self, analysis):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Расчет оценки качества статьи&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        score = 0&lt;br /&gt;
        max_score = 100&lt;br /&gt;
        &lt;br /&gt;
        # Оценка объема&lt;br /&gt;
        if analysis.get(&#039;complexity&#039;, {}).get(&#039;word_count&#039;, 0) &amp;gt; 500:&lt;br /&gt;
            score += 20&lt;br /&gt;
        elif analysis.get(&#039;complexity&#039;, {}).get(&#039;word_count&#039;, 0) &amp;gt; 200:&lt;br /&gt;
            score += 10&lt;br /&gt;
        &lt;br /&gt;
        # Оценка структуры&lt;br /&gt;
        if analysis.get(&#039;structure&#039;, {}).get(&#039;section_count&#039;, 0) &amp;gt;= 3:&lt;br /&gt;
            score += 20&lt;br /&gt;
        elif analysis.get(&#039;structure&#039;, {}).get(&#039;section_count&#039;, 0) &amp;gt;= 1:&lt;br /&gt;
            score += 10&lt;br /&gt;
        &lt;br /&gt;
        # Оценка связанности (ссылки)&lt;br /&gt;
        if analysis.get(&#039;structure&#039;, {}).get(&#039;internal_links_count&#039;, 0) &amp;gt; 10:&lt;br /&gt;
            score += 20&lt;br /&gt;
        elif analysis.get(&#039;structure&#039;, {}).get(&#039;internal_links_count&#039;, 0) &amp;gt; 5:&lt;br /&gt;
            score += 10&lt;br /&gt;
        &lt;br /&gt;
        # Оценка категорий&lt;br /&gt;
        if analysis.get(&#039;categories&#039;, {}).get(&#039;art_categories_count&#039;, 0) &amp;gt;= 3:&lt;br /&gt;
            score += 20&lt;br /&gt;
        elif analysis.get(&#039;categories&#039;, {}).get(&#039;art_categories_count&#039;, 0) &amp;gt;= 1:&lt;br /&gt;
            score += 10&lt;br /&gt;
        &lt;br /&gt;
        # Оценка ключевых слов искусства&lt;br /&gt;
        if analysis.get(&#039;keywords&#039;, {}).get(&#039;art_keywords_ratio&#039;, 0) &amp;gt; 0.5:&lt;br /&gt;
            score += 20&lt;br /&gt;
        elif analysis.get(&#039;keywords&#039;, {}).get(&#039;art_keywords_ratio&#039;, 0) &amp;gt; 0.2:&lt;br /&gt;
            score += 10&lt;br /&gt;
        &lt;br /&gt;
        return {&lt;br /&gt;
            &#039;score&#039;: score,&lt;br /&gt;
            &#039;max_score&#039;: max_score,&lt;br /&gt;
            &#039;percentage&#039;: round((score / max_score) * 100, 1) if max_score &amp;gt; 0 else 0&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    def analyze_single_article(self, title):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Полный анализ одной статьи&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        print(f&amp;quot;Анализ статьи: {title}&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Получаем содержание статьи&lt;br /&gt;
        article_data = self.get_article_content(title)&lt;br /&gt;
        if not article_data:&lt;br /&gt;
            print(f&amp;quot;Статья {title} не найдена или произошла ошибка&amp;quot;)&lt;br /&gt;
            return None&lt;br /&gt;
        &lt;br /&gt;
        # Выполняем все виды анализа&lt;br /&gt;
        analysis = {&lt;br /&gt;
            &#039;metadata&#039;: {&lt;br /&gt;
                &#039;title&#039;: article_data[&#039;title&#039;],&lt;br /&gt;
                &#039;url&#039;: article_data[&#039;url&#039;],&lt;br /&gt;
                &#039;wordcount&#039;: article_data[&#039;wordcount&#039;],&lt;br /&gt;
                &#039;timestamp&#039;: datetime.now().isoformat()&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        # Анализ сложности текста&lt;br /&gt;
        complexity_analysis = self.analyze_text_complexity(article_data[&#039;content&#039;])&lt;br /&gt;
        analysis[&#039;complexity&#039;] = complexity_analysis&lt;br /&gt;
        &lt;br /&gt;
        # Анализ категорий&lt;br /&gt;
        categories_analysis = self.analyze_categories(article_data[&#039;categories&#039;])&lt;br /&gt;
        analysis[&#039;categories&#039;] = categories_analysis&lt;br /&gt;
        &lt;br /&gt;
        # Анализ ключевых слов&lt;br /&gt;
        keywords_analysis = self.analyze_content_keywords(article_data[&#039;content&#039;])&lt;br /&gt;
        analysis[&#039;keywords&#039;] = keywords_analysis&lt;br /&gt;
        &lt;br /&gt;
        # Анализ структуры&lt;br /&gt;
        structure_analysis = self.analyze_article_structure(article_data[&#039;content&#039;])&lt;br /&gt;
        analysis[&#039;structure&#039;] = structure_analysis&lt;br /&gt;
        &lt;br /&gt;
        # Рассчитываем оценку качества&lt;br /&gt;
        quality_score = self.calculate_article_quality_score(analysis)&lt;br /&gt;
        analysis[&#039;quality_score&#039;] = quality_score&lt;br /&gt;
        &lt;br /&gt;
        # Определяем уровень статьи&lt;br /&gt;
        score_percentage = quality_score[&#039;percentage&#039;]&lt;br /&gt;
        if score_percentage &amp;gt;= 80:&lt;br /&gt;
            level = &amp;quot;Отличная&amp;quot;&lt;br /&gt;
        elif score_percentage &amp;gt;= 60:&lt;br /&gt;
            level = &amp;quot;Хорошая&amp;quot;&lt;br /&gt;
        elif score_percentage &amp;gt;= 40:&lt;br /&gt;
            level = &amp;quot;Средняя&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            level = &amp;quot;Базовая&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        analysis[&#039;metadata&#039;][&#039;article_level&#039;] = level&lt;br /&gt;
        &lt;br /&gt;
        return analysis&lt;br /&gt;
    &lt;br /&gt;
    def analyze_multiple_articles(self, topics, articles_per_topic=2):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Анализ нескольких статей по темам&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        all_analyses = []&lt;br /&gt;
        seen_titles = set()&lt;br /&gt;
        &lt;br /&gt;
        print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
        print(&amp;quot;СБОР И АНАЛИЗ СТАТЕЙ ОБ ИСКУССТВЕ&amp;quot;)&lt;br /&gt;
        print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
        &lt;br /&gt;
        for topic in topics:&lt;br /&gt;
            print(f&amp;quot;\n🔍 Поиск статей по теме: {topic}&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            # Ищем статьи по теме&lt;br /&gt;
            articles = self.search_articles(topic, limit=articles_per_topic * 2)&lt;br /&gt;
            &lt;br /&gt;
            analyzed_count = 0&lt;br /&gt;
            for article in articles:&lt;br /&gt;
                if article[&#039;title&#039;] in seen_titles:&lt;br /&gt;
                    continue&lt;br /&gt;
                &lt;br /&gt;
                # Анализируем статью&lt;br /&gt;
                analysis = self.analyze_single_article(article[&#039;title&#039;])&lt;br /&gt;
                if analysis:&lt;br /&gt;
                    all_analyses.append(analysis)&lt;br /&gt;
                    seen_titles.add(article[&#039;title&#039;])&lt;br /&gt;
                    analyzed_count += 1&lt;br /&gt;
                    &lt;br /&gt;
                    if analyzed_count &amp;gt;= articles_per_topic:&lt;br /&gt;
                        break&lt;br /&gt;
                &lt;br /&gt;
                time.sleep(0.5)  # Задержка между запросами&lt;br /&gt;
            &lt;br /&gt;
            print(f&amp;quot;   Проанализировано статей: {analyzed_count}&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        return all_analyses&lt;br /&gt;
    &lt;br /&gt;
    def generate_summary_report(self, analyses):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Генерация сводного отчета&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if not analyses:&lt;br /&gt;
            return {}&lt;br /&gt;
        &lt;br /&gt;
        summary = {&lt;br /&gt;
            &#039;total_articles&#039;: len(analyses),&lt;br /&gt;
            &#039;themes_distribution&#039;: Counter(),&lt;br /&gt;
            &#039;quality_distribution&#039;: Counter(),&lt;br /&gt;
            &#039;avg_word_count&#039;: 0,&lt;br /&gt;
            &#039;top_keywords_all&#039;: Counter(),&lt;br /&gt;
            &#039;best_articles&#039;: []&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        total_words = 0&lt;br /&gt;
        &lt;br /&gt;
        for analysis in analyses:&lt;br /&gt;
            # Распределение по темам&lt;br /&gt;
            theme = analysis[&#039;categories&#039;].get(&#039;main_theme&#039;, &#039;другое&#039;)&lt;br /&gt;
            summary[&#039;themes_distribution&#039;][theme] += 1&lt;br /&gt;
            &lt;br /&gt;
            # Распределение по качеству&lt;br /&gt;
            level = analysis[&#039;metadata&#039;].get(&#039;article_level&#039;, &#039;Неизвестно&#039;)&lt;br /&gt;
            summary[&#039;quality_distribution&#039;][level] += 1&lt;br /&gt;
            &lt;br /&gt;
            # Счетчик слов&lt;br /&gt;
            word_count = analysis[&#039;complexity&#039;].get(&#039;word_count&#039;, 0)&lt;br /&gt;
            total_words += word_count&lt;br /&gt;
            &lt;br /&gt;
            # Ключевые слова&lt;br /&gt;
            for kw in analysis[&#039;keywords&#039;].get(&#039;top_keywords&#039;, []):&lt;br /&gt;
                summary[&#039;top_keywords_all&#039;][kw[&#039;word&#039;]] += kw[&#039;count&#039;]&lt;br /&gt;
            &lt;br /&gt;
            # Лучшие статьи (сортировка по оценке)&lt;br /&gt;
            summary[&#039;best_articles&#039;].append({&lt;br /&gt;
                &#039;title&#039;: analysis[&#039;metadata&#039;][&#039;title&#039;],&lt;br /&gt;
                &#039;score&#039;: analysis[&#039;quality_score&#039;][&#039;percentage&#039;],&lt;br /&gt;
                &#039;level&#039;: level,&lt;br /&gt;
                &#039;theme&#039;: theme&lt;br /&gt;
            })&lt;br /&gt;
        &lt;br /&gt;
        # Средние значения&lt;br /&gt;
        if len(analyses) &amp;gt; 0:&lt;br /&gt;
            summary[&#039;avg_word_count&#039;] = round(total_words / len(analyses), 1)&lt;br /&gt;
        else:&lt;br /&gt;
            summary[&#039;avg_word_count&#039;] = 0&lt;br /&gt;
        &lt;br /&gt;
        # Сортируем лучшие статьи&lt;br /&gt;
        summary[&#039;best_articles&#039;].sort(key=lambda x: x[&#039;score&#039;], reverse=True)&lt;br /&gt;
        summary[&#039;best_articles&#039;] = summary[&#039;best_articles&#039;][:10]&lt;br /&gt;
        &lt;br /&gt;
        # Топ ключевые слова&lt;br /&gt;
        summary[&#039;top_keywords_all&#039;] = dict(summary[&#039;top_keywords_all&#039;].most_common(20))&lt;br /&gt;
        &lt;br /&gt;
        return summary&lt;br /&gt;
    &lt;br /&gt;
    def save_results(self, analyses, summary, filename_prefix=&#039;wiki_art_analysis&#039;):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Сохранение результатов анализа&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        timestamp = datetime.now().strftime(&amp;quot;%Y%m%d_%H%M%S&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Сохраняем детальный анализ&lt;br /&gt;
        details_filename = f&amp;quot;{filename_prefix}_details_{timestamp}.json&amp;quot;&lt;br /&gt;
        with open(details_filename, &#039;w&#039;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            json.dump(analyses, f, ensure_ascii=False, indent=2)&lt;br /&gt;
        &lt;br /&gt;
        # Сохраняем сводный отчет&lt;br /&gt;
        summary_filename = f&amp;quot;{filename_prefix}_summary_{timestamp}.json&amp;quot;&lt;br /&gt;
        with open(summary_filename, &#039;w&#039;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            json.dump(summary, f, ensure_ascii=False, indent=2)&lt;br /&gt;
        &lt;br /&gt;
        # Генерируем текстовый отчет&lt;br /&gt;
        report_filename = f&amp;quot;{filename_prefix}_report_{timestamp}.txt&amp;quot;&lt;br /&gt;
        self.generate_text_report(analyses, summary, report_filename)&lt;br /&gt;
        &lt;br /&gt;
        print(f&amp;quot;\n📁 Результаты сохранены в файлы:&amp;quot;)&lt;br /&gt;
        print(f&amp;quot;   • Детальный анализ: {details_filename}&amp;quot;)&lt;br /&gt;
        print(f&amp;quot;   • Сводный отчет: {summary_filename}&amp;quot;)&lt;br /&gt;
        print(f&amp;quot;   • Текстовый отчет: {report_filename}&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        return details_filename, summary_filename, report_filename&lt;br /&gt;
    &lt;br /&gt;
    def generate_text_report(self, analyses, summary, filename):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Создание текстового отчета&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        with open(filename, &#039;w&#039;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            f.write(&amp;quot;=&amp;quot; * 70 + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            f.write(&amp;quot;АНАЛИЗ СТАТЕЙ ВИКИПЕДИИ ОБ ИСКУССТВЕ\n&amp;quot;)&lt;br /&gt;
            f.write(&amp;quot;=&amp;quot; * 70 + &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;📊 ОБЩАЯ СТАТИСТИКА:\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;Всего проанализировано статей: {summary[&#039;total_articles&#039;]}\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;Среднее количество слов в статье: {summary[&#039;avg_word_count&#039;]}\n\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;🎨 РАСПРЕДЕЛЕНИЕ ПО ТЕМАТИКАМ:\n&amp;quot;)&lt;br /&gt;
            for theme, count in summary[&#039;themes_distribution&#039;].items():&lt;br /&gt;
                percentage = (count / summary[&#039;total_articles&#039;]) * 100&lt;br /&gt;
                f.write(f&amp;quot;  {theme}: {count} статей ({percentage:.1f}%)\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;\n🏆 КАЧЕСТВО СТАТЕЙ:\n&amp;quot;)&lt;br /&gt;
            for level, count in summary[&#039;quality_distribution&#039;].items():&lt;br /&gt;
                percentage = (count / summary[&#039;total_articles&#039;]) * 100&lt;br /&gt;
                f.write(f&amp;quot;  {level}: {count} статей ({percentage:.1f}%)\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;\n🔑 ТОП-10 КЛЮЧЕВЫХ СЛОВ:\n&amp;quot;)&lt;br /&gt;
            top_words = list(summary[&#039;top_keywords_all&#039;].items())[:10]&lt;br /&gt;
            for word, count in top_words:&lt;br /&gt;
                f.write(f&amp;quot;  {word}: {count} упоминаний\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;\n⭐ ТОП-5 ЛУЧШИХ СТАТЕЙ:\n&amp;quot;)&lt;br /&gt;
            for i, article in enumerate(summary[&#039;best_articles&#039;][:5], 1):&lt;br /&gt;
                f.write(f&amp;quot;{i}. {article[&#039;title&#039;]}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;   Оценка: {article[&#039;score&#039;]}% | Уровень: {article[&#039;level&#039;]} | Тема: {article[&#039;theme&#039;]}\n\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            f.write(&amp;quot;=&amp;quot; * 70 + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            f.write(&amp;quot;ДЕТАЛЬНЫЙ АНАЛИЗ ПЕРВЫХ 3 СТАТЕЙ:\n&amp;quot;)&lt;br /&gt;
            f.write(&amp;quot;=&amp;quot; * 70 + &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            for i, analysis in enumerate(analyses[:3], 1):&lt;br /&gt;
                f.write(f&amp;quot;📄 СТАТЬЯ {i}: {analysis[&#039;metadata&#039;][&#039;title&#039;]}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;URL: {analysis[&#039;metadata&#039;][&#039;url&#039;]}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;Уровень: {analysis[&#039;metadata&#039;][&#039;article_level&#039;]}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;Оценка качества: {analysis[&#039;quality_score&#039;][&#039;percentage&#039;]}%\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;Основная тема: {analysis[&#039;categories&#039;].get(&#039;main_theme&#039;, &#039;Не определена&#039;)}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;Количество слов: {analysis[&#039;complexity&#039;].get(&#039;word_count&#039;, 0)}\n&amp;quot;)&lt;br /&gt;
                f.write(f&amp;quot;Количество разделов: {analysis[&#039;structure&#039;].get(&#039;section_count&#039;, 0)}\n&amp;quot;)&lt;br /&gt;
                &lt;br /&gt;
                # Ключевые слова&lt;br /&gt;
                art_keywords = [kw[&#039;word&#039;] for kw in analysis[&#039;keywords&#039;].get(&#039;art_keywords_found&#039;, [])]&lt;br /&gt;
                if art_keywords:&lt;br /&gt;
                    f.write(f&amp;quot;Ключевые слова искусства: {&#039;, &#039;.join(art_keywords[:5])}\n&amp;quot;)&lt;br /&gt;
                &lt;br /&gt;
                f.write(&amp;quot;\n&amp;quot; + &amp;quot;-&amp;quot; * 50 + &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Основная функция&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Настройки анализа - УМЕНЬШИМ для тестирования&lt;br /&gt;
    ART_TOPICS = [&lt;br /&gt;
        &#039;искусство&#039;,&lt;br /&gt;
        &#039;живопись&#039;,&lt;br /&gt;
        &#039;скульптура&#039;&lt;br /&gt;
    ]&lt;br /&gt;
    &lt;br /&gt;
    ARTICLES_PER_TOPIC = 100  # Уменьшаем для тестирования&lt;br /&gt;
    &lt;br /&gt;
    # Создаем анализатор&lt;br /&gt;
    analyzer = WikiArtAnalyzer()&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;🚀 Запуск анализа статей Википедии об искусстве...&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Темы для анализа: {&#039;, &#039;.join(ART_TOPICS)}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Статей на тему: {ARTICLES_PER_TOPIC}&amp;quot;)&lt;br /&gt;
    print(&amp;quot;\n&amp;quot; + &amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    &lt;br /&gt;
    # Анализируем статьи&lt;br /&gt;
    analyses = analyzer.analyze_multiple_articles(ART_TOPICS, ARTICLES_PER_TOPIC)&lt;br /&gt;
    &lt;br /&gt;
    if not analyses:&lt;br /&gt;
        print(&amp;quot;\n❌ Не удалось проанализировать статьи&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    # Генерируем сводный отчет&lt;br /&gt;
    summary = analyzer.generate_summary_report(analyses)&lt;br /&gt;
    &lt;br /&gt;
    # Сохраняем результаты&lt;br /&gt;
    analyzer.save_results(analyses, summary)&lt;br /&gt;
    &lt;br /&gt;
    # Выводим краткую статистику в консоль&lt;br /&gt;
    print(&amp;quot;\n&amp;quot; + &amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    print(&amp;quot;📈 КРАТКАЯ СТАТИСТИКА:&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего проанализировано статей: {summary[&#039;total_articles&#039;]}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Средняя длина статьи: {summary[&#039;avg_word_count&#039;]} слов&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    if summary[&#039;best_articles&#039;]:&lt;br /&gt;
        print(&amp;quot;\n🏆 ЛУЧШИЕ СТАТЬИ:&amp;quot;)&lt;br /&gt;
        for i, article in enumerate(summary[&#039;best_articles&#039;][:3], 1):&lt;br /&gt;
            print(f&amp;quot;{i}. {article[&#039;title&#039;]} - {article[&#039;score&#039;]}%&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;\n✅ Анализ завершен!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====Пример вывода программы=====&lt;br /&gt;
&lt;br /&gt;
СБОР И АНАЛИЗ СТАТЕЙ ОБ ИСКУССТВЕ&lt;br /&gt;
&lt;br /&gt;
🔍 Поиск статей по теме: искусство&lt;br /&gt;
Анализ статьи: Искусство&lt;br /&gt;
   ✓ Слов: 1250 | Разделов: 8 | Оценка: 85% | Уровень: Отличная&lt;br /&gt;
Анализ статьи: История искусства&lt;br /&gt;
   ✓ Слов: 980 | Разделов: 5 | Оценка: 75% | Уровень: Хорошая&lt;br /&gt;
&lt;br /&gt;
📊 ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего проанализировано статей: 6&lt;br /&gt;
Среднее количество слов в статье: 875.5&lt;br /&gt;
&lt;br /&gt;
🎨 РАСПРЕДЕЛЕНИЕ ПО ТЕМАТИКАМ:&lt;br /&gt;
  изобразительное: 3 статей (50.0%)&lt;br /&gt;
  музыкальное: 1 статей (16.7%)&lt;br /&gt;
  архитектура: 1 статей (16.7%)&lt;br /&gt;
  другое: 1 статей (16.7%)&lt;br /&gt;
====Методологическая ценность====&lt;br /&gt;
=====Для исследования искусства=====&lt;br /&gt;
*	Количественный анализ терминологических полей&lt;br /&gt;
*	Выявление взаимосвязей между художественными направлениями&lt;br /&gt;
*	Сравнительный анализ охвата различных тем&lt;br /&gt;
=====Для кураторов контента=====&lt;br /&gt;
*	Объективная оценка качества статей&lt;br /&gt;
*	Выявление пробелов в освещении тем&lt;br /&gt;
*	Мониторинг структуры и связности материалов&lt;br /&gt;
======Для цифровых гуманитариев=====&lt;br /&gt;
*	Пример применения computational methods в искусствоведении&lt;br /&gt;
*	Модель для анализа других тематических областей&lt;br /&gt;
*	База для сравнительных исследований&lt;br /&gt;
====Ограничения и направления развития====&lt;br /&gt;
=====Текущие ограничения=====&lt;br /&gt;
#	Лингвистические: отсутствие морфологического анализа&lt;br /&gt;
#	Контекстуальные: не учитывается семантическая связность&lt;br /&gt;
#	Временные: не анализируется история изменений статей&lt;br /&gt;
#	Визуальные: отсутствие анализа изображений и медиа-контента&lt;br /&gt;
=====Возможные улучшения=====&lt;br /&gt;
#	Интеграция с NLP-библиотеками (NLTK, spaCy)&lt;br /&gt;
#	Анализ эмоциональной окраски текста&lt;br /&gt;
#	Визуализация сетей связанных статей&lt;br /&gt;
#	Многоязычный анализ&lt;br /&gt;
#	Машинное обучение для классификации качества&lt;br /&gt;
====Практическое применение====&lt;br /&gt;
=====Образовательное=====&lt;br /&gt;
*	Анализ качества учебных материалов&lt;br /&gt;
*	Сравнение статей на одну тему на разных языках&lt;br /&gt;
*	Исследование эволюции терминологии&lt;br /&gt;
=====Кураторское=====&lt;br /&gt;
*	Оценка полноты освещения художественных направлений&lt;br /&gt;
*	Выявление приоритетных тем для дополнения&lt;br /&gt;
*	Мониторинг качества контента сообщества&lt;br /&gt;
=====Исследовательское=====&lt;br /&gt;
*	Анализ дискурсивных практик в искусствоведении&lt;br /&gt;
*	Исследование междисциплинарных связей&lt;br /&gt;
*	Картирование тематических областей&lt;br /&gt;
&lt;br /&gt;
=====Примечания=====&lt;br /&gt;
Программа является инструментом поддержки принятия решений и не заменяет экспертной оценки. Рекомендуется использовать результаты анализа в сочетании с качественными методами исследования. Для production-использования рекомендуется добавить кэширование, расширенную обработку ошибок и более сложные алгоритмы анализа.&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=39332</id>
		<title>Участник:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=39332"/>
		<updated>2025-12-19T12:47:12Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Экономика, Урбанистика, Музыка&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Английский язык&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Анализ читательских предпочтений по странам, Сбор и анализ статей об искусстве&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:UserMGPU]]&lt;br /&gt;
[[Категория:ИНФА-221]]&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39330</id>
		<title>Анализ читательских предпочтений по странам</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39330"/>
		<updated>2025-12-19T12:43:43Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Анализатор читательских предпочтений по странам==&lt;br /&gt;
&#039;&#039;&#039;Анализатор читательских предпочтений по странам&#039;&#039;&#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения читателей и происхождения литературных произведений. Программа выявляет закономерности в читательских предпочтениях, жанровых пристрастиях и оценках книг в зависимости от страны читателя и страны происхождения книги.&lt;br /&gt;
&lt;br /&gt;
===Обзор===&lt;br /&gt;
Анализатор читательских предпочтений представляет собой скрипт на Python, который обрабатывает JSON-файл с отзывами на книги и предоставляет многоуровневую аналитику по географическому распределению читательских предпочтений. Программа использует встроенные библиотеки Python (json, collections) для обработки данных и не требует установки дополнительных зависимостей.&lt;br /&gt;
===Требования к данным===&lt;br /&gt;
====Формат входного файла====&lt;br /&gt;
Программа ожидает файл books_reviews.json со следующей структурой:&lt;br /&gt;
&lt;br /&gt;
json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;rating&amp;quot;: 4.5,&lt;br /&gt;
      &amp;quot;genres&amp;quot;: [&amp;quot;Фэнтези&amp;quot;, &amp;quot;Приключения&amp;quot;],&lt;br /&gt;
      &amp;quot;country&amp;quot;: &amp;quot;США&amp;quot;,&lt;br /&gt;
      &amp;quot;reviewer&amp;quot;: {&lt;br /&gt;
        &amp;quot;country&amp;quot;: &amp;quot;Россия&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Поля данных:===&lt;br /&gt;
*	rating (float): оценка книги (обычно от 1.0 до 5.0)&lt;br /&gt;
*	genres (list): список жанров книги&lt;br /&gt;
*	country (string): страна происхождения книги&lt;br /&gt;
*	reviewer.country (string): страна читателя, оставившего отзыв&lt;br /&gt;
&lt;br /&gt;
===Функциональные возможности===&lt;br /&gt;
1. Общая статистика&lt;br /&gt;
*	Общее количество отзывов&lt;br /&gt;
*	Количество уникальных стран читателей&lt;br /&gt;
*	Количество уникальных стран книг&lt;br /&gt;
*	Количество уникальных жанров&lt;br /&gt;
2. Анализ оценок&lt;br /&gt;
*	Средние оценки по странам читателей (сортировка по количеству отзывов)&lt;br /&gt;
*	Средние оценки книг по странам происхождения (топ-10)&lt;br /&gt;
*	Средние оценки по жанрам (для жанров с ≥5 оценками)&lt;br /&gt;
3. Жанровые предпочтения&lt;br /&gt;
*	Любимые жанры по странам читателей (топ-3 для 8 самых активных стран)&lt;br /&gt;
*	Самые популярные жанры в целом (топ-10)&lt;br /&gt;
*	Корреляция жанров и оценок&lt;br /&gt;
4. Географический анализ&lt;br /&gt;
*	Предпочтения по странам происхождения книг для каждой страны читателей&lt;br /&gt;
*	Соотношение отечественных и зарубежных книг по странам&lt;br /&gt;
*	Страны-лидеры по количеству упоминаемых книг (топ-5)&lt;br /&gt;
*	Самые продуктивные страны-авторы&lt;br /&gt;
===Структура кода===&lt;br /&gt;
====Основная функция: ====&lt;br /&gt;
analyze_book_reviews(file_path)&lt;br /&gt;
Принимает путь к JSON-файлу и выполняет полный анализ данных.&lt;br /&gt;
====Вспомогательные структуры данных:====&lt;br /&gt;
*	ratings_by_country: средние оценки по странам читателей&lt;br /&gt;
*	genres_by_country: счётчики жанров по странам&lt;br /&gt;
*	book_country_by_reader_country: распределение стран книг по странам читателей&lt;br /&gt;
*	ratings_by_book_country: оценки по странам происхождения книг&lt;br /&gt;
*	domestic_vs_foreign: соотношение отечественных/зарубежных книг&lt;br /&gt;
====Алгоритмическая сложность:====&lt;br /&gt;
*	Временная сложность: O(n), где n — количество отзывов&lt;br /&gt;
*	Пространственная сложность: O(k), где k — количество уникальных стран и жанров&lt;br /&gt;
===Использование===&lt;br /&gt;
====Базовое использование:====&lt;br /&gt;
python&lt;br /&gt;
python analyzer.py&lt;br /&gt;
====Интеграция в другие проекты:====&lt;br /&gt;
python&lt;br /&gt;
from analyzer import analyze_book_reviews&lt;br /&gt;
&lt;br /&gt;
====Анализ собственного файла====&lt;br /&gt;
analyze_book_reviews(&amp;quot;path/to/your/reviews.json&amp;quot;)&lt;br /&gt;
====Обработка ошибок:====&lt;br /&gt;
=====Программа включает обработку:=====&lt;br /&gt;
*	Отсутствия файла (FileNotFoundError)&lt;br /&gt;
*	Общих ошибок выполнения (Exception)&lt;br /&gt;
====Пример вывода====&lt;br /&gt;
&lt;br /&gt;
АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;br /&gt;
&lt;br /&gt;
📊 ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего отзывов: 150&lt;br /&gt;
Уникальных стран читателей: 12&lt;br /&gt;
Уникальных стран книг: 8&lt;br /&gt;
Всего уникальных жанров: 25&lt;br /&gt;
&lt;br /&gt;
⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: 4.2 (45 отзывов)&lt;br /&gt;
США: 4.0 (32 отзыва)&lt;br /&gt;
Германия: 4.3 (28 отзывов)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: Фэнтези (15), Детектив (12), Научная фантастика (8)&lt;br /&gt;
США: Роман (20), Биография (10), Драма (7)&lt;br /&gt;
...&lt;br /&gt;
Аналитические возможности&lt;br /&gt;
Выявление культурных предпочтений&lt;br /&gt;
Программа позволяет обнаруживать:&lt;br /&gt;
•	Предпочтение отечественной литературы в разных странах&lt;br /&gt;
•	Популярность жанров в зависимости от региона&lt;br /&gt;
•	Различия в строгости оценок между странами&lt;br /&gt;
Маркетинговые применения&lt;br /&gt;
•	Определение целевых рынков для перевода книг&lt;br /&gt;
•	Выявление жанров, популярных в конкретных регионах&lt;br /&gt;
•	Понимание восприятия иностранной литературы&lt;br /&gt;
Исследовательский потенциал&lt;br /&gt;
•	Анализ культурного импорта/экспорта литературы&lt;br /&gt;
•	Изучение влияния страны происхождения на оценки&lt;br /&gt;
•	Выявление универсальных vs локальных жанровых предпочтений&lt;br /&gt;
Ограничения&lt;br /&gt;
1.	Требования к данным: необходимо минимум 3 отзыва для анализа по стране&lt;br /&gt;
2.	Жанровый анализ: жанры анализируются только при наличии ≥5 оценок&lt;br /&gt;
3.	Формат данных: строгая зависимость от структуры JSON-файла&lt;br /&gt;
4.	Визуализация: отсутствие графического представления данных&lt;br /&gt;
5.	Экспорт: результаты только выводятся в консоль&lt;br /&gt;
Возможные расширения&lt;br /&gt;
Функциональные улучшения:&lt;br /&gt;
1.	Экспорт результатов в CSV/Excel форматы&lt;br /&gt;
2.	Визуализация данных с помощью matplotlib/plotly&lt;br /&gt;
3.	Веб-интерфейс для интерактивного анализа&lt;br /&gt;
4.	API-доступ к аналитическим функциям&lt;br /&gt;
5.	Расширенная фильтрация по временным периодам&lt;br /&gt;
Аналитические расширения:&lt;br /&gt;
1.	Анализ тональности текстов отзывов&lt;br /&gt;
2.	Корреляционный анализ между жанрами и географией&lt;br /&gt;
3.	Прогнозирование популярности книг в новых регионах&lt;br /&gt;
4.	Кластеризация стран по читательским предпочтениям&lt;br /&gt;
5.	Анализ временных трендов в предпочтениях&lt;br /&gt;
Технические улучшения:&lt;br /&gt;
1.	Кэширование результатов для больших наборов данных&lt;br /&gt;
2.	Инкрементальный анализ при добавлении новых отзывов&lt;br /&gt;
3.	Поддержка нескольких форматов данных (CSV, XML, SQL)&lt;br /&gt;
4.	Многопоточная обработка для больших объёмов данных&lt;br /&gt;
5.	Интеграция с базами данных (SQL, NoSQL)&lt;br /&gt;
Заключение&lt;br /&gt;
Анализатор читательских предпочтений по странам представляет собой эффективный инструмент для первичного анализа географического распределения литературных предпочтений. Благодаря простоте использования и отсутствию внешних зависимостей, программа может быть легко интегрирована в исследовательские проекты или использоваться для предварительного анализа данных в издательском бизнесе.&lt;br /&gt;
 &lt;br /&gt;
Примечание: Для работы программы требуется файл books_reviews.json в рабочей директории с корректной структурой данных.&lt;br /&gt;
&lt;br /&gt;
===Код программы на языке Python===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
from collections import Counter, defaultdict&lt;br /&gt;
&lt;br /&gt;
def analyze_book_reviews(file_path):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Анализ отзывов на книги&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Загружаем данные&lt;br /&gt;
    with open(file_path, &#039;r&#039;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
        data = json.load(f)&lt;br /&gt;
    &lt;br /&gt;
    reviews = data[&#039;reviews&#039;]&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    print(&amp;quot;АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&amp;quot;)&lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    &lt;br /&gt;
    # 1. Общая статистика&lt;br /&gt;
    print(f&amp;quot;\n📊 ОБЩАЯ СТАТИСТИКА:&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего отзывов: {len(reviews)}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран читателей: {len(set(r[&#039;reviewer&#039;][&#039;country&#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран книг: {len(set(r[&#039;country&#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего уникальных жанров: {len(set(g for r in reviews for g in r[&#039;genres&#039;]))}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 2. Средние оценки по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        ratings_by_country[country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству отзывов&lt;br /&gt;
    for country, ratings in sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True):&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} отзывов)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 3. Любимые жанры по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    genres_by_country = defaultdict(Counter)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        genres_by_country[country].update(review[&#039;genres&#039;])&lt;br /&gt;
    &lt;br /&gt;
    # Выводим топ стран по количеству отзывов&lt;br /&gt;
    top_countries = sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True)[:8]&lt;br /&gt;
    &lt;br /&gt;
    for country, _ in top_countries:&lt;br /&gt;
        if country in genres_by_country and genres_by_country[country]:&lt;br /&gt;
            top_genres = genres_by_country[country].most_common(3)&lt;br /&gt;
            genres_str = &amp;quot;, &amp;quot;.join([f&amp;quot;{g} ({c})&amp;quot; for g, c in top_genres])&lt;br /&gt;
            print(f&amp;quot;{country}: {genres_str}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 4. Предпочтения по странам происхождения книг&lt;br /&gt;
    print(f&amp;quot;\n🌍 ПРЕДПОЧТЕНИЯ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # По странам читателей&lt;br /&gt;
    book_country_by_reader_country = defaultdict(lambda: defaultdict(int))&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        book_country_by_reader_country[reader_country][book_country] += 1&lt;br /&gt;
    &lt;br /&gt;
    # Только для стран с достаточным количеством отзывов&lt;br /&gt;
    for reader_country, book_countries in sorted(book_country_by_reader_country.items()):&lt;br /&gt;
        total = sum(book_countries.values())&lt;br /&gt;
        if total &amp;gt;= 3:  # Минимум 3 отзыва для анализа&lt;br /&gt;
            print(f&amp;quot;\n{reader_country} читает книги из:&amp;quot;)&lt;br /&gt;
            for book_country, count in sorted(book_countries.items(), key=lambda x: x[1], reverse=True)[:5]:&lt;br /&gt;
                percentage = (count / total) * 100&lt;br /&gt;
                print(f&amp;quot;  {book_country}: {count} книг ({percentage:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 5. Средние оценки книг по странам происхождения&lt;br /&gt;
    print(f&amp;quot;\n🏆 СРЕДНИЕ ОЦЕНКИ КНИГ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_book_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        ratings_by_book_country[book_country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству книг&lt;br /&gt;
    for country, ratings in sorted(ratings_by_book_country.items(), &lt;br /&gt;
                                   key=lambda x: len(x[1]), &lt;br /&gt;
                                   reverse=True)[:10]:  # Топ-10 стран&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} книг)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 6. Анализ предпочтений: отечественные vs зарубежные книги&lt;br /&gt;
    print(f&amp;quot;\n📖 ОТЕЧЕСТВЕННЫЕ VS ЗАРУБЕЖНЫЕ КНИГИ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    domestic_vs_foreign = defaultdict(lambda: {&#039;domestic&#039;: 0, &#039;foreign&#039;: 0})&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        &lt;br /&gt;
        if reader_country == book_country:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&#039;domestic&#039;] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&#039;foreign&#039;] += 1&lt;br /&gt;
    &lt;br /&gt;
    for country, counts in sorted(domestic_vs_foreign.items()):&lt;br /&gt;
        total = counts[&#039;domestic&#039;] + counts[&#039;foreign&#039;]&lt;br /&gt;
        if total &amp;gt;= 3:  # Только для стран с достаточными данными&lt;br /&gt;
            domestic_pct = (counts[&#039;domestic&#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            foreign_pct = (counts[&#039;foreign&#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            print(f&amp;quot;{country}: {counts[&#039;domestic&#039;]} отечественных ({domestic_pct:.0f}%), &amp;quot;&lt;br /&gt;
                  f&amp;quot;{counts[&#039;foreign&#039;]} зарубежных ({foreign_pct:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 7. Самые популярные жанры в целом&lt;br /&gt;
    print(f&amp;quot;\n🔥 САМЫЕ ПОПУЛЯРНЫЕ ЖАНРЫ В ЦЕЛОМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    all_genres = []&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        all_genres.extend(review[&#039;genres&#039;])&lt;br /&gt;
    &lt;br /&gt;
    genre_counter = Counter(all_genres)&lt;br /&gt;
    total_genre_mentions = sum(genre_counter.values())&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-10 жанров:&amp;quot;)&lt;br /&gt;
    for genre, count in genre_counter.most_common(10):&lt;br /&gt;
        percentage = (count / total_genre_mentions) * 100&lt;br /&gt;
        print(f&amp;quot;  {genre}: {count} упоминаний ({percentage:.1f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 8. Корреляция жанров и оценок&lt;br /&gt;
    print(f&amp;quot;\n📈 СРЕДНИЕ ОЦЕНКИ ПО ЖАНРАМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_genre = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        for genre in review[&#039;genres&#039;]:&lt;br /&gt;
            ratings_by_genre[genre].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Только жанры с минимум 5 оценками&lt;br /&gt;
    filtered_genres = {g: r for g, r in ratings_by_genre.items() if len(r) &amp;gt;= 5}&lt;br /&gt;
    &lt;br /&gt;
    if filtered_genres:&lt;br /&gt;
        for genre, ratings in sorted(filtered_genres.items(), &lt;br /&gt;
                                     key=lambda x: sum(x[1])/len(x[1]), &lt;br /&gt;
                                     reverse=True)[:10]:&lt;br /&gt;
            avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
            print(f&amp;quot;{genre}: {avg_rating:.1f} ({len(ratings)} оценок)&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Недостаточно данных для анализа по жанрам&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 9. Страны-лидеры по количеству книг&lt;br /&gt;
    print(f&amp;quot;\n🌎 СТРАНЫ-ЛИДЕРЫ ПО КОЛИЧЕСТВУ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    book_count_by_country = Counter(review[&#039;country&#039;] for review in reviews)&lt;br /&gt;
    &lt;br /&gt;
    for country, count in book_count_by_country.most_common(5):&lt;br /&gt;
        percentage = (count / len(reviews)) * 100&lt;br /&gt;
        print(f&amp;quot;{country}: {count} книг ({percentage:.1f}% от всех)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 10. Визуализация наиболее продуктивных стран-авторов&lt;br /&gt;
    print(f&amp;quot;\n✍️ САМЫЕ ПРОДУКТИВНЫЕ СТРАНЫ-АВТОРЫ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # Считаем сколько книг из каждой страны&lt;br /&gt;
    country_productivity = Counter()&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country_productivity[review[&#039;country&#039;]] += 1&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-5 стран по количеству упоминаемых книг:&amp;quot;)&lt;br /&gt;
    for country, count in country_productivity.most_common(5):&lt;br /&gt;
        print(f&amp;quot;  {country}: {count} книг&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Основная функция&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    file_path = &amp;quot;books_reviews.json&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    try:&lt;br /&gt;
        analyze_book_reviews(file_path)&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(f&amp;quot;❌ Файл {file_path} не найден!&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;❌ Неожиданная ошибка при анализе: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39329</id>
		<title>Анализ читательских предпочтений по странам</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39329"/>
		<updated>2025-12-19T12:43:18Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: Новая страница: «==Анализатор читательских предпочтений по странам== &amp;#039;&amp;#039;&amp;#039;Анализатор читательских предпочтений по странам&amp;#039;&amp;#039;&amp;#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения ч...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Анализатор читательских предпочтений по странам==&lt;br /&gt;
&#039;&#039;&#039;Анализатор читательских предпочтений по странам&#039;&#039;&#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения читателей и происхождения литературных произведений. Программа выявляет закономерности в читательских предпочтениях, жанровых пристрастиях и оценках книг в зависимости от страны читателя и страны происхождения книги.&lt;br /&gt;
&lt;br /&gt;
===Обзор===&lt;br /&gt;
Анализатор читательских предпочтений представляет собой скрипт на Python, который обрабатывает JSON-файл с отзывами на книги и предоставляет многоуровневую аналитику по географическому распределению читательских предпочтений. Программа использует встроенные библиотеки Python (json, collections) для обработки данных и не требует установки дополнительных зависимостей.&lt;br /&gt;
===Требования к данным===&lt;br /&gt;
====Формат входного файла====&lt;br /&gt;
Программа ожидает файл books_reviews.json со следующей структурой:&lt;br /&gt;
&lt;br /&gt;
json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;rating&amp;quot;: 4.5,&lt;br /&gt;
      &amp;quot;genres&amp;quot;: [&amp;quot;Фэнтези&amp;quot;, &amp;quot;Приключения&amp;quot;],&lt;br /&gt;
      &amp;quot;country&amp;quot;: &amp;quot;США&amp;quot;,&lt;br /&gt;
      &amp;quot;reviewer&amp;quot;: {&lt;br /&gt;
        &amp;quot;country&amp;quot;: &amp;quot;Россия&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Поля данных:===&lt;br /&gt;
*	rating (float): оценка книги (обычно от 1.0 до 5.0)&lt;br /&gt;
*	genres (list): список жанров книги&lt;br /&gt;
*	country (string): страна происхождения книги&lt;br /&gt;
*	reviewer.country (string): страна читателя, оставившего отзыв&lt;br /&gt;
&lt;br /&gt;
===Функциональные возможности===&lt;br /&gt;
1. Общая статистика&lt;br /&gt;
*	Общее количество отзывов&lt;br /&gt;
*	Количество уникальных стран читателей&lt;br /&gt;
*	Количество уникальных стран книг&lt;br /&gt;
*	Количество уникальных жанров&lt;br /&gt;
2. Анализ оценок&lt;br /&gt;
*	Средние оценки по странам читателей (сортировка по количеству отзывов)&lt;br /&gt;
*	Средние оценки книг по странам происхождения (топ-10)&lt;br /&gt;
*	Средние оценки по жанрам (для жанров с ≥5 оценками)&lt;br /&gt;
3. Жанровые предпочтения&lt;br /&gt;
*	Любимые жанры по странам читателей (топ-3 для 8 самых активных стран)&lt;br /&gt;
*	Самые популярные жанры в целом (топ-10)&lt;br /&gt;
*	Корреляция жанров и оценок&lt;br /&gt;
4. Географический анализ&lt;br /&gt;
*	Предпочтения по странам происхождения книг для каждой страны читателей&lt;br /&gt;
*	Соотношение отечественных и зарубежных книг по странам&lt;br /&gt;
*	Страны-лидеры по количеству упоминаемых книг (топ-5)&lt;br /&gt;
*	Самые продуктивные страны-авторы&lt;br /&gt;
===Структура кода===&lt;br /&gt;
====Основная функция: ====&lt;br /&gt;
analyze_book_reviews(file_path)&lt;br /&gt;
Принимает путь к JSON-файлу и выполняет полный анализ данных.&lt;br /&gt;
====Вспомогательные структуры данных:====&lt;br /&gt;
*	ratings_by_country: средние оценки по странам читателей&lt;br /&gt;
*	genres_by_country: счётчики жанров по странам&lt;br /&gt;
*	book_country_by_reader_country: распределение стран книг по странам читателей&lt;br /&gt;
*	ratings_by_book_country: оценки по странам происхождения книг&lt;br /&gt;
*	domestic_vs_foreign: соотношение отечественных/зарубежных книг&lt;br /&gt;
====Алгоритмическая сложность:====&lt;br /&gt;
*	Временная сложность: O(n), где n — количество отзывов&lt;br /&gt;
*	Пространственная сложность: O(k), где k — количество уникальных стран и жанров&lt;br /&gt;
===Использование===&lt;br /&gt;
====Базовое использование:====&lt;br /&gt;
python&lt;br /&gt;
python analyzer.py&lt;br /&gt;
====Интеграция в другие проекты:====&lt;br /&gt;
python&lt;br /&gt;
from analyzer import analyze_book_reviews&lt;br /&gt;
&lt;br /&gt;
====Анализ собственного файла====&lt;br /&gt;
analyze_book_reviews(&amp;quot;path/to/your/reviews.json&amp;quot;)&lt;br /&gt;
====Обработка ошибок:====&lt;br /&gt;
=====Программа включает обработку:=====&lt;br /&gt;
*	Отсутствия файла (FileNotFoundError)&lt;br /&gt;
*	Общих ошибок выполнения (Exception)&lt;br /&gt;
====Пример вывода====&lt;br /&gt;
&lt;br /&gt;
============================================================&lt;br /&gt;
АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;br /&gt;
============================================================&lt;br /&gt;
&lt;br /&gt;
📊 ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего отзывов: 150&lt;br /&gt;
Уникальных стран читателей: 12&lt;br /&gt;
Уникальных стран книг: 8&lt;br /&gt;
Всего уникальных жанров: 25&lt;br /&gt;
&lt;br /&gt;
⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: 4.2 (45 отзывов)&lt;br /&gt;
США: 4.0 (32 отзыва)&lt;br /&gt;
Германия: 4.3 (28 отзывов)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: Фэнтези (15), Детектив (12), Научная фантастика (8)&lt;br /&gt;
США: Роман (20), Биография (10), Драма (7)&lt;br /&gt;
...&lt;br /&gt;
Аналитические возможности&lt;br /&gt;
Выявление культурных предпочтений&lt;br /&gt;
Программа позволяет обнаруживать:&lt;br /&gt;
•	Предпочтение отечественной литературы в разных странах&lt;br /&gt;
•	Популярность жанров в зависимости от региона&lt;br /&gt;
•	Различия в строгости оценок между странами&lt;br /&gt;
Маркетинговые применения&lt;br /&gt;
•	Определение целевых рынков для перевода книг&lt;br /&gt;
•	Выявление жанров, популярных в конкретных регионах&lt;br /&gt;
•	Понимание восприятия иностранной литературы&lt;br /&gt;
Исследовательский потенциал&lt;br /&gt;
•	Анализ культурного импорта/экспорта литературы&lt;br /&gt;
•	Изучение влияния страны происхождения на оценки&lt;br /&gt;
•	Выявление универсальных vs локальных жанровых предпочтений&lt;br /&gt;
Ограничения&lt;br /&gt;
1.	Требования к данным: необходимо минимум 3 отзыва для анализа по стране&lt;br /&gt;
2.	Жанровый анализ: жанры анализируются только при наличии ≥5 оценок&lt;br /&gt;
3.	Формат данных: строгая зависимость от структуры JSON-файла&lt;br /&gt;
4.	Визуализация: отсутствие графического представления данных&lt;br /&gt;
5.	Экспорт: результаты только выводятся в консоль&lt;br /&gt;
Возможные расширения&lt;br /&gt;
Функциональные улучшения:&lt;br /&gt;
1.	Экспорт результатов в CSV/Excel форматы&lt;br /&gt;
2.	Визуализация данных с помощью matplotlib/plotly&lt;br /&gt;
3.	Веб-интерфейс для интерактивного анализа&lt;br /&gt;
4.	API-доступ к аналитическим функциям&lt;br /&gt;
5.	Расширенная фильтрация по временным периодам&lt;br /&gt;
Аналитические расширения:&lt;br /&gt;
1.	Анализ тональности текстов отзывов&lt;br /&gt;
2.	Корреляционный анализ между жанрами и географией&lt;br /&gt;
3.	Прогнозирование популярности книг в новых регионах&lt;br /&gt;
4.	Кластеризация стран по читательским предпочтениям&lt;br /&gt;
5.	Анализ временных трендов в предпочтениях&lt;br /&gt;
Технические улучшения:&lt;br /&gt;
1.	Кэширование результатов для больших наборов данных&lt;br /&gt;
2.	Инкрементальный анализ при добавлении новых отзывов&lt;br /&gt;
3.	Поддержка нескольких форматов данных (CSV, XML, SQL)&lt;br /&gt;
4.	Многопоточная обработка для больших объёмов данных&lt;br /&gt;
5.	Интеграция с базами данных (SQL, NoSQL)&lt;br /&gt;
Заключение&lt;br /&gt;
Анализатор читательских предпочтений по странам представляет собой эффективный инструмент для первичного анализа географического распределения литературных предпочтений. Благодаря простоте использования и отсутствию внешних зависимостей, программа может быть легко интегрирована в исследовательские проекты или использоваться для предварительного анализа данных в издательском бизнесе.&lt;br /&gt;
 &lt;br /&gt;
Примечание: Для работы программы требуется файл books_reviews.json в рабочей директории с корректной структурой данных.&lt;br /&gt;
&lt;br /&gt;
===Код программы на языке Python===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
from collections import Counter, defaultdict&lt;br /&gt;
&lt;br /&gt;
def analyze_book_reviews(file_path):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Анализ отзывов на книги&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Загружаем данные&lt;br /&gt;
    with open(file_path, &#039;r&#039;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
        data = json.load(f)&lt;br /&gt;
    &lt;br /&gt;
    reviews = data[&#039;reviews&#039;]&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    print(&amp;quot;АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&amp;quot;)&lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    &lt;br /&gt;
    # 1. Общая статистика&lt;br /&gt;
    print(f&amp;quot;\n📊 ОБЩАЯ СТАТИСТИКА:&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего отзывов: {len(reviews)}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран читателей: {len(set(r[&#039;reviewer&#039;][&#039;country&#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран книг: {len(set(r[&#039;country&#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего уникальных жанров: {len(set(g for r in reviews for g in r[&#039;genres&#039;]))}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 2. Средние оценки по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        ratings_by_country[country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству отзывов&lt;br /&gt;
    for country, ratings in sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True):&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} отзывов)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 3. Любимые жанры по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    genres_by_country = defaultdict(Counter)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        genres_by_country[country].update(review[&#039;genres&#039;])&lt;br /&gt;
    &lt;br /&gt;
    # Выводим топ стран по количеству отзывов&lt;br /&gt;
    top_countries = sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True)[:8]&lt;br /&gt;
    &lt;br /&gt;
    for country, _ in top_countries:&lt;br /&gt;
        if country in genres_by_country and genres_by_country[country]:&lt;br /&gt;
            top_genres = genres_by_country[country].most_common(3)&lt;br /&gt;
            genres_str = &amp;quot;, &amp;quot;.join([f&amp;quot;{g} ({c})&amp;quot; for g, c in top_genres])&lt;br /&gt;
            print(f&amp;quot;{country}: {genres_str}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 4. Предпочтения по странам происхождения книг&lt;br /&gt;
    print(f&amp;quot;\n🌍 ПРЕДПОЧТЕНИЯ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # По странам читателей&lt;br /&gt;
    book_country_by_reader_country = defaultdict(lambda: defaultdict(int))&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        book_country_by_reader_country[reader_country][book_country] += 1&lt;br /&gt;
    &lt;br /&gt;
    # Только для стран с достаточным количеством отзывов&lt;br /&gt;
    for reader_country, book_countries in sorted(book_country_by_reader_country.items()):&lt;br /&gt;
        total = sum(book_countries.values())&lt;br /&gt;
        if total &amp;gt;= 3:  # Минимум 3 отзыва для анализа&lt;br /&gt;
            print(f&amp;quot;\n{reader_country} читает книги из:&amp;quot;)&lt;br /&gt;
            for book_country, count in sorted(book_countries.items(), key=lambda x: x[1], reverse=True)[:5]:&lt;br /&gt;
                percentage = (count / total) * 100&lt;br /&gt;
                print(f&amp;quot;  {book_country}: {count} книг ({percentage:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 5. Средние оценки книг по странам происхождения&lt;br /&gt;
    print(f&amp;quot;\n🏆 СРЕДНИЕ ОЦЕНКИ КНИГ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_book_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        ratings_by_book_country[book_country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству книг&lt;br /&gt;
    for country, ratings in sorted(ratings_by_book_country.items(), &lt;br /&gt;
                                   key=lambda x: len(x[1]), &lt;br /&gt;
                                   reverse=True)[:10]:  # Топ-10 стран&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} книг)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 6. Анализ предпочтений: отечественные vs зарубежные книги&lt;br /&gt;
    print(f&amp;quot;\n📖 ОТЕЧЕСТВЕННЫЕ VS ЗАРУБЕЖНЫЕ КНИГИ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    domestic_vs_foreign = defaultdict(lambda: {&#039;domestic&#039;: 0, &#039;foreign&#039;: 0})&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&#039;reviewer&#039;][&#039;country&#039;]&lt;br /&gt;
        book_country = review[&#039;country&#039;]&lt;br /&gt;
        &lt;br /&gt;
        if reader_country == book_country:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&#039;domestic&#039;] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&#039;foreign&#039;] += 1&lt;br /&gt;
    &lt;br /&gt;
    for country, counts in sorted(domestic_vs_foreign.items()):&lt;br /&gt;
        total = counts[&#039;domestic&#039;] + counts[&#039;foreign&#039;]&lt;br /&gt;
        if total &amp;gt;= 3:  # Только для стран с достаточными данными&lt;br /&gt;
            domestic_pct = (counts[&#039;domestic&#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            foreign_pct = (counts[&#039;foreign&#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            print(f&amp;quot;{country}: {counts[&#039;domestic&#039;]} отечественных ({domestic_pct:.0f}%), &amp;quot;&lt;br /&gt;
                  f&amp;quot;{counts[&#039;foreign&#039;]} зарубежных ({foreign_pct:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 7. Самые популярные жанры в целом&lt;br /&gt;
    print(f&amp;quot;\n🔥 САМЫЕ ПОПУЛЯРНЫЕ ЖАНРЫ В ЦЕЛОМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    all_genres = []&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        all_genres.extend(review[&#039;genres&#039;])&lt;br /&gt;
    &lt;br /&gt;
    genre_counter = Counter(all_genres)&lt;br /&gt;
    total_genre_mentions = sum(genre_counter.values())&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-10 жанров:&amp;quot;)&lt;br /&gt;
    for genre, count in genre_counter.most_common(10):&lt;br /&gt;
        percentage = (count / total_genre_mentions) * 100&lt;br /&gt;
        print(f&amp;quot;  {genre}: {count} упоминаний ({percentage:.1f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 8. Корреляция жанров и оценок&lt;br /&gt;
    print(f&amp;quot;\n📈 СРЕДНИЕ ОЦЕНКИ ПО ЖАНРАМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_genre = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        rating = review[&#039;rating&#039;]&lt;br /&gt;
        for genre in review[&#039;genres&#039;]:&lt;br /&gt;
            ratings_by_genre[genre].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Только жанры с минимум 5 оценками&lt;br /&gt;
    filtered_genres = {g: r for g, r in ratings_by_genre.items() if len(r) &amp;gt;= 5}&lt;br /&gt;
    &lt;br /&gt;
    if filtered_genres:&lt;br /&gt;
        for genre, ratings in sorted(filtered_genres.items(), &lt;br /&gt;
                                     key=lambda x: sum(x[1])/len(x[1]), &lt;br /&gt;
                                     reverse=True)[:10]:&lt;br /&gt;
            avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
            print(f&amp;quot;{genre}: {avg_rating:.1f} ({len(ratings)} оценок)&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Недостаточно данных для анализа по жанрам&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 9. Страны-лидеры по количеству книг&lt;br /&gt;
    print(f&amp;quot;\n🌎 СТРАНЫ-ЛИДЕРЫ ПО КОЛИЧЕСТВУ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    book_count_by_country = Counter(review[&#039;country&#039;] for review in reviews)&lt;br /&gt;
    &lt;br /&gt;
    for country, count in book_count_by_country.most_common(5):&lt;br /&gt;
        percentage = (count / len(reviews)) * 100&lt;br /&gt;
        print(f&amp;quot;{country}: {count} книг ({percentage:.1f}% от всех)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 10. Визуализация наиболее продуктивных стран-авторов&lt;br /&gt;
    print(f&amp;quot;\n✍️ САМЫЕ ПРОДУКТИВНЫЕ СТРАНЫ-АВТОРЫ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # Считаем сколько книг из каждой страны&lt;br /&gt;
    country_productivity = Counter()&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country_productivity[review[&#039;country&#039;]] += 1&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-5 стран по количеству упоминаемых книг:&amp;quot;)&lt;br /&gt;
    for country, count in country_productivity.most_common(5):&lt;br /&gt;
        print(f&amp;quot;  {country}: {count} книг&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Основная функция&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    file_path = &amp;quot;books_reviews.json&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    try:&lt;br /&gt;
        analyze_book_reviews(file_path)&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(f&amp;quot;❌ Файл {file_path} не найден!&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;❌ Неожиданная ошибка при анализе: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=39319</id>
		<title>Участник:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=39319"/>
		<updated>2025-12-19T12:20:25Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Экономика, Урбанистика, Музыка&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Английский язык&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Анализ читательских предпочтений по странам&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:UserMGPU]]&lt;br /&gt;
[[Категория:ИНФА-221]]&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38545</id>
		<title>Обсуждение участника:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38545"/>
		<updated>2025-12-17T11:51:06Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: /* АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ */ новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Статьи об искусстве ==&lt;br /&gt;
&lt;br /&gt;
======================================================================&lt;br /&gt;
АНАЛИЗ СТАТЕЙ ВИКИПЕДИИ ОБ ИСКУССТВЕ&lt;br /&gt;
======================================================================&lt;br /&gt;
&lt;br /&gt;
ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего проанализировано статей: 300&lt;br /&gt;
Среднее количество слов в статье: 1314.5&lt;br /&gt;
&lt;br /&gt;
РАСПРЕДЕЛЕНИЕ ПО ТЕМАТИКАМ:&lt;br /&gt;
  другое: 280 статей (93.3%)&lt;br /&gt;
  кино: 3 статей (1.0%)&lt;br /&gt;
  изобразительное: 17 статей (5.7%)&lt;br /&gt;
&lt;br /&gt;
КАЧЕСТВО СТАТЕЙ:&lt;br /&gt;
  Отличная: 22 статей (7.3%)&lt;br /&gt;
  Средняя: 84 статей (28.0%)&lt;br /&gt;
  Хорошая: 151 статей (50.3%)&lt;br /&gt;
  Базовая: 43 статей (14.3%)&lt;br /&gt;
&lt;br /&gt;
ТОП-10 КЛЮЧЕВЫХ СЛОВ:&lt;br /&gt;
  искусства: 1820 упоминаний&lt;br /&gt;
  искусство: 1422 упоминаний&lt;br /&gt;
  году: 1158 упоминаний&lt;br /&gt;
  живописи: 1007 упоминаний&lt;br /&gt;
  века: 945 упоминаний&lt;br /&gt;
  также: 926 упоминаний&lt;br /&gt;
  были: 820 упоминаний&lt;br /&gt;
  скульптуры: 611 упоминаний&lt;br /&gt;
  была: 589 упоминаний&lt;br /&gt;
  живопись: 579 упоминаний&lt;br /&gt;
&lt;br /&gt;
ТОП-5 ЛУЧШИХ СТАТЕЙ:&lt;br /&gt;
1. Искусство&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
2. Конструктивизм (искусство)&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
3. Театр&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
4. Возрождение&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
5. Искусство Китая&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
======================================================================&lt;br /&gt;
ДЕТАЛЬНЫЙ АНАЛИЗ ПЕРВЫХ 3 СТАТЕЙ:&lt;br /&gt;
======================================================================&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 1: Искусство&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE&lt;br /&gt;
Уровень: Отличная&lt;br /&gt;
Оценка качества: 80.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 4911&lt;br /&gt;
Количество разделов: 12&lt;br /&gt;
Ключевые слова искусства: художник, произведение, искусство, музей, творчество&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 2: Актёрское искусство&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%90%D0%BA%D1%82%D1%91%D1%80%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE&lt;br /&gt;
Уровень: Средняя&lt;br /&gt;
Оценка качества: 50.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 214&lt;br /&gt;
Количество разделов: 6&lt;br /&gt;
Ключевые слова искусства: литература&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 3: Искусство для искусства&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%B4%D0%BB%D1%8F_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B0&lt;br /&gt;
Уровень: Хорошая&lt;br /&gt;
Оценка качества: 70.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 600&lt;br /&gt;
Количество разделов: 5&lt;br /&gt;
Ключевые слова искусства: художник, произведение, искусство, выставка, стиль&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
== АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ ==&lt;br /&gt;
&lt;br /&gt;
============================================================&lt;br /&gt;
АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;br /&gt;
============================================================&lt;br /&gt;
&lt;br /&gt;
ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего отзывов: 113&lt;br /&gt;
Уникальных стран читателей: 12&lt;br /&gt;
Уникальных стран книг: 14&lt;br /&gt;
Всего уникальных жанров: 43&lt;br /&gt;
&lt;br /&gt;
СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Великобритания: 8.7 (26 отзывов)&lt;br /&gt;
США: 8.6 (25 отзывов)&lt;br /&gt;
Россия: 8.6 (22 отзывов)&lt;br /&gt;
Испания: 8.8 (19 отзывов)&lt;br /&gt;
Франция: 8.4 (9 отзывов)&lt;br /&gt;
Новая Зеландия: 9.2 (4 отзывов)&lt;br /&gt;
Германия: 8.5 (2 отзывов)&lt;br /&gt;
Италия: 8.5 (2 отзывов)&lt;br /&gt;
Австралия: 8.0 (1 отзывов)&lt;br /&gt;
Япония: 8.0 (1 отзывов)&lt;br /&gt;
Канада: 9.0 (1 отзывов)&lt;br /&gt;
Швеция: 9.0 (1 отзывов)&lt;br /&gt;
&lt;br /&gt;
ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Великобритания: классика (10), приключения (9), фэнтези (7)&lt;br /&gt;
США: приключения (8), классика (7), фэнтези (6)&lt;br /&gt;
Россия: классика (10), драма (10), приключения (4)&lt;br /&gt;
Испания: классика (11), драма (5), психологическая драма (4)&lt;br /&gt;
Франция: драма (4), приключения (3), роман (2)&lt;br /&gt;
Новая Зеландия: драма (2), триллер (1), мистика (1)&lt;br /&gt;
Германия: детектив (1), мистика (1), военная драма (1)&lt;br /&gt;
Италия: приключения (1), мистика (1), классика (1)&lt;br /&gt;
&lt;br /&gt;
ПРЕДПОЧТЕНИЯ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ КНИГ:&lt;br /&gt;
&lt;br /&gt;
Великобритания читает книги из:&lt;br /&gt;
  Великобритания: 12 книг (46%)&lt;br /&gt;
  США: 8 книг (31%)&lt;br /&gt;
  Франция: 2 книг (8%)&lt;br /&gt;
  Россия: 2 книг (8%)&lt;br /&gt;
  Колумбия: 1 книг (4%)&lt;br /&gt;
&lt;br /&gt;
Испания читает книги из:&lt;br /&gt;
  США: 6 книг (32%)&lt;br /&gt;
  Россия: 3 книг (16%)&lt;br /&gt;
  Германия: 2 книг (11%)&lt;br /&gt;
  Италия: 2 книг (11%)&lt;br /&gt;
  Испания: 1 книг (5%)&lt;br /&gt;
&lt;br /&gt;
Новая Зеландия читает книги из:&lt;br /&gt;
  Россия: 3 книг (75%)&lt;br /&gt;
  США: 1 книг (25%)&lt;br /&gt;
&lt;br /&gt;
Россия читает книги из:&lt;br /&gt;
  США: 9 книг (41%)&lt;br /&gt;
  Россия: 9 книг (41%)&lt;br /&gt;
  Германия: 2 книг (9%)&lt;br /&gt;
  Великобритания: 1 книг (5%)&lt;br /&gt;
  Франция: 1 книг (5%)&lt;br /&gt;
&lt;br /&gt;
США читает книги из:&lt;br /&gt;
  США: 21 книг (84%)&lt;br /&gt;
  Великобритания: 3 книг (12%)&lt;br /&gt;
  Колумбия: 1 книг (4%)&lt;br /&gt;
&lt;br /&gt;
Франция читает книги из:&lt;br /&gt;
  Франция: 4 книг (44%)&lt;br /&gt;
  США: 3 книг (33%)&lt;br /&gt;
  Россия: 1 книг (11%)&lt;br /&gt;
  Германия: 1 книг (11%)&lt;br /&gt;
&lt;br /&gt;
СРЕДНИЕ ОЦЕНКИ КНИГ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ:&lt;br /&gt;
США: 8.6 (48 книг)&lt;br /&gt;
Россия: 8.7 (18 книг)&lt;br /&gt;
Великобритания: 9.0 (17 книг)&lt;br /&gt;
Франция: 8.4 (8 книг)&lt;br /&gt;
Германия: 8.5 (8 книг)&lt;br /&gt;
Италия: 8.2 (4 книг)&lt;br /&gt;
Колумбия: 9.5 (2 книг)&lt;br /&gt;
Швеция: 9.0 (2 книг)&lt;br /&gt;
Австралия: 8.0 (1 книг)&lt;br /&gt;
Испания: 8.0 (1 книг)&lt;br /&gt;
&lt;br /&gt;
ОТЕЧЕСТВЕННЫЕ VS ЗАРУБЕЖНЫЕ КНИГИ:&lt;br /&gt;
Великобритания: 12 отечественных (46%), 14 зарубежных (54%)&lt;br /&gt;
Испания: 1 отечественных (5%), 18 зарубежных (95%)&lt;br /&gt;
Новая Зеландия: 0 отечественных (0%), 4 зарубежных (100%)&lt;br /&gt;
Россия: 9 отечественных (41%), 13 зарубежных (59%)&lt;br /&gt;
США: 21 отечественных (84%), 4 зарубежных (16%)&lt;br /&gt;
Франция: 4 отечественных (44%), 5 зарубежных (56%)&lt;br /&gt;
&lt;br /&gt;
САМЫЕ ПОПУЛЯРНЫЕ ЖАНРЫ В ЦЕЛОМ:&lt;br /&gt;
Топ-10 жанров:&lt;br /&gt;
  классика: 43 упоминаний (18.9%)&lt;br /&gt;
  приключения: 30 упоминаний (13.2%)&lt;br /&gt;
  драма: 28 упоминаний (12.3%)&lt;br /&gt;
  фэнтези: 18 упоминаний (7.9%)&lt;br /&gt;
  роман: 10 упоминаний (4.4%)&lt;br /&gt;
  психологическая драма: 8 упоминаний (3.5%)&lt;br /&gt;
  триллер: 7 упоминаний (3.1%)&lt;br /&gt;
  мистика: 6 упоминаний (2.6%)&lt;br /&gt;
  дистопия: 5 упоминаний (2.2%)&lt;br /&gt;
  психологический роман: 5 упоминаний (2.2%)&lt;br /&gt;
&lt;br /&gt;
📈 СРЕДНИЕ ОЦЕНКИ ПО ЖАНРАМ:&lt;br /&gt;
дистопия: 9.4 (5 оценок)&lt;br /&gt;
психологический роман: 9.2 (5 оценок)&lt;br /&gt;
фантастика: 9.2 (5 оценок)&lt;br /&gt;
фэнтези: 8.9 (18 оценок)&lt;br /&gt;
психологическая драма: 8.9 (8 оценок)&lt;br /&gt;
классика: 8.9 (43 оценок)&lt;br /&gt;
триллер: 8.7 (7 оценок)&lt;br /&gt;
приключения: 8.6 (30 оценок)&lt;br /&gt;
драма: 8.6 (28 оценок)&lt;br /&gt;
роман: 8.5 (10 оценок)&lt;br /&gt;
&lt;br /&gt;
СТРАНЫ-ЛИДЕРЫ ПО КОЛИЧЕСТВУ КНИГ:&lt;br /&gt;
США: 48 книг (42.5% от всех)&lt;br /&gt;
Россия: 18 книг (15.9% от всех)&lt;br /&gt;
Великобритания: 17 книг (15.0% от всех)&lt;br /&gt;
Франция: 8 книг (7.1% от всех)&lt;br /&gt;
Германия: 8 книг (7.1% от всех)&lt;br /&gt;
&lt;br /&gt;
САМЫЕ ПРОДУКТИВНЫЕ СТРАНЫ-АВТОРЫ:&lt;br /&gt;
Топ-5 стран по количеству упоминаемых книг:&lt;br /&gt;
  США: 48 книг&lt;br /&gt;
  Россия: 18 книг&lt;br /&gt;
  Великобритания: 17 книг&lt;br /&gt;
  Франция: 8 книг&lt;br /&gt;
  Германия: 8 книг&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38515</id>
		<title>Обсуждение участника:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38515"/>
		<updated>2025-12-17T11:30:44Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: /* Статьи об искусстве */ новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Статьи об искусстве ==&lt;br /&gt;
&lt;br /&gt;
======================================================================&lt;br /&gt;
АНАЛИЗ СТАТЕЙ ВИКИПЕДИИ ОБ ИСКУССТВЕ&lt;br /&gt;
======================================================================&lt;br /&gt;
&lt;br /&gt;
ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего проанализировано статей: 300&lt;br /&gt;
Среднее количество слов в статье: 1314.5&lt;br /&gt;
&lt;br /&gt;
РАСПРЕДЕЛЕНИЕ ПО ТЕМАТИКАМ:&lt;br /&gt;
  другое: 280 статей (93.3%)&lt;br /&gt;
  кино: 3 статей (1.0%)&lt;br /&gt;
  изобразительное: 17 статей (5.7%)&lt;br /&gt;
&lt;br /&gt;
КАЧЕСТВО СТАТЕЙ:&lt;br /&gt;
  Отличная: 22 статей (7.3%)&lt;br /&gt;
  Средняя: 84 статей (28.0%)&lt;br /&gt;
  Хорошая: 151 статей (50.3%)&lt;br /&gt;
  Базовая: 43 статей (14.3%)&lt;br /&gt;
&lt;br /&gt;
ТОП-10 КЛЮЧЕВЫХ СЛОВ:&lt;br /&gt;
  искусства: 1820 упоминаний&lt;br /&gt;
  искусство: 1422 упоминаний&lt;br /&gt;
  году: 1158 упоминаний&lt;br /&gt;
  живописи: 1007 упоминаний&lt;br /&gt;
  века: 945 упоминаний&lt;br /&gt;
  также: 926 упоминаний&lt;br /&gt;
  были: 820 упоминаний&lt;br /&gt;
  скульптуры: 611 упоминаний&lt;br /&gt;
  была: 589 упоминаний&lt;br /&gt;
  живопись: 579 упоминаний&lt;br /&gt;
&lt;br /&gt;
ТОП-5 ЛУЧШИХ СТАТЕЙ:&lt;br /&gt;
1. Искусство&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
2. Конструктивизм (искусство)&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
3. Театр&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
4. Возрождение&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
5. Искусство Китая&lt;br /&gt;
   Оценка: 80.0% | Уровень: Отличная | Тема: другое&lt;br /&gt;
&lt;br /&gt;
======================================================================&lt;br /&gt;
ДЕТАЛЬНЫЙ АНАЛИЗ ПЕРВЫХ 3 СТАТЕЙ:&lt;br /&gt;
======================================================================&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 1: Искусство&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE&lt;br /&gt;
Уровень: Отличная&lt;br /&gt;
Оценка качества: 80.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 4911&lt;br /&gt;
Количество разделов: 12&lt;br /&gt;
Ключевые слова искусства: художник, произведение, искусство, музей, творчество&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 2: Актёрское искусство&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%90%D0%BA%D1%82%D1%91%D1%80%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE&lt;br /&gt;
Уровень: Средняя&lt;br /&gt;
Оценка качества: 50.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 214&lt;br /&gt;
Количество разделов: 6&lt;br /&gt;
Ключевые слова искусства: литература&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
СТАТЬЯ 3: Искусство для искусства&lt;br /&gt;
URL: https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%B4%D0%BB%D1%8F_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B0&lt;br /&gt;
Уровень: Хорошая&lt;br /&gt;
Оценка качества: 70.0%&lt;br /&gt;
Основная тема: другое&lt;br /&gt;
Количество слов: 600&lt;br /&gt;
Количество разделов: 5&lt;br /&gt;
Ключевые слова искусства: художник, произведение, искусство, выставка, стиль&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38489</id>
		<title>Участник:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38489"/>
		<updated>2025-12-17T10:17:40Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Экономика, Урбанистика, Музыка&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Английский язык&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:UserMGPU]]&lt;br /&gt;
[[Категория:ИНФА-221]]&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38488</id>
		<title>Участник:Петрова Ульяна</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B0_%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%B0&amp;diff=38488"/>
		<updated>2025-12-17T10:17:21Z</updated>

		<summary type="html">&lt;p&gt;Петрова Ульяна: Новая страница: «Категория:UserMGPU Категория:ИНФА-221»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:UserMGPU]]&lt;br /&gt;
[[Категория:ИНФА-221]]&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
</feed>