Есть ли способ получить данные проверки орфографии из строки NSString? - PullRequest
5 голосов
/ 11 марта 2011

Я пишу простое приложение для iPhone с шифровальным шифрованием как проект для домашних животных, и одна часть функциональности, которую я сейчас разрабатываю, - это «универсальное» дешифрование NSString, которое возвращает NSArray, все NSStrings:

- (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;

}

Я действительно хотел бы передать этот NSArray в другой метод, который пытается проверять орфографию каждой отдельной строки в массиве, и создает новый массив, который помещает строки с наименьшим количеством опечаток.слова на более низких показателях, поэтому они отображаются первыми.Я хотел бы использовать системный словарь, как текстовое поле, чтобы я мог сопоставить слова, которые были обучены пользователю в телефоне.

В настоящее время я предполагаю разбить данную строку на слова, затем проверьте орфографию каждого с помощью NSSpellChecker's -checkSpellingOfString:StartingAt: и используя количество правильных слов для сортировки массива.Существует ли существующий библиотечный метод или хорошо принятый шаблон, который помог бы вернуть такое значение для данной строки?

1 Ответ

2 голосов
/ 24 апреля 2011

Ну, я нашел решение, которое работает с использованием UIKit / UITextChecker. Он правильно находит наиболее предпочтительный словарь языка пользователя, но я не уверен, включает ли он изученные слова в фактический метод rangeOfMisspelledWords.... Если этого не произойдет, вызов [UITextChecker hasLearnedWord] для currentWord внутри нижнего оператора if будет достаточным для поиска обучаемых пользователем слов.

Как отмечается в комментариях, может быть разумно звонить rangeOfMisspelledWords с каждым из немногих языков в [UITextChecker availableLanguages], чтобы помочь многоязычным пользователям.

-(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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...