Ho un set di dati pieno di frasi non opportunamente distanziate. Sto cercando di trovare un modo per rimuovere alcuni degli spazi.Iterazione in R per il controllo ortografico di un vettore di parole
comincio con una frase che si converte a un frame di dati di parole:
> word5 <- "hotter the doghou se would be bec ause the co lor was diffe rent"
> abc1 <- data.frame(filler1 = 1,words1=factor(unlist(strsplit(word5, split=" "))))
> abc1
filler1 words1
1 1 hotter
2 1 the
3 1 doghou
4 1 se
5 1 would
6 1 be
7 1 bec
8 1 ause
9 1 the
10 1 co
11 1 lor
12 1 was
13 1 diffe
14 1 rent
Avanti io uso il seguente codice per cercare di controllo ortografico e combinare parole che sono la combinazione della parola prima o dopo loro:
abc2 <- abc1
i <- 1
while(i < nrow(abc1)){
print(abc2)
if(nrow(aspell(abc1$words1[i])) == 0){
print(paste(i,"Words OK",sep=" | "));flush.console()
i <- i + 1
}
else{
if(nrow(aspell(abc1$words1[i])) > 0 & i != 1){
preWord1 <- abc1$words1[i-1]
postWord1 <- abc1$words1[i+1]
badWord1 <- abc1$words1[i]
newWord1 <- factor(paste(preWord1,badWord1,sep=""))
newWord2 <- factor(paste(badWord1,postWord1,sep=""))
if(nrow(aspell(newWord1)) == 0 & nrow(aspell(newWord2)) != 0){
abc2[i,"words1"] <-as.character(newWord1)
abc2 <- abc2[-c(i+1),]
print(paste(i,"word1",sep=" | "));flush.console()
i <- i + 1
}
if(nrow(aspell(newWord1)) != 0 & nrow(aspell(newWord2)) == 0){
abc2[i ,"words1"] <-as.character(newWord2)
abc2 <- abc2[-c(i-1),]
print(paste(i,"word2",sep=" | "));flush.console()
i <- i + 1
}
}
}
}
Dopo aver giocato con questo per qualche tempo sto arrivando alla conclusione che ho bisogno di un certo tipo di iteratore ma sono incerto di come implementarlo in R. qualche suggerimento?
Puoi dirci come questo non funziona? Penso che tu stia cercando probabilmente le funzioni sapply o lapply. Se definisci la tua funzione e poi esegui 'lapply (abc1 $ words1, yourFunctionNameHere)' eseguirà un loop su ogni elemento di 'adc1 $ words1' e chiamerà la tua funzione con quell'elemento passato come parametro. Se ci sono altri parametri da passare alla funzione, puoi passare quelli dopo il nome della funzione –