转到控制台

在 iOS 上使用机器学习套件识别文本的语言

您可以使用机器学习套件识别文本字符串使用的语言。您可以获取字符串最可能使用的语言,也可以获取字符串可能使用的所有语言的置信度分数。

机器学习套件可识别原生文字中 103 种不同语言的文本。此外,还可以识别阿拉伯文、保加利亚文、中文、希腊文、印地文、日文和俄文中的拉丁字母文字。

如需了解此 API 的实际应用示例,请查看 GitHub 上的机器学习套件快速入门示例

准备工作

  1. 如果您尚未将 Firebase 添加到自己的应用中,请按照入门指南中的步骤执行此操作。
  2. 在 Podfile 中添加机器学习套件库:
    pod 'Firebase/Analytics'
    pod 'Firebase/MLNaturalLanguage'
    pod 'Firebase/MLNLLanguageID'
    
    安装或更新项目的 Pod 之后,请务必使用 Xcode 项目的 .xcworkspace 来打开项目。
  3. 在您的应用中导入 Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

识别字符串使用的语言

要识别字符串使用的语言,请获取 LanguageIdentification 的一个实例,然后将字符串传递给 identifyLanguage(for:) 方法。

例如:

Swift

let languageId = NaturalLanguage.naturalLanguage().languageIdentification()

languageId.identifyLanguage(for: text) { (languageCode, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  if let languageCode = languageCode, languageCode != "und" {
    print("Identified Language: \(languageCode)")
  } else {
    print("No language was identified")
  }
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

[languageId identifyLanguageForText:text
                         completion:^(NSString * _Nullable languageCode,
                                      NSError * _Nullable error) {
                           if (error != nil) {
                             NSLog(@"Failed with error: %@", error.localizedDescription);
                             return;
                           }
                           if (languageCode != nil
                               && ![languageCode isEqualToString:@"und"] ) {
                             NSLog(@"Identified Language: %@", languageCode);
                           } else {
                             NSLog(@"No language was identified");
                           }
                         }];

如果调用成功,则系统会向完成处理程序传递一个 BCP-47 语言代码,表示文本的语言。请参阅所支持的语言的完整列表。如果无法确保检测到语言,则传递代码 und(未确定)。

默认情况下,机器学习套件仅在识别置信度值至少为 0.5 的语言时才会返回非 und 值。您可以通过将 LanguageIdentificationOptions 对象传递给 languageIdentification(options:) 来更改此阈值:

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

获取字符串可能使用的语言

要获取字符串最可能使用的语言的置信度值,请获取 LanguageIdentification 的一个实例,然后将字符串传递给 identifyPossibleLanguages(for:) 方法。

例如:

Swift

let languageId = NaturalLanguage.naturalLanguage().languageIdentification()

languageId.identifyPossibleLanguages(for: text) { (identifiedLanguages, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  guard let identifiedLanguages = identifiedLanguages,
    !identifiedLanguages.isEmpty,
    identifiedLanguages[0].languageCode != "und"
  else {
    print("No language was identified")
    return
  }

  print("Identified Languages:\n" +
    identifiedLanguages.map {
      String(format: "(%@, %.2f)", $0.languageCode, $0.confidence)
      }.joined(separator: "\n"))
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray<FIRIdentifiedLanguage *> * _Nonnull identifiedLanguages,
                                               NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Failed with error: %@", error.localizedDescription);
    return;
  }
  if (identifiedLanguages.count == 1
      && [identifiedLanguages[0].languageCode isEqualToString:@"und"] ) {
    NSLog(@"No language was identified");
    return;
  }
  NSMutableString *outputText = [NSMutableString stringWithFormat:@"Identified Languages:"];
  for (FIRIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

如果调用成功,就将 IdentifiedLanguage 对象列表传递给接续处理程序。您可以从每个对象获取语言的 BCP-47 代码以及字符串使用该语言的置信度。请参阅所支持的语言的完整列表。请注意,这些值表示整个字符串使用给定语言的置信度;机器学习套件无法识别单个字符串中的多种语言。

默认情况下,机器学习套件仅返回置信度值至少为 0.01 的语言。您可以通过将 LanguageIdentificationOptions 对象传递给 languageIdentification(options:) 来更改此阈值:

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

如果没有语言符合此阈值,则列表将包含一个值为 und 的项。