Identificare la lingua del testo con ML Kit su iOS

Puoi utilizzare ML Kit per identificare la lingua di una stringa di testo. Puoi ottenere la lingua più probabile della stringa o i punteggi di confidenza per tutte le lingue possibili della stringa.

ML Kit riconosce il testo in 103 lingue diverse nei relativi script nativi. Inoltre, il testo romanizzato può essere riconosciuto per arabo, bulgaro, cinese, greco, hindi, giapponese e russo.

Prima di iniziare

  1. Se non hai ancora aggiunto Firebase alla tua app, segui i passaggi descritti nella guida introduttiva.
  2. Includi le librerie ML Kit nel tuo Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Dopo aver installato o aggiornato i pod del progetto, assicurati di aprire il progetto Xcode utilizzando il relativo .xcworkspace.
  3. Nell'app, importa Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

Identificare la lingua di una stringa

Per identificare la lingua di una stringa, ottieni un'istanza di LanguageIdentification e poi passa la stringa al metodo identifyLanguage(for:).

Ad esempio:

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

Se la chiamata va a buon fine, al gestore del completamento viene passato un codice lingua BCP-47 che indica la lingua del testo. Consulta l'elenco completo delle lingue supportate. Se non è stato possibile rilevare con certezza una lingua, viene passato il codice und (non definito).

Per impostazione predefinita, ML Kit restituisce un valore diverso da und solo quando identifica la lingua con un valore di confidenza di almeno 0,5. Puoi modificare questa soglia passando un oggetto LanguageIdentificationOptions a 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];

Ottenere le possibili lingue di una stringa

Per ottenere i valori di confidenza delle lingue più probabili di una stringa, recupera un'istanza di LanguageIdentification e poi passa la stringa al metodo identifyPossibleLanguages(for:).

Ad esempio:

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

Se la chiamata ha esito positivo, un elenco di oggetti IdentifiedLanguage viene passato al gestore di continuazione. Da ogni oggetto puoi ottenere il codice BCP-47 della lingua e la certezza che la stringa sia in quella lingua. Consulta l'elenco completo delle lingue supportate. Tieni presente che questi valori indicano la certezza che l'intera stringa sia nella lingua specificata. ML Kit non identifica più lingue in una singola stringa.

Per impostazione predefinita, ML Kit restituisce solo le lingue con valori di confidenza di almeno 0,01. Puoi modificare questa soglia passando un oggetto LanguageIdentificationOptions a 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];

Se nessuna lingua soddisfa questa soglia, l'elenco conterrà un elemento con il valore und.