Identificare la lingua del testo con ML Kit su Android

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

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

Prima di iniziare

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android .
  2. Aggiungi le dipendenze per le librerie Android ML Kit al file Gradle del modulo (a livello di app) (in genere app/build.gradle ):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
    }
    

Identificare la lingua di una stringa

Per identificare la lingua di una stringa, ottieni un'istanza di FirebaseLanguageIdentification e quindi passa la stringa al metodo identifyLanguage() .

Per esempio:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyLanguage(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(@Nullable String languageCode) {
              if (languageCode != "und") {
                Log.i(TAG, "Language: " + languageCode);
              } else {
                Log.i(TAG, "Can't identify language.");
              }
            }
          })
      .addOnFailureListener(
          new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
              // Model couldn’t be loaded or other internal error.
              // ...
            }
          });

Se la chiamata ha esito positivo, all'ascoltatore riuscito viene passato un codice lingua BCP-47 , che indica la lingua del testo. Consulta l' elenco completo delle lingue supportate . Se non è possibile rilevare con sicurezza alcuna lingua, viene passato il codice und (indeterminato).

Per impostazione predefinita, ML Kit restituisce un valore diverso da und solo quando identifica la lingua con un valore di confidenza pari almeno a 0,5. Puoi modificare questa soglia passando un oggetto FirebaseLanguageIdentificationOptions a getLanguageIdentification() :

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyLanguageConfidenceThreshold(0.34f)
                        .build());

Ottieni le possibili lingue di una stringa

Per ottenere i valori di confidenza delle lingue più probabili di una stringa, ottieni un'istanza di FirebaseLanguageIdentification e quindi passa la stringa al metodo identifyAllLanguages() .

Per esempio:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyAllLanguages(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
              for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                String language = identifiedLanguage.getLanguageCode();
                float confidence = identifiedLanguage.getConfidence();
                Log.i(TAG, language + " (" + confidence + ")");
              }
            }
          })
      .addOnFailureListener(
          new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
              // Model couldn’t be loaded or other internal error.
              // ...
            }
          });

Se la chiamata ha esito positivo, un elenco di oggetti IdentifiedLanguage viene passato al listener di successo. Da ciascun oggetto è possibile ottenere il codice BCP-47 della lingua e la certezza che la stringa sia in quella lingua. Consulta l' elenco completo delle lingue supportate . Nota che questi valori indicano la sicurezza che l'intera stringa sia nella lingua data; ML Kit non identifica più lingue 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 oggetto FirebaseLanguageIdentificationOptions a getLanguageIdentification() :

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyAllLanguagesConfidenceThreshold(0.5f)
                        .build());

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