objective-c - UITextChecker 25 个字母单词

标签 objective-c ios macos uikit

我相信这是一个 Apple 错误,但希望大家运行一下,看看其他人是否遇到过相同/类似的问题。

简单地说,Apple 的 UITextChecker 会将所有包含 25 个或更多字母的单词视为有效且拼写正确的单词。继续打开 iOS 设备上的 Notes(或 OS X 上的 TextEdit)并随机输入 24 个字母的单词。按回车键,红色下划线,对吧?现在向该行再添加一个字母,这样它就成为一个 25 个字母的单词。再次按回车键,红色下划线,对……不!

我不知道这是否相关,但我有一个类似的未解答的问题( UITextChecker is what dictionary? ),询问 UITextChecker 使用什么字典。在/usr/share/dict/words 中,最长的单词是 24 个字母。看起来相当巧合的是,25 个字母是字典中没有的单词的第一个长度,并且它始终被接受为有效单词。但我不知道该单词列表是否是 UITextChecker 的字典。

对于任何可能要确认游戏等特定单词拼写的人来说,这一点很重要。您确实不希望玩家能够使用随机 25 个字母来拼写单词并很可能获得大量分数。

这是我检查有效单词的代码:

- (BOOL) isValidWord:(NSString*)word {
    // word is all lowercase
    UITextChecker *checker = [[UITextChecker alloc] init];
    NSRange searchRange = NSMakeRange(0, [word length]);

    NSRange misspelledRange = [checker rangeOfMisspelledWordInString:word range:searchRange startingAt:0 wrap:NO language:@"en" ];
    [checker release];
    BOOL validWord = (misspelledRange.location == NSNotFound);
    BOOL passOneCharTest = ([word length] > 1 || [word isEqualToString:@"a"] || [word isEqualToString:@"i"]);
    BOOL passLengthTest = ([word length] > 0 && [word length] < 25);    // I don't know any words more than 24 letters long

    return validWord && passOneCharTest && passLengthTest;
}

所以我向社区提出的问题是,这是一个我无法找到的已记录的“功能”吗?

最佳答案

这可能是由用于拼写检查本身的算法引起的,尽管我承认这听起来有点漏洞。

即使使用字典的拼写检查器也经常倾向于使用算法来消除漏报。经典的是忽略:

  • (a) 单字符单词后跟某些标点符号(就像后面的 (a) 一样);和
  • (b) 全部由大写字母组成的单词,例如 NATO 或 CHOGM,假设它们是非常有效的首字母缩略词。

如果 UITextChecker 的算法也认为 25+ 字母的单词没问题,那么这只是您需要注意的事情之一。

它很可能与预期的用例相关。预计它不会被用作完美检查器,而更多地被用作最佳猜测解决方案。

如果您真的想要一个完美的过滤器,您最好自己做一个,使用来自某处的字典副本。这样,您就可以排除游戏中无效的内容(例如 Scrabble® 中的缩写词)。

您还可以确保您不会受到变幻莫测的算法的影响,这些算法假设较长的单词是有效的,就像这里的情况一样。相反,您可以假设字典中没有的任何单词都是无效的(但是,当然,如果您的字典错误,请给用户添加它的机会)。

除此之外,向 Apple 提交查询/错误,您可能无能为力。

关于objective-c - UITextChecker 25 个字母单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045137/

相关文章:

ios - Xcode 8 不显示整个 NSLog 输出

ios - CloudKit 记录版本控制

python - 已安装六个 1.4.1,但在 mac OS sierra 中 set( ['OpenSSL' ]) 需要六个 >=1.5.2

ios - 为什么编译器认为这个变量未声明?

ios - arm64 objectForKey 性能异常?

ios - 更新并安装 ionic 和 ios

swift - 如何在 OSX Swift 应用程序中请求管理员登录?

javascript - 在 Javascript 中调用自定义协议(protocol)

ios 9,xcode 7 附加或不附加时的不同行为

内部有资源的 IOS 静态框架