Identifiez la langue du texte avec ML Kit sur iOS

Vous pouvez utiliser ML Kit pour identifier la langue d'une chaîne de texte. Vous pouvez obtenir la langue la plus probable de la chaîne ou obtenir des scores de confiance pour toutes les langues possibles de la chaîne.

ML Kit reconnaît le texte dans 103 langues différentes dans leurs scripts natifs. De plus, le texte romanisé peut être reconnu pour l'arabe, le bulgare, le chinois, le grec, l'hindi, le japonais et le russe.

Avant que tu commences

  1. Si vous n'avez pas encore ajouté Firebase à votre application, faites-le en suivant les étapes du guide de démarrage .
  2. Incluez les bibliothèques ML Kit dans votre Podfile :
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Après avoir installé ou mis à jour les pods de votre projet, assurez-vous d'ouvrir votre projet Xcode à l'aide de son .xcworkspace .
  3. Dans votre application, importez Firebase :

    Rapide

    import Firebase

    Objectif c

    @import Firebase;

Identifier la langue d'une chaîne

Pour identifier la langue d'une chaîne, obtenez une instance de LanguageIdentification , puis transmettez la chaîne à la méthode identifyLanguage(for:) .

Par example:

Rapide

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")
  }
}

Objectif 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");
                           }
                         }];

Si l'appel réussit, un code de langue BCP-47 est passé au gestionnaire d'achèvement, indiquant la langue du texte. Consultez la liste complète des langues prises en charge . Si aucune langue n'a pu être détectée avec certitude, le code und (indéterminé) est transmis.

Par défaut, ML Kit renvoie une valeur non und uniquement lorsqu'il identifie la langue avec une valeur de confiance d'au moins 0,5. Vous pouvez modifier ce seuil en passant un objet LanguageIdentificationOptions à languageIdentification(options:) :

Rapide

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

Objectif c

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

Obtenir les langues possibles d'une chaîne

Pour obtenir les valeurs de confiance des langues les plus probables d'une chaîne, obtenez une instance de LanguageIdentification , puis transmettez la chaîne à la méthode identifyPossibleLanguages(for:) .

Par example:

Rapide

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"))
}

Objectif 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);
}];

Si l'appel réussit, une liste d'objets IdentifiedLanguage est transmise au gestionnaire de continuation. À partir de chaque objet, vous pouvez obtenir le code BCP-47 du langage et la certitude que la chaîne est dans ce langage. Consultez la liste complète des langues prises en charge . Notez que ces valeurs indiquent la certitude que la chaîne entière est dans la langue donnée ; ML Kit n'identifie pas plusieurs langues dans une seule chaîne.

Par défaut, ML Kit renvoie uniquement les langues avec des valeurs de confiance d'au moins 0,01. Vous pouvez modifier ce seuil en passant un objet LanguageIdentificationOptions à languageIdentification(options:) :

Rapide

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

Objectif c

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

Si aucune langue n'atteint ce seuil, la liste contiendra un élément, avec la valeur und .