2011-03-11 14 views
5

Estoy escribiendo una aplicación para el iPhone de cifrado simple cambio como un proyecto personal, y una pieza de funcionalidad Actualmente estoy diseñando es un descifrado "universal" de un NSString, que devuelve un NSArray, todos NSStrings:¿Hay alguna manera de obtener datos ortográficos de un NSString?

- (NSArray*) decryptString: (NSString*)ciphertext{ 
NSMutableArray* theDecryptions = [NSMutableArray arrayWithCapacity:ALPHABET]; 

for (int i = 0; i < ALPHABET; ++i) { 
    NSString* theNewPlainText = [self decryptString:ciphertext ForShift:i]; 

    [theDecryptions insertObject:theNewPlainText 
         atIndex:i]; 
} 
return theDecryptions; 

}

realmente me gustaría pasar esta NSArray en otro método que intenta comprobar la ortografía de cada cadena individual dentro de la matriz, y construye una nueva matriz que pone las cuerdas con las palabras typo'd menor cantidad a menor indicies, para que se muestren primero. Me gustaría utilizar el diccionario del sistema como lo haría un campo de texto, por lo que puedo hacer coincidir palabras que el usuario haya aprendido en el teléfono.

Mi conjetura actual es dividir una cadena dada en palabras, luego deletrear cada una con NSSpellChecker's -checkSpellingOfString:StartingAt: y usando el número de palabras correctas para ordenar la matriz. ¿Existe un método de biblioteca existente o un patrón bien aceptado que ayude a devolver dicho valor para una cadena dada?

Respuesta

2

Bueno, encontré una solución que funciona con UIKit/UITextChecker. Encuentra correctamente el diccionario de idiomas preferido por el usuario, pero no estoy seguro si incluye palabras aprendidas en el método real rangeOfMisspelledWords.... Si no lo hace, llamando al [UITextChecker hasLearnedWord] en currentWord dentro de la declaración if inferior debería ser suficiente para encontrar palabras enseñadas por el usuario.

Como se señaló en los comentarios, puede ser prudente para llamar rangeOfMisspelledWords con cada uno de los mejores pocos idiomas en [UITextChecker availableLanguages], para ayudar a los usuarios multilingües.

-(void) checkForDefinedWords { 
    NSArray* words = [message componentsSeparatedByString:@" "]; 
    NSInteger wordsFound = 0; 
    UITextChecker* checker = [[UITextChecker alloc] init]; 
    //get the first language in the checker's memory- this is the user's 
    //preferred language. 
    //TODO: May want to search with every language (or top few) in the array 
    NSString* preferredLang = [[UITextChecker availableLanguages] objectAtIndex:0]; 

    //for each word in the array, determine whether it is a valid word 
    for(NSString* currentWord in words){ 
     NSRange range; 
     range = [checker rangeOfMisspelledWordInString:currentWord 
               range:NSMakeRange(0, [currentWord length]) 
              startingAt:0 
                wrap:NO 
               language:preferredLang]; 

     //if it is valid (no errors found), increment wordsFound 
     if (range.location == NSNotFound) { 
      //NSLog(@"%@ %@", @"Valid Word found:", currentWord); 
      wordsFound++; 
     } 
     else { 
      //NSLog(@"%@ %@", @"Invalid Word found:", currentWord); 
     } 
    } 


    //After all "words" have been searched, save wordsFound to validWordCount 
    [self setValidWordCount:wordsFound]; 

    [checker release]; 
} 
Cuestiones relacionadas