Первый вопрос: я нашел на нем коррекцию ForWordRange: всегда будет возвращать ноль. Это ошибка в Lion? Я даже не нашел пример кода через поиск в Google, но этот API-интерфейс задокументирован в официальной ссылке nsspellchecker ...
NSSpellChecker * checker = [NSSpellChecker sharedSpellChecker];
NSString * string = @"helllo";
NSRange range = NSMakeRange(0, [string length]);
NSString *corrected = [checker correctionForWordRange:range inString:string language:@"en" inSpellDocumentWithTag:0];
Второй вопрос, следующий код занимает 2 часа для работы с текстовым файлом размером 50 МБ. Есть идеи по улучшению производительности? Я уже использую программу для доступа к сервису проверки яблок, чтобы как можно меньше исключать системные вызовы.
NSError *error;
NSSpellChecker * checker = [NSSpellChecker sharedSpellChecker];
NSMutableString * line =[NSMutableString stringWithContentsOfFile:@"input.txt" encoding:NSUTF8StringEncoding error:&error];
// this is fast, only one or two minutes to run
NSArray *checkingResult = [checker checkString:line
range:NSMakeRange(0, [line length])
types:NSTextCheckingTypeSpelling
options:nil
inSpellDocumentWithTag:0
orthography:nil
wordCount:nil];
int offset = 0;
printf("Total mistakes: %lu\n", [checkingResult count]);
//this iteration is very slow
for (int i = 0 ; i < [checkingResult count]; i++ ) {
NSTextCheckingResult * c = [checkingResult objectAtIndex:i];
NSRange r = [c range];
r.location += offset;
NSArray *guess = [checker guessesForWord:[line substringWithRange:r]];
if ([guess count]== 0) continue;
NSString * word = [guess objectAtIndex:0];
[line replaceCharactersInRange:r withString:word];
offset += [word length] - r.length;
}
[line writeToFile:@"output.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error];