Подтвердить что ты не робот

Доступ к программному обеспечению iOS

Я ищу программный доступ к iOS-словарю. Мне нужно, чтобы получить список слов определенного языка из пользовательского приложения.
Является ли это возможным? Есть ли API, который предоставляет эту (или аналогичную) функциональность?
Я проверил документацию Apple, но не нашел ничего полезного... Может кто-нибудь указать мне в правильном направлении?

4b9b3361

Ответ 1

Я не думаю, что есть публичный API для доступа к встроенному словарю. Самый близкий использует UITextChecker, но это может не удовлетворить ваши потребности

В качестве альтернативы, вы можете найти и вставить словарь на желаемом языке? Это может потребовать дополнительной работы

Ответ 2

Существует API для создания встроенного пользовательского интерфейса (не исходного вопроса, но затронутого в некоторых ответах), включая проверку того, определено ли заданное слово:

if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:@"word"]) {
    UIReferenceLibraryViewController* ref = 
        [[UIReferenceLibraryViewController alloc] initWithTerm:@"word"];
    [currentViewController presentViewController:ref animated:YES completion:nil];
}

Ответ 3

Нет API, но если вам нужен только список слов, вы можете прочитать его из /usr/share/dict/words:

    NSString *allTheWords = [NSString stringWithContentsOfFile: @"/usr/share/dict/words"
                                                      encoding: NSUTF8StringEncoding
                                                         error: nil];
    for (NSString *line in [allTheWords componentsSeparatedByString:@"\n"]) {
        NSLog(@"%@",line);
    }

Если вам нужен произвольный список слов, вы можете получить его из нескольких онлайн-ресурсов, вот один. README в /usr/share/dict/README говорит, что список слов iOS использует ftp://ftp.ox.ac.uk/pub/wordlists

Для быстрого поиска вам нужно загрузить слова в структуре, подходящей для поиска в префиксе, например, trie. Вот пример образца, где я это сделал.

Если вам нужен словарь, зайдите в один онлайн, тогда включите указатель на запись слова в trie node. Если загрузка занимает слишком много времени, вы можете экспериментировать с загрузкой на фоне или сжимать или сериализовать trie.

Ответ 4

Нет API, чтобы делать то, что вы просите.

Ответ 5

Я столкнулся с подобной проблемой давным-давно и сделал то, что предлагали другие люди: встроенный английский словарь внутри моего приложения. С тех пор я превратил свое решение в статическую библиотеку, доступную в www.lexicontext.com (обратите внимание, что она стоит несколько долларов). Учитывая количество разработчиков, которые его загружали, это, по-видимому, является общей проблемой...

Ответ 6

Даже если нет API, его можно использовать автоматически, если пользователь долго нажимает выбранное слово.

Ответ 7

Если вы можете использовать частный API, вы можете использовать следующий код для определения слова:

_UIDictionaryManager *manager = [%c(_UIDictionaryManager) assetManager];
id definitions = [manager _definitionValuesForTerm:[self queryString]];
for(_UIDefinitionValue *item in definitions) {
        myModel = self;
        NSMutableAttributedString *def = [item definition];
        NSString *str = [def string];
        HBLogDebug(@"%@ = %@", [item localizedDictionaryName], str);
}