Identificare la lingua del testo con ML Kit su iOS

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

ML Kit riconosce il testo in più di 100 lingue diverse nei suoi script nativi. Inoltre, il testo romanizzato può essere riconosciuto in arabo, bulgaro, cinese, greco, hindi, giapponese e russo. Consulta le elenco completo di lingue e script supportati.

Prova

  • Prova l'app di esempio per per vedere un esempio di utilizzo di questa API.

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 la relativa .xcworkspace. ML Kit è supportato in Xcode versione 12.4 o successiva.

Identificare il linguaggio di una stringa

Per identificare la lingua di una stringa, ottieni un'istanza di LanguageIdentification, quindi passa la stringa al token 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, Il codice lingua BCP-47 è passati al gestore del completamento, che indica la lingua del testo. In caso contrario la lingua possa essere rilevata con sicurezza, il codice und (non determinato) viene passato.

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

Ottieni le possibili lingue di una stringa

Per ottenere i valori di confidenza delle lingue più probabili di una stringa, ottieni un istanza di LanguageIdentification e poi passa la stringa 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, viene passato un elenco di IdentifiedLanguage oggetti alla chiamata gestore della continuazione. Da ciascun oggetto puoi ottenere il codice BCP-47 della lingua e la sicurezza che la stringa è in quella lingua. Tieni presente che questi valori indicano la confidenza con cui l'intera stringa si trova lingua; ML Kit non identifica più linguaggi in una singola stringa.

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