Методы информационного анализа текста (syllabus) 2025/Урок 1: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Новая страница: «<syntaxhighlight lang="R" line> # ============================================================================ # ЗАНЯТИЕ: Анализ текста в R с использованием tidytext # Автор: Евгений Патаракин # Дата: Сентябрь 2025 # ============================================================================ # ==================== # 1. НАСТРОЙКА РАБОЧЕЙ СРЕДЫ # ==================== #...» |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| (не показаны 2 промежуточные версии этого же участника) | |||
| Строка 18: | Строка 18: | ||
# Установить новую рабочую директорию (при необходимости) | # Установить новую рабочую директорию (при необходимости) | ||
# setwd("путь/к/вашей/папке") | # setwd("путь/к/вашей/папке") | ||
setwd("C:/Users/Evgeny/Documents/R_Text") | # setwd("C:/Users/Evgeny/Documents/R_Text") | ||
# Показать все файлы, включая скрытые | # Показать все файлы, включая скрытые | ||
| Строка 73: | Строка 73: | ||
data <- read_csv("metaph-science-lens.csv") | data <- read_csv("metaph-science-lens.csv") | ||
data_AS <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv") | |||
# ==================================================================== | # ==================================================================== | ||
| Строка 214: | Строка 215: | ||
# ==================================================================== | # ==================================================================== | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Категория:Lesson]] | |||
Текущая версия от 10:30, 24 февраля 2026
# ============================================================================
# ЗАНЯТИЕ: Анализ текста в R с использованием tidytext
# Автор: Евгений Патаракин
# Дата: Сентябрь 2025
# ============================================================================
# ====================
# 1. НАСТРОЙКА РАБОЧЕЙ СРЕДЫ
# ====================
# Показать текущую рабочую директорию
getwd()
# Посмотреть содержимое текущей директории
list.files()
# Установить новую рабочую директорию (при необходимости)
# setwd("путь/к/вашей/папке")
# setwd("C:/Users/Evgeny/Documents/R_Text")
# Показать все файлы, включая скрытые
list.files(all.files = TRUE)
# Показать файлы определённого типа
list.files(pattern = "*.csv")
# ====================
# 2. ОСНОВЫ СИНТАКСИСА R
# ====================
# Создание переменных
text_example <- "Это пример текста для анализа"
numbers <- c(1, 2, 3, 4, 5)
logical_var <- TRUE
# Просмотр структуры объектов
str(text_example)
str(numbers)
# Типы данных
class(text_example) # character
class(numbers) # numeric
class(logical_var) # logical
# Векторы, списки и data.frame
vector_example <- c("слово1", "слово2", "слово3")
list_example <- list(text = text_example, nums = numbers)
df_example <- data.frame(
id = 1:3,
words = c("привет", "мир", "анализ"),
freq = c(10, 8, 15)
)
# Просмотр данных
print(df_example)
head(df_example)
summary(df_example)
# ====================
# 3. ЧТЕНИЕ И ЗАПИСЬ ФАЙЛОВ
# ====================
# Установка и загрузка необходимых пакетов
if (!require(readr)) install.packages("readr")
if (!require(readxl)) install.packages("readxl")
library(readr)
library(readxl)
# Чтение CSV файлов
# metaph-science-lens.csv
data <- read_csv("metaph-science-lens.csv")
data_AS <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv")
# ====================================================================
# УРОК: Работа с таблицей из metadata metaph-science-lens.csv
# Основные пакеты: dplyr, tidyr, tidytext, ggplot2
# ====================================================================
# 1. ЗАГРУЗКА ПАКЕТОВ
if (!require(tidyverse)) install.packages("tidyverse")
if (!require(tidytext)) install.packages("tidytext")
library(dplyr)
library(tidyr)
library(tidytext)
library(ggplot2)
# 2. ЗАГРУЗКА ДАННЫХ
# Предполагаем, что файл metaph-science-lens.csv в рабочей директории
data <- read_csv("metaph-science-lens.csv")
# 3. ПОКАЗАТЬ НАЗВАНИЯ ВСЕХ СТОЛБЦОВ
colnames(data)
# 4. СОЗДАНИЕ НОВОЙ ТАБЛИЦЫ С ВЫБОРКОЙ СТОЛБЦОВ
# Нас интересуют только Title, Abstract, Author/s, Field of Study, Keywords, Citing Work Count
data %>%
select(
Title,
Abstract,
`Author/s`,
`Fields of Study`,
Keywords,
`Citing Works Count`
)
data_selected <- data %>%
select(
Title,
Abstract,
`Author/s`,
`Fields of Study`,
Keywords,
`Citing Works Count`
)
# Просмотр первых строк новой таблицы
glimpse(data_selected)
head(data_selected)
# 5. ПОДГОТОВКА TEXT-DATA С TIDYTEXT
# 5.1 Токенизация абстрактов на слова
abstract_tokens <- data_selected %>%
filter(!is.na(Abstract), Abstract != "") %>% # убираем пустые Abstract
select(Title, Abstract) %>%
unnest_tokens(word, Abstract)
# Показать первые 10 токенов
head(abstract_tokens, 10)
# 5.2 Удаление английских стоп-слов
abstract_clean <- abstract_tokens %>%
anti_join(get_stopwords(), by = "word")
####
custom_stop <- tibble(word = c("de", "p", "la"))
abstract_clean2 <- abstract_clean %>%
anti_join(custom_stop, by = "word")
###
# 5.3 Подсчет частоты слов
word_counts <- abstract_clean2 %>%
count(word, sort = TRUE)
# Показать топ-20 самых частых слов
head(word_counts, 20)
# 6. ВИЗУАЛИЗАЦИЯ РАСПРЕДЕЛЕНИЯ СЛОВ
# 6.1 Столбчатая диаграмма для топ-15 слов
word_counts %>%
slice_max(n, n = 15) %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
title = "Топ-15 слов в Abstract",
x = "Слова",
y = "Частота"
) +
theme_minimal()
# 6.2 Гистограмма длины Abstract (в словах)
# Сначала считаем длину каждого Abstract
abstract_lengths <- data_selected %>%
filter(!is.na(Abstract), Abstract != "") %>%
mutate(word_count = str_count(Abstract, "\\S+"))
ggplot(abstract_lengths, aes(x = word_count)) +
geom_histogram(bins = 30, fill = "coral", alpha = 0.7) +
labs(
title = "Распределение длины Abstract",
x = "Количество слов в Abstract",
y = "Число документов"
) +
theme_minimal()
# 7. АНАЛИЗ N-ГРАММ (биграммы)
bigrams <- data_selected %>%
filter(!is.na(Abstract), Abstract != "") %>%
unnest_tokens(bigram, Abstract, token = "ngrams", n = 2)
# Разделение биграмм и удаление стоп-слов
bigrams_separate <- bigrams %>%
separate(bigram, into = c("w1", "w2"), sep = " ") %>%
filter(!w1 %in% get_stopwords()$word,
!w2 %in% get_stopwords()$word)
# Подсчет самых частых биграмм
bigram_counts <- bigrams_separate %>%
unite(bigram, w1, w2, sep = " ") %>%
count(bigram, sort = TRUE)
head(bigram_counts, 15)
# Визуализация топ-10 биграмм
bigram_counts %>%
slice_max(n, n = 10) %>%
mutate(bigram = reorder(bigram, n)) %>%
ggplot(aes(bigram, n)) +
geom_col(fill = "darkgreen") +
coord_flip() +
labs(
title = "Топ-10 биграмм в Abstract",
x = "Биграммы",
y = "Частота"
) +
theme_minimal()
# ====================================================================
