Identifier la langue du texte avec ML Kit sur Android

Vous pouvez utiliser ML Kit pour identifier la langue d'une chaîne de texte. Vous pouvez obtenir la langue la plus probable de la chaîne, ainsi que les scores de confiance pour toutes les dans les différentes langues possibles.

ML Kit reconnaît des textes dans plus de 100 langues différentes dans leur écriture native. Le texte romanisé est également reconnu pour les langues suivantes : arabe, bulgare, chinois, grec, hindi, japonais et russe. Consultez le liste complète des langages et scripts acceptés.

GroupéeSans catégorie
Nom de la bibliothèquecom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
Mise en œuvreLe modèle est associé de manière statique à votre application au moment de la compilation.Le modèle est téléchargé de manière dynamique via les services Google Play.
Impact sur la taille de l'applicationAugmentation de la taille d'environ 900 Ko.Augmentation de la taille d'environ 200 Ko.
Délai d'initialisationLe modèle est disponible immédiatement.Vous devrez peut-être attendre que le modèle soit téléchargé avant de l'utiliser pour la première fois.

Essayer

Avant de commencer

  1. Dans le fichier build.gradle au niveau du projet, veillez à inclure l'adresse e-mail de Google Dépôt Maven dans les sections buildscript et allprojects.

  2. Ajoutez les dépendances des bibliothèques Android ML Kit au fichier fichier Gradle au niveau de l'application, généralement app/build.gradle. Choisissez l'une des options les dépendances suivantes en fonction de vos besoins:

    Pour regrouper le modèle avec votre application:

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

    Pour utiliser le modèle dans les services Google Play:

    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. Si vous choisissez d'utiliser le modèle dans les services Google Play, vous pouvez configurer votre application pour télécharger automatiquement le modèle sur l'appareil une fois l'application installé depuis le Play Store. Pour ce faire, ajoutez la déclaration suivante au fichier le fichier AndroidManifest.xml de votre application:

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

    Vous pouvez aussi vérifier explicitement la disponibilité du modèle et demander un téléchargement via API ModuleInstallClient des services Google Play.

    Si vous n'activez pas le téléchargement du modèle au moment de l'installation ou le modèle est téléchargé la première fois que vous exécutez l'identifiant. Demandes que vous effectuez avant la fin du téléchargement ne produit aucun résultat.

Identifier la langue d'une chaîne

Pour identifier la langue d'une chaîne, appelez LanguageIdentification.getClient() pour : obtenez une instance de LanguageIdentifier, puis transmettez la chaîne au Méthode identifyLanguage() de LanguageIdentifier.

Exemple :

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.
                        // ...
                    }
                });

Si l'appel aboutit, une Le code de langue BCP-47 est transmis à l'écouteur de réussite, indiquant la langue du texte. Si non la langue est détectée avec certitude, le code und (indéterminé) est transmis.

Par défaut, ML Kit ne renvoie une valeur autre que und uniquement lorsqu'il identifie la langue avec un niveau de confiance d'au moins 0,5. Vous pouvez modifier ce paramètre en transmettant un objet LanguageIdentificationOptions à getClient():

Kotlin

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

Java

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

Obtenir les langues possibles d'une chaîne

Pour obtenir les valeurs de confiance des langues les plus probables d'une chaîne, obtenez une instance de LanguageIdentifier, puis transmettre la chaîne à la identifyPossibleLanguages().

Exemple :

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.
                        // ...
                    }
                });

Si l'appel aboutit, une liste d'objets IdentifiedLanguage est transmise à écouteur de réussite. À partir de chaque objet, vous pouvez obtenir le code BCP-47 du langage et le niveau de confiance de la chaîne dans cette langue. Notez que ces valeurs indiquent le niveau de confiance selon lequel la chaîne entière se trouve dans la langue ; ML Kit n'identifie pas plusieurs langues dans une seule chaîne.

Par défaut, ML Kit ne renvoie que les langues dont le niveau de confiance est au moins égal 0,01. Vous pouvez modifier ce seuil en transmettant une LanguageIdentificationOptions objet vers getClient():

Kotlin

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

Java

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

Si aucune langue n'atteint ce seuil, la liste ne comporte qu'un élément, dont la valeur und