以编程方式访问 iOS 字典

Posted

技术标签:

【中文标题】以编程方式访问 iOS 字典【英文标题】:Access iOS dictionary programmatically 【发布时间】:2011-11-17 05:01:42 【问题描述】:

我正在寻找一种的方法。我需要的是从自定义应用程序中检索特定语言的单词列表。 可能吗?是否有提供此(或类似)功能的 API? 我检查了 Apple 文档,但没有发现任何有用的信息……有人可以指出我正确的方向吗?

【问题讨论】:

小心你的术语——字典也经常引用Foundation数据类型NSDictionary 我知道,我想我把问题写得尽可能清楚了...... 这是一个相关问题:***.com/questions/23019109/… 【参考方案1】:

有一个 API 用于调出内置字典 UI(不是最初的问题,而是在某些回复中提出),包括检查给定单词是否已定义:

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

【讨论】:

【参考方案2】:

我认为没有公共 API 可以访问嵌入式词典。最接近的是使用UITextChecker,但这可能无法满足您的需求

作为替代方案,您可以找到并嵌入您想要的语言的单词词典?这可能需要一些额外的工作

【讨论】:

是的,但正如您所说,这需要额外的工作。直接访问 ios 会很有帮助。不过谢谢! 链接现在重定向到 iOS 开发者主页。 This 是新链接:developer.apple.com/library/ios/documentation/UIKit/Reference/…【参考方案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);
    

如果您需要任意的单词列表,可以从多个在线资源中获取,这里是one。 /usr/share/dict/README 的自述文件说 iOS 单词列表使用 ftp://ftp.ox.ac.uk/pub/wordlists

对于即时搜索,您需要将单词加载到适合前缀搜索的结构上,例如 trie。这是sample project,我就是这样做的。

如果您需要一本字典,请在线获取一本,然后在 trie 节点中包含指向单词条目的指针。如果加载时间过长,您可以尝试在后台加载、压缩或序列化 trie。

【讨论】:

遗憾的是,当我尝试此操作时,它在模拟器中有效,但在设备上无效(iOS 6)。也许该文件在设备上不存在? 它在 iOS 5 或 6 上不可用 :( 我会 zip OS X /usr/share/dict/web2 中的 dict 并将其添加到应用程序包中。它是 2.5 MB 未压缩的。 谢谢...我应该说:这正是我所做的:) 谢谢你..竖起大拇指:) 嗨 jano,您提到序列化 trie 表,是否有机会为我们指明正确的方向?【参考方案4】:

没有 API 可以满足您的要求。

【讨论】:

【参考方案5】:

很久以前我遇到了类似的问题,并按照其他人的建议做了:在我的应用程序中嵌入了一个英语词典。从那以后,我将我的解决方案变成了一个静态库,可以在www.lexicontext.com 获得(请注意,它要花几块钱)。考虑到下载它的开发者数量,这似乎是一个普遍的问题......

【讨论】:

请注意,词典文本解决方案使用不包括限定词、介词、代词、连词和助词的 WordNet 开源词典。因此,它不包括“这些”或“她”之类的词。 @Ori 怎么样 - 你解决了 EWPArris 提到的问题吗?谢谢。非常乐意支付几美元,干杯,但让我们知道那里的问题。 @JoeBlow 是的,这个问题很久以前就解决了...... :) Lexicontext 扩展了 WordNet 的单词定义的辅助列表,其中包括许多限定词、介词、代词、连词。此扩展名以 .plist 文件的形式提供,如果列表中缺少对他重要的定义,开发人员可以使用更多定义进一步扩展该文件。如果您查看试用版中也包含的资源包,您可以查看它。 嗨,Ori,好东西,我们会买一份试试看。很高兴我能够提请您注意 EWP 的重要(但旧)评论。 嗯,是的,但是。 plist 中只有 83 个单词,不包括“这些”。通过反复试验很难发现缺少哪些单词。不要误解我的意思 Lexicontext 对于大多数单词来说确实很棒,但是如果你正在构建一个类似 Scrabble 的应用程序,你需要投入更多的时间和精力来确保所有单词都被检查。此外,wordnet 词典在某些情况下有一些奇怪的定义。无论如何...只是为意外做好准备。【参考方案6】:

如果你可以使用私有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);

【讨论】:

【参考方案7】:

正如@mrzzmr 已经声明的那样,有一个用于此的公共 API - 这里是 SWIFT 中的代码:

if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: "word") 
    var childVC = UIReferenceLibraryViewController(term: "word")
    someParentVC.present(childVC, animated: true, completion: nil)

【讨论】:

【参考方案8】:

即使没有API,只要用户长按选中的单词就可以自动使用。

【讨论】:

以上是关于以编程方式访问 iOS 字典的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中以编程方式拨打带有访问代码的电话号码

能否以编程方式从 ios 应用端访问 bigquery 或 Firebase 分析数据?

如何以编程方式访问连接到 Windows 桌面的 iOS 设备的文件系统?

使用内置 iOS 日历以编程方式快速创建日历/访问

以编程方式访问 iOS 上的应用程序图标

iOS 7 / Xcode 5:以编程方式访问设备启动图像