第一个问题是,我发现了correctionForWordRange:总会返回一个零。这是狮子的一个错误吗?我甚至没有通过谷歌搜索找到任何示例代码,但这个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个小时才能运行50MB的文本文件。有关提高性能的想法吗?我已经让程序尽可能少地访问applespell checker服务以消除系统调用。
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];