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 e i punteggi di affidabilità per tutte le lingue possibili della stringa.

ML Kit riconosce il testo in più di 100 lingue diverse nei propri script nativi. Inoltre, il testo romanizzato è riconosciuto per arabo, bulgaro, cinese, greco, hindi, giapponese e russo. Consulta l'elenco completo delle lingue e degli script supportati.

Prova

Prima di iniziare

  1. Includi i seguenti pod ML Kit nel podfile:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Dopo aver installato o aggiornato i pod del progetto, apri il progetto Xcode utilizzando il relativo .xcworkspace. ML Kit è supportato in Xcode versione 12.4 o successiva.

Indicare la lingua di una stringa

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

Ad esempio:

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

Se la chiamata ha esito positivo, viene passato un codice lingua BCP-47 al gestore di completamento, indicando la lingua del testo. Se nessuna lingua può essere rilevata in modo affidabile, viene passato il codice und (non determinato).

Per impostazione predefinita, ML Kit restituisce un valore non 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.languageIdentification(options: options)

Objective-C

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

Recupero delle possibili lingue di una stringa

Per ottenere i valori di affidabilità dei linguaggi più probabili di una stringa, ottieni un'istanza di LanguageIdentification e poi trasmetti la stringa al metodo identifyPossibleLanguages(for:).

Ad esempio:

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

Se la chiamata ha esito positivo, un elenco di oggetti IdentifiedLanguage viene passato al gestore di continuazione. Da ciascun oggetto puoi ricavare il codice BCP-47 del linguaggio e l'affidabilità della stringa in quel linguaggio. Tieni presente che questi valori indicano con sicurezza che l'intera stringa si trova 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 pari ad almeno 0,01. Puoi modificare questa soglia passando un oggetto LanguageIdentificationOptions a 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];

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