Identificare la lingua del testo con ML Kit su Android

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 confidenza per tutte le possibili lingue della stringa.

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

In bundleNon in bundle
Nome libreriacom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
ImplementazioneIl modello è collegato in modo statico alla tua app al momento della creazione.Il modello viene scaricato in modo dinamico tramite Google Play Services.
Impatto sulle dimensioni dell'appLe dimensioni sono aumentate di circa 900 kB.Le dimensioni sono aumentate di circa 200 kB.
Tempo di inizializzazioneIl modello è disponibile immediatamente.Potrebbe essere necessario attendere il download del modello prima del primo utilizzo.

Prova

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

Prima di iniziare

  1. Assicurati di includere il repository Maven di Google nel file build.gradle a livello di progetto in entrambe le sezioni buildscript e allprojects.

  2. Aggiungi le dipendenze per le librerie di ML Kit per Android al file gradle a livello di app del tuo modulo, che in genere è app/build.gradle. Scegli una delle seguenti dipendenze in base alle tue esigenze:

    Per raggruppare il modello con la tua app:

    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:language-id:17.0.5'
    }
    

    Per l'utilizzo del modello in Google Play Services:

    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-language-id:17.0.0'
    }
    
  3. Se scegli di utilizzare il modello in Google Play Services, puoi configurare l'app in modo che scarichi automaticamente il modello sul dispositivo dopo l'installazione dell'app dal Play Store. Per farlo, aggiungi la seguente dichiarazione al file AndroidManifest.xml della tua app:

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="langid" >
          <!-- To use multiple models: android:value="langid,model2,model3" -->
    </application>
    

    Puoi anche controllare esplicitamente la disponibilità del modello e richiedere il download tramite l'APIModuleInstallClient di Google Play Services.

    Se non abiliti i download dei modelli al momento dell'installazione o non richiedi il download esplicito, il modello viene scaricato la prima volta che esegui l'identificatore. Le richieste effettuate prima del completamento del download non generano risultati.

Indicare la lingua di una stringa

Per identificare la lingua di una stringa, chiama LanguageIdentification.getClient() per ottenere un'istanza di LanguageIdentifier, quindi passa la stringa al metodo identifyLanguage() di LanguageIdentifier.

Ad esempio:

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener { languageCode ->
            if (languageCode == "und") {
                Log.i(TAG, "Can't identify language.")
            } else {
                Log.i(TAG, "Language: $languageCode")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener(
                new OnSuccessListener<String>() {
                    @Override
                    public void onSuccess(@Nullable String languageCode) {
                        if (languageCode.equals("und")) {
                            Log.i(TAG, "Can't identify language.");
                        } else {
                            Log.i(TAG, "Language: " + languageCode);
                        }
                    }
                })
        .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, viene trasmesso un codice lingua BCP-47 al listener di operazione riuscita, che indica la lingua del testo. Se non viene rilevata alcuna lingua in modo sicuro, 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 ad almeno 0,5. Puoi modificare questa soglia passando un oggetto LanguageIdentificationOptions a getClient():

Kotlin

val languageIdentifier = LanguageIdentification
        .getClient(LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
        new LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build());

Ottieni le possibili lingue di una stringa

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

Ad esempio:

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener { identifiedLanguages ->
            for (identifiedLanguage in identifiedLanguages) {
                val language = identifiedLanguage.languageTag
                val confidence = identifiedLanguage.confidence
                Log.i(TAG, "$language $confidence")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener(new OnSuccessListener<List<IdentifiedLanguage>>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
                for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                    String language = identifiedLanguage.getLanguageTag();
                    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 IdentifiedLanguage oggetti viene passato al listener di operazione riuscita. Da ogni oggetto puoi ottenere il codice BCP-47 del linguaggio e la sicurezza che la stringa è in quel linguaggio. Tieni presente che questi valori indicano l'affidabilità dell'intera stringa 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 getClient():

Kotlin

val languageIdentifier = LanguageIdentification
      .getClient(LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
      new LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build());

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