Identifique el idioma del texto con ML Kit en iOS

Puede utilizar ML Kit para identificar el idioma de una cadena de texto. Puede obtener el idioma más probable de la cadena u obtener puntuaciones de confianza para todos los idiomas posibles de la cadena.

ML Kit reconoce texto en 103 idiomas diferentes en sus escrituras nativas. Además, se puede reconocer texto romanizado en árabe, búlgaro, chino, griego, hindi, japonés y ruso.

Antes de que empieces

  1. Si aún no has agregado Firebase a tu aplicación, hazlo siguiendo los pasos de la guía de introducción .
  2. Incluya las bibliotecas del kit ML en su Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Después de instalar o actualizar los Pods de su proyecto, asegúrese de abrir su proyecto Xcode usando su .xcworkspace .
  3. En tu aplicación, importa Firebase:

    Rápido

    import Firebase

    C objetivo

    @import Firebase;

Identificar el idioma de una cadena.

Para identificar el idioma de una cadena, obtenga una instancia de LanguageIdentification y luego pase la cadena al método identifyLanguage(for:) .

Por ejemplo:

Rápido

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

C objetivo

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 la llamada tiene éxito, se pasa un código de idioma BCP-47 al controlador de finalización, que indica el idioma del texto. Consulta la lista completa de idiomas admitidos . Si no se puede detectar ningún idioma con seguridad, se pasa el código und (indeterminado).

De forma predeterminada, ML Kit devuelve un valor no und solo cuando identifica el idioma con un valor de confianza de al menos 0,5. Puede cambiar este umbral pasando un objeto LanguageIdentificationOptions a languageIdentification(options:) :

Rápido

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

C objetivo

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

Obtener los posibles idiomas de una cadena

Para obtener los valores de confianza de los idiomas más probables de una cadena, obtenga una instancia de LanguageIdentification y luego pase la cadena al método identifyPossibleLanguages(for:) .

Por ejemplo:

Rápido

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

C objetivo

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 la llamada tiene éxito, se pasa una lista de objetos IdentifiedLanguage al controlador de continuación. De cada objeto, puede obtener el código BCP-47 del idioma y la confianza de que la cadena está en ese idioma. Consulta la lista completa de idiomas admitidos . Tenga en cuenta que estos valores indican la confianza de que toda la cadena está en el idioma dado; ML Kit no identifica varios idiomas en una sola cadena.

De forma predeterminada, ML Kit devuelve solo idiomas con valores de confianza de al menos 0,01. Puede cambiar este umbral pasando un objeto LanguageIdentificationOptions a languageIdentification(options:) :

Rápido

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

C objetivo

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

Si ningún idioma alcanza este umbral, la lista tendrá un elemento, con el valor und .