2016-11-29 2 views
0

Je voudrais calculer les scores de lisibilité dans R-3.3.2 (R-Studio 3.4 pour Win) en utilisant le paquet koRpus pour plusieurs txt.files et enregistrer les résultats dans excel ou sqllite3 ou txt . Maintenant, je ne peux que calculer le score de lisibilité pour un seul fichier et les imprimer sur la console. J'ai essayé d'améliorer le code en utilisant le répertoire de boucle sur mais il ne fonctionne pas correctement.Calculer les scores de lisibilité pour plusieurs fichiers avec R

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) 
+0

Pouvez-vous préciser: sont ces rapports vraiment tableaux séparés avec une ligne-virgule initiale des rubriques (comme 'appel read.table' implique), ou sont-ils seulement des documents texte simples que vous essayez de lire . –

+0

Aussi, avez-vous l'intention d'exécuter des appels 'koRpus' sur tous les fichiers concaténés ensemble, comme s'il s'agissait d'un gros fichier (donc vous obtenez un seul ensemble de résultats' koRpus') ou voulez-vous générer un ensemble de Résultats 'koRpus', un pour chaque fichier? –

+0

@K. A. Buhr Mon répertoire contient des documents simples en texte brut. Je veux obtenir les résultats pour chaque fichier séparément, de sorte que je puisse les combiner à une table Excel avec les résultats plus tard. – In777

Répondre

1

J'ai couru à ce même problème. Je regardais à travers stackoverflow pour une solution et j'ai vu votre message. Après quelques essais et erreurs, j'ai trouvé le code suivant. Ça a bien marché pour moi. J'ai sorti toutes les infos supplémentaires. Pour trouver les valeurs d'index des scores que je cherchais, je l'ai d'abord couru pour un fichier et j'ai tiré le résumé de l'enveloppe de lisibilité. Ça va vous donner une table d'un tas de valeurs différentes. Faites correspondre la colonne avec la ligne et vous obtiendrez le numéro spécifique à rechercher. Il y a beaucoup d'options différentes.

Dans le répertoire path, vos fichiers doivent être des fichiers texte indépendants.

#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")