Рассчитать оценки читабельности для нескольких файлов с R
Я хотел бы рассчитать оценки читабельности в R-3.3.2(R-Studio 3.4 для Win), используя пакет koRpus для нескольких файлов txt.files, и сохранить результаты в excel, sqllite3 или txt. Теперь я могу рассчитать оценку читабельности только для одного файла и распечатать их на консоли. Я пытался улучшить код, используя цикл по каталогу, но он не работает правильно.
library(koRpus)
library(tm)
#Loop through files
path = "D://Reports"
out.file<-""
file.names <- dir(path, pattern =".txt")
for(i in 1:length(file.names)){
file <- read.table(file.names[i],header=TRUE, sep=";", stringsAsFactors=FALSE)
out.file <- rbind(out.file, file)
}
#Only one file
report <- tokenize(txt =file , format = "file", lang = "en")
#SMOG-Index
results_smog <- SMOG(report)
summary(results_smog)
#Flesch/Kincaid-Index
results_fleshkin <- flesch.kincaid(report)
summary(results_fleshkin)
#FOG-Index
results_fog<- FOG(report)
summary(results_fog)
1 ответ
Я столкнулся с этой же проблемой. Я искал решение для stackru и увидел ваш пост. После некоторых проб и ошибок я придумал следующий код. Работал нормально для меня. Я вытащил всю дополнительную информацию. Чтобы найти значения индекса результатов, которые я искал, я сначала запустил его для одного файла и извлек сводку обертки для удобства чтения. Это даст вам таблицу различных значений. Сопоставьте столбец со строкой, и вы получите конкретный номер для поиска. Есть много разных вариантов.
В каталоге path ваши файлы должны быть независимыми текстовыми файлами.
#Path
path="C:\\Users\\Philipp\\SkyDrive\\Documents\\Thesiswork\\ReadStats\\"
#list text files
ll.files <- list.files(path = path, pattern = "txt", full.names = TRUE);length(ll.files)
#set vectors
SMOG.score.vec=rep(0.,length(ll.files))
FleshKincaid.score.vec=rep(0.,length(ll.files))
FOG.score.vec=rep(0.,length(ll.files))
#loop through each file
for (i in 1:length(ll.files)){
#tokenize
tagged.text <- koRpus::tokenize(ll.files[i], lang="en")
#hyphen the word for some of the packages that require it
hyph.txt.en <- koRpus::hyphen(tagged.text)
#Readability wrapper
readbl.txt <- koRpus::readability(tagged.text, hyphen=hyph.txt.en, index="all")
#Pull scores, convert to numeric, and update the vectors
SMOG.score.vec[i]=as.numeric(summary(readbl.txt)$raw[36]) #SMOG Score
FleshKincaid.score.vec[i]=as.numeric(summary(readbl.txt)$raw[11]) #Flesch Reading Ease Score
FOG.score.vec[i]=as.numeric(summary(readbl.txt)$raw[22]) #FOG score
if (i%%10==0)
cat("finished",i,"\n")}
#if you wanted to do just one
df=cbind(FOG.score.vec,FleshKincaid.score.vec,SMOG.score.vec)
colnames(df)=c("FOG", "Flesch Kincaid", "SMOG")
write.csv(df,file=paste0(path,"Combo.csv"),row.names=FALSE,col.names=TRUE)
# if you wanted to write seperate csvs
write.csv(SMOG.score.vec,file=paste0(path,"SMOG.csv"),row.names=FALSE,col.names = "SMOG")
write.csv(FOG.score.vec,file=paste0(path,"FOG.csv"),row.names=FALSE,col.names = "FOG")
write.csv(FleshKincaid.score.vec,file=paste0(path,"FK.csv"),row.names=FALSE,col.names = "Flesch Kincaid")