Identifier 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, ainsi que des scores de confiance pour toutes les langues possibles de la chaîne.

ML Kit reconnaît du texte dans plus de 100 langues différentes dans ses scripts natifs. En outre, le texte romanisé est reconnu pour l'arabe, le bulgare, le chinois, le grec, l'hindi, le japonais et le russe. Consultez la liste complète des langages et scripts compatibles.

Essayer

Avant de commencer

  1. Incluez les pods ML Kit suivants dans votre Podfile :
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Après avoir installé ou mis à jour les pods de votre projet, ouvrez votre projet Xcode à l'aide de son fichier .xcworkspace. ML Kit est compatible avec Xcode 12.4 ou version ultérieure.

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:).

Exemple :

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

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

Si l'appel aboutit, un code de langue BCP-47 est transmis au gestionnaire d'achèvement, indiquant la langue du texte. Si aucune langue n'a pu être détectée avec confiance, le code und (indéterminé) est transmis.

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

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification 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:).

Exemple :

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray * _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 (MLKIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

Si l'appel aboutit, une liste d'objets IdentifiedLanguage est transmise au gestionnaire de continuation. À partir de chaque objet, vous pouvez obtenir le code BCP-47 de la langue et le niveau de confiance de la chaîne dans cette langue. Notez que ces valeurs indiquent le degré de confiance quant à la présence de la chaîne entière dans la langue donnée. ML Kit n'identifie pas plusieurs langues dans une seule chaîne.

Par défaut, ML Kit ne renvoie que les langues dont le niveau de confiance est au moins égal à 0,01. Vous pouvez modifier ce seuil en transmettant un objet LanguageIdentificationOptions à languageIdentification(options:):

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

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