# 1 Check, install, and load packages
packages <- c(
  "readr",
  "dplyr",
  "stringr",
  "tidyr",
  "quanteda",
  "quanteda.textstats"
)

installed_packages <- rownames(installed.packages())

for (pkg in packages) {
  if (!pkg %in% installed_packages) {
    install.packages(pkg, dependencies = TRUE)
  }
  library(pkg, character.only = TRUE)
}

# 2 Working directory
setwd("C:/Users/HUAWEI/Desktop/SCI/补充材料5：定性分析结果")

# 3 Read long-format CSV
data <- read_csv(
  "readabilitydata.csv",
  show_col_types = FALSE
)

# 4 Prepare text
data <- data %>%
  mutate(
    question_id = as.character(question_id),
    model = as.character(model),
    answer_text = as.character(answer_text),
    answer_text = str_squish(answer_text),
    doc_id = paste(question_id, model, sep = "_")
  ) %>%
  filter(!is.na(answer_text), answer_text != "")

# 5 Calculate readability
readability <- textstat_readability(
  setNames(data$answer_text, data$doc_id),
  measure = c(
    "Flesch",
    "Flesch.Kincaid",
    "SMOG",
    "ARI",
    "Coleman.Liau.short",
    "FOG"
  )
)

# 6 Clean metric names
readability_clean <- readability %>%
  rename(
    doc_id = document,
    FRES = Flesch,
    FKGL = Flesch.Kincaid,
    CL = Coleman.Liau.short,
    GFI = FOG
  )

# 7 Convert to required long format
readability_long <- data %>%
  select(question_id, model, doc_id) %>%
  left_join(readability_clean, by = "doc_id") %>%
  select(question_id, model, FRES, FKGL, SMOG, ARI, CL, GFI) %>%
  pivot_longer(
    cols = c(FRES, FKGL, SMOG, ARI, CL, GFI),
    names_to = "metric",
    values_to = "score"
  ) %>%
  transmute(
    question = question_id,
    model = model,
    metric = metric,
    score = score
  )

# 8 Export result
write_csv(
  readability_long,
  "readability_long_results.csv"
)