Методы информационного анализа текста (syllabus) 2025/Урок 1: различия между версиями

Материал из Поле цифровой дидактики
Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 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()

# ====================================================================