UITextChecker 25 буквенных слов - PullRequest
2 голосов
/ 08 ноября 2011

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

Проще говоря, UITextChecker от Apple находит все слова 25 или более букв.как действительные, правильно написанные слова.Идите вперед и откройте Notes на вашем устройстве iOS (или TextEdit на OS X) и введите случайное 24-буквенное слово.Нажмите Enter, подчеркнуто красным, верно?Теперь добавьте еще одну букву к этой строке, чтобы это было слово из 25 букв.Нажмите Enter еще раз, подчеркните красным, правильно ... Нет!

Я не знаю, связано ли это, но у меня есть аналогичный вопрос без ответа ( UITextChecker - это какой словарь? ) сомнение, какой словарь используется для 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;
}

Итак, мой вопрос к сообществу, это документированная «функция», которую я просто не смог найти?

1 Ответ

3 голосов
/ 08 ноября 2011

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

Даже программы проверки орфографии, которые используют словарь, часто склонны использовать алгоритмизбавиться от ложных негативов.Классика - игнорировать:

  • (a) односимвольные слова, за которыми следует определенная пунктуация (например, (a) там);и
  • (b) слова, состоящие из заглавных букв, таких как NATO или CHOGM, при условии, что они являются вполне допустимыми аббревиатурами.

Если алгоритм для UITextChecker также учитывает 25 + -буквенные слова, чтобы быть в порядке, это всего лишь одна из вещей, которые вы должны остерегаться.

Это вполне может быть связано с ожидаемым вариантом использования.Можно ожидать, что он будет использоваться не столько для проверки perfect , сколько как решение с наилучшими предположениями.

Если вы действительно хотите идеальный фильтрВы, вероятно, лучше делать самостоятельно, используя копию словаря откуда-то.Таким образом, вы можете исключить вещи, которые недопустимы в вашей игре (например, аббревиатуры в Scrabble ® ).

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

Кроме этого,и отправив запрос / сообщение об ошибке в Apple, вероятно, вы мало что можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...