Я ищу программный доступ к iOS-словарю. Мне нужно, чтобы получить список слов определенного языка из пользовательского приложения.
Является ли это возможным? Есть ли API, который предоставляет эту (или аналогичную) функциональность?
Я проверил документацию Apple, но не нашел ничего полезного... Может кто-нибудь указать мне в правильном направлении?
Доступ к программному обеспечению iOS
Ответ 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);
}