library(tidyverse)
library(tidytext)
library(tokenizers)
library(udpipe)
library(RColorBrewer)
library(wordcloud)
library(philentropy)
library(irlba)
library(uwot)
Отражение России в японских сми
Изучение редакционных статей (сясэцу) 4 крупнейших японских газет-медиахолдингов
Крупнейшие японские газеты
Японские газеты - один из самых популярных по сей день источник информации в жизни японцев. Они их обожают и потому издают на разных уровнях: есть газеты префектур, газеты уездов, газеты населенных пунктов. Даже в каждой школе существует собственный газетный кружок юных журналистов, выпускающий “боевой листок” о важнейших событиях в жизни школы. Несмотря на такую популярность только 5 газет распространяются на всю Японию, их ещё называют “национальные”.
Первые газеты появились в Японии ещё в XVII веке, что было связано с распространением печатного станка и удешевлением производства печатной продукции. Однако современные газеты, в том числе система “национальных” газет, возникли в эпоху Мэйдзи (1868-1912), когда японцы активно заимствовали европейскую культуру.
На данный момент список общенациональных газет выглядит так:
- Асахи симбун . “朝日新聞” переводится как “утреннее солнце”
- Ёмиури симбун . “読売新聞” переводится дословно как “газета-газета”. Первые два иероглифа традиционное японское наименование газет (читай-покупай), последние два - японизированный вариант слова “news” (новые вести).
- Майнити симбун . “毎日新聞” переводится как “каждый день”.
- Никкэй симбун . “日経新聞” от “日本経済”, т.е. “японская экономика”
- Санкэй симбун . “産経新聞” от “生産経済” (“промышленность и экономика”)
Совокупный тираж этих 5 японских газет превышает 16 млн копий!!!
Постановка задачи
СМИ играют центральную роль в формировании общественного мнения, выступая, с одной стороны, как ретранслятор определенных идей, с другой, как создатель медийного образа того или иного события, персоналии и т.п. В своем исследовании я хочу в первом приближении рассмотреть образ России в японских сми в 2024 году на материалах редакционных статей
Японское авторское право (много слёз и пота). Сбор данных.
Японское авторское право - одно из самых жёстких в мире. В интернете почти невозможно найти чужую интеллектуальную собственность в бесплатном доступе. Для нас, цифровых гуманитариев, это печально. Огромный массив актуальных данных не доступен для веб-скраппинга. Японские газеты - неисключение. К сожалению, весомая часть новостных сводок стоит денег. И дело не только в цене - для россиян нет возможности оплатить подписку на сервисы. Поэтому получилось собрать данных не так много, как хотелось. Архивы, к нашему исследовательскому несчастью, также недоступны.
В отличие от новостных сводок и рубрик редакционные статьи (сясэцу, “社説”) - бесплатно размещены на онлайн-ресурсах крупных газет. Редакционные статьи - особый жанр японской периодики. Во-первых, они относительно анонимны. Автор каждой такой статьи - редакция, и ответственность за неё несёт вся редакция. Во-вторых, язык сясэцу по сравнению с другими материалами более резкий. Используются конструкции “призывающие”, “советующие”, “настаивающие” (“хотелось бы”, “следует”, “необходимо”, “важно”, “должно” и т.п.). В-третьих, это субъективное мнение по важным для Японии событиям. Тон не нейтральный. Автор занимает всегда определённую позицию.
Сбор редакционных статей проходил полуавтоматически-полувручную. Объясняю. Японские сайты - это беда. Точка. Изначально я собирался собрать отдельно ссылки и по ним при помощи тегов вытащить текст. Бесполезно. Теги везде разные. Текст в разных тегах. Один абзац в одном месте, другой - в другом. Между ними под 100 строчек кода. Функцию не напишешь. По сути, задачка со звёздочкой. Сам решить не смог. Поэтому единственным выходом, чтоб не терять времени, стал сбор статей, используя систему внутреннего поиска на сайтах. В одном случае (газета Ёмиури) шёл по ключевым словам. Особенность их сайта - любое упоминание страны в тексте статьи автоматически генерирует соответствущее ключевое слово. В других случаях (Асахи, Майнити, Никкэй) поиск искал название страны непосредственно в текстах статей.
По ключевому слову | В тексте |
---|---|
Ёмиури | Асахи |
- | Майнити |
- | Никкэй |
В итоге, был создан датасет с 365 редакционными статьями о России 4 газет (Асахи, Ёмиури, Майнити, Никкэй). Его можно скачать по ссылке из моего репозитория на гитхабе.
Ход работы
Начало работы
Для корректной работы с кодом нужно подгрузить следующие необходимые для исследования библиотеки
Загружаем датасет
Скачиваем датасет в формате csv по ссылке выше. Будьте внимательны! Указывайте директорию, где лежит файл!
При загрузке можно увидеть появление нескольких лишних строк с NA. Они, скорее всего, возникли из-за ошибок форматирования. Убираем их функцией drop_na().
<- read_csv("./Editorials-about-Russia-2024.csv")
edits
<- edits %>%
edits drop_na()
Первый анализ
На данном этапе можно провести первый анализ. В скольких заголовках фигурирует Россия. Для этого воспользуемся функцией str_detect() и суммируем значения TRUE. В качестве паттерна задаём ロシア|露|モスクワ|プーチン, где “ロシア” - “Россия”, “露” - иероглиф “Роса”, “Россия”, “モスクワ” - “Москва”, “プーチン” - “Путин”.
Здесь мне могут возразить. Нужно добавить ещё знак “ロ”. Им также часто обозначают Россию. Однако, не стоит забывать, что это ещё иероглиф “рот”, слог “ро”. Мы получим больше шума, чем адекватного результата. К тому же, в газетах, скорее используют официальный “露”, чем “ロ”.
<- edits %>%
titles select(title) %>%
sapply(as.character)
sum(str_detect(titles, "ロシア|露|モスクワ|プーチン"))
[1] 60
60 заголовков из 365 связаны с Россией. 1/6 часть. Другими словами, большая часть статей написана по другим поводам, но Россия так или иначе фигурирует в самом тексте.
Рассмотрим также, какой из идеографических вариантов представления России чаще фигурирует в заголовках. Создаём тиббл.
<- titles %>%
title_rus str_extract("ロシア|露|モスクワ|プーチン") %>%
as.tibble() %>%
drop_na()
Строим столбчатую диаграмму.
%>%
title_rus ggplot(aes(value, fill = value)) +
geom_bar(show.legend = FALSE) +
coord_flip() +
xlab(NULL) +
ylab(NULL)
Самый популярный вариант - “ロシア”. Второй по популярности - сокращение названия до одного иероглифа “露”. Такую высокую распространненость этого варианта можно объяснить тем, что один иероглиф занимает меньше места на бумаге и экономит пространство. Издатели часто сокращают, когда заголовок выходит слишком объемным.
Аннотируем текст
В японском языке у частей речи мало грамматических категорий, и форм слов соответственно тоже. Поэтому лемматизация не так важна, сколько аннотирование. Аннотирование делит текст на отдельные части речи, оставляя как бы смыслоразличительный “корень слова” и отбрасывая падежные показатели и небольшой процент показателей числа (в большинстве случаев их вообще нет) в отдельные категории. С аннотированным текстом легче работать.
Для R в проекте Universal Dependencies существует лишь одна модель современного японского языка (japanese_gsd). Она обучена на материалах, доступных в японской версии гугл. Поскольку мы работаем с самым актуальным текстом, широко распространенным в интернете, эта модель нам подходит. Художественную литературу он уже не понимает.
Ставим trace = TRUE, чтобы видеть, как проходит процесс аннотации.
Думаю, что у многих не установлена модель японского, поэтому прописываю в коде установку:)
udpipe_download_model(language = "japanese-gsd")
<- udpipe_load_model(file = "japanese-gsd-ud-2.5-191206.udpipe")
japanese_gsd <- udpipe_annotate(japanese_gsd, edits$text, trace = TRUE) edit_annotate
Превращаем полученный результат в тиббл
<- as.tibble(edit_annotate) edit_pos
Чистим данные
Для анализа нам не нужну знаки пунктуации. Удаляем их. Аналогично поступаем с paragraph_id.
<- edit_pos%>%
edit_pos select(-paragraph_id) %>%
filter(upos != 'PUNCT')
Убираем стоп-слова. Берём существующие модели и создаем отдельный список со словами, которые в газетных текстах, по сути, тоже являются стоп-словами, но в готовом решении их нет. “氏” - “господин”, добавляется к фамилии человека. “年” - “год”. “目” - “глаз”, но в газетных статьях “раз” при порядковом счёте. “以上” - “свыше”. “間” - “промежуток”, “длительность” при обозначении периода. “ため” - “польза”, но здесь как предлог “для”.
<- c(stopwords::stopwords("ja", source = "marimo"),
stop_words ::stopwords("ja", source = "stopwords-iso"))
stopwords
<- c("氏", "年", "目", "以上", "
other 間", "ため")
<- edit_pos %>%
edit_tidy filter(!token %in% stop_words) %>%
filter(!token %in% other)
Самые частотные существительные в статьях
Строим облако слов.
<- edit_tidy %>%
edit_nouns filter(upos %in% c("NOUN")) |>
select(doc_id, lemma)
<- RColorBrewer::brewer.pal(8, "Dark2")
pal
<- edit_nouns %>%
nouns count(lemma) %>%
arrange(-n)
<- wordcloud(nouns$lemma, nouns$n, colors = pal, max.words = 100,
nouns_wc rot.per = 0)
Самое частотное существительное “国際” (международные отношения). Это, в принципе, объяснимо. Основная тематика статей о других странах - внешняя политика, крупные международные события. В контексте России примечательно широкое упоминание “核” (“ядро”; в данном смысле атомное), “危機” (“опасность”, “кризис”), “ミサイル” (“боеголовка”), “安定” (“безопасность” в смысле “стабильность”). Япония с времён Холодной войны привыкла мыслить себя в кольце врагов (СССР=Россия, КНР, КНДР), и поэтому население сильно переживает о безопасности в Азиатско-тихоокеанском регионе.
Посмотрим на имена собственные.
<- edit_tidy %>%
edit_propn filter(upos %in% c("PROPN")) |>
select(doc_id, lemma)
<- edit_propn %>%
propn count(lemma) %>%
arrange(-n)
<- wordcloud(propn$lemma, propn$n, colors = pal, max.words = 100,
propn_wc rot.per = 0)
Как видно из результатов, помимо России часто упоминаются такие страны как “ウクライナ” (Украина; в логике СВО), “米国” (“США”;в логике биполярного мироустройства - противник России, КНР, КНДР; союзник Японии), “中国”(“Китай”; в логике усиления русско-китайского сотрудничества), “北朝鮮” (“Северная Корея”;в логике усиления русско-северокорейского сотрудничества).
Создаём матрицу “термин-документ”
Для начала отфильтруем датасет по значимым, смыслоразделительным словам (существительные). Слова, которые упоминаются лишь однажды, также нам не интересны - не дадут представления о картине. Они точечны, и их употребление ближе к случайности, чем к закономерности.
<- edit_tidy %>%
edit_imp filter(upos %in% c("PROPN", "NOUN")) |>
select(doc_id, lemma)
<- edit_imp |>
rare_words distinct(doc_id, lemma) |>
count(lemma) |>
filter(n == 1) |>
pull(lemma)
<- edit_imp |>
edit_pruned filter(!lemma %in% rare_words)
Считаем значение показателя tf-idf. На его основе создаём матрицу “термин-документ”.
<- edit_pruned |>
edit_counts count(lemma, doc_id) |>
bind_tf_idf(lemma, doc_id, n) |>
select(-n, -tf, -idf)
<- edit_counts |>
dtm cast_sparse(lemma, doc_id, tf_idf)
Составляем эмбендинги для статей
Теперь можно приступить к анализу статей. Ищем похожие между собой тексты. Для измерения растояния пользуемся методом cosine (косинусное растояние). Ставим количество измерений k = 50, устанавливаем зерно set.seed(07122024). Создаем матрицу растояний.
<- 50
k set.seed(07122024)
<- irlba(dtm, nv = k, maxit = 500)
lsa_space
rownames(lsa_space$v) <- colnames(dtm)
colnames(lsa_space$v) <- paste0("dim", 1:k)
<- lsa_space$v |>
doc_emb as.data.frame()
<- doc_emb |>
dist_mx ::distance(method = "cosine", use.row.names = TRUE) philentropy
Создаём функцию для обнаружения близких статей.
<- function(dist_mx, doc, number = 5) {
nearest_doc sort(dist_mx[doc, ], decreasing = TRUE) %>%
head(number) %>%
names() %>%
str_remove_all('doc')
}
Подберём пару для новости 33 (газета Асахи, от 12.06.2024)
<- nearest_doc(dist_mx, "doc33")
out
out
[1] "33" "113" "95" "38" "207"
|>
edits filter(doc_id %in% out) |>
pull(text) %>%
as.tibble()
Как мы видим, основная тематика крутится вокруг ЕС.
Составляем эмбендинги для слов
Далее мой компьютер не потянул рендер страницы, поэтому пришлось оставить код для красоты (т.е. без выполнения). Все изображения графиков взяты из моего репозитория на гитхабе.
Проводим вышеописанную операцию теперь для определения близких слов. Строим матрицу растояний.
rownames(lsa_space$u) <- rownames(dtm)
colnames(lsa_space$u) <- paste0("dim", 1:k)
<- lsa_space$u |>
word_emb as.data.frame()
<- word_emb |>
dist_word_mx ::distance(method = "cosine", use.row.names = TRUE) philentropy
Пишем функцию
<- function(dist_word_mx, word, number = 5) {
nearest_word sort(dist_word_mx[word, ], decreasing = TRUE) |>
head(number) |>
names()
}
Определяем, какие слова близкие с Россией и Москвой.
nearest_word(dist_word_mx, "ロシア")
nearest_word(dist_word_mx, "モスクワ")
Россия тесно связана с Украиной (упоминание в контексте СВО). Такая же логика работает со словами “” (“агрессия”), “併合” (“оккупация”). Интерес представляет слово “一体性” (“единство”, “гомогенность”). Скорее всего, это объясняется призывами “объединиться против России”, т.е. “единство” направлено против России, российской политики.
Набор слов, связанных с Москвой: “劣” (“резкий”), “イスラム国” (запрещенная на территории РФ “Исламское государство”), “激派” (“группировка”), “コンサート” (“концерт”) - указывает на описание трагических событий в Крокус сити холле 22 марта.
Визуализация топиков
Визуализируем основные топики статей по топ 10 словам.
|>
word_emb rownames_to_column("word") |>
pivot_longer(-word, names_to = "dimension", values_to = "value") |>
mutate(dimension = as.numeric(str_remove(dimension, "dim"))) |>
filter(dimension < 10) |>
group_by(dimension) |>
top_n(10, abs(value)) |>
ungroup() |>
mutate(word = reorder_within(word, value, dimension)) |>
ggplot(aes(word, value, fill = dimension)) +
geom_col(alpha = 0.8, show.legend = FALSE) +
facet_wrap(~dimension, scales = "free_y", ncol = 3) +
scale_x_reordered() +
coord_flip() +
labs(
x = NULL,
y = "Value",
title = "Первые 9 главных компонент",
subtitle = "Топ-10 слов"
+
) scale_fill_viridis_c()
Не все топики выглядят осмысленно. Точнее, некоторые топики пересекаются. Во-многом, это можно объяснить тем, что основная направленность редакционных статей о других странах посвящена международным отношениям. Но есть интересные наблюдения.
Примерное описание тем:
- Международные отношения
- Олимпийские игры в Париже
- Проблемы энергетки/энергоресурсов
- неадекватное отражение
- Россия в Северо-Восточной Азии (отношения с КНДР, Монголией)
- Атомная проблематика
- Атомная проблематика (отчасти). Ситуация на Ближнем Востоке.
- неадекватное отражение
- неадекватное отражение
Близость редакционных статей
Строим рассеяную диаграмму.
set.seed(07062024)
<- umap(lsa_space$v , n_neighbors = 3)
viz_lsa tibble(doc = rownames(viz_lsa),
V1 = viz_lsa[, 1],
V2 = viz_lsa[, 2]) |>
ggplot(aes(x = V1, y = V2, label = doc)) +
geom_text(size = 3, alpha = 0.8, position = position_jitter(width = 1.5, height = 1.5)) +
theme_light()
Мы видим большое континуальное пространство Опишем его как “политикоэкономическое”: в нём статьи, посвященные международным отношениям, проблемам международной экономики. Интересно взглянуть на отдельные группки-выбросы.
Группа 1 - статьи по денуклеаризации
Группа 2 - статьи о терракте в Крокус сити холле
Группа 3 - статьи о новопринятом законе о сельском, лесном и водном хозяйствах
Группа 4 - статьи о БПЛА (беспилотно-летательных аппаратах)
Заключение
Как мы видим, Россия незримо (без объявления в заголовке) присутствует в 1/6 части редакционных статей японских сми. Но, к сожалению, еë образ негативный. Страна, которая чаще всего упоминается в связи с Россией, - Украина, а главный эмбендинг - агрессия и оккупация. Всё это связано с официальной позицией правительства Японии по поводу СВО. Именно её транслируют ведущие японские СМИ. Большая часть статей посвящена “международным делам”. Однако есть и менее распространённые темы как “денуклеаризация”, “бпла”, “терракты в Москве”, “японские законы”.
Это не итоговый результат исследования. Лучше сказать, это отрывок из процесса. В дальнейшем, я планирую дополнить датасет сведениями из газеты Санкэй, провести более тщательный анализ и попробовать тематическое моделирование.