Identyfikowanie języka tekstu za pomocą ML Kit na Androida

Za pomocą ML Kit możesz określić język ciągu tekstowego. Możesz uzyskać najbardziej prawdopodobny język ciągu znaków oraz wskaźniki ufności wszystkich możliwych języków danego ciągu.

ML Kit rozpoznaje w swoich natywnych skryptach tekst w ponad 100 różnych językach. Dodatkowo tekst zlatynizowany jest rozpoznawany w języku arabskim, bułgarskim, chińskim, greckim, hindi, japońskim i rosyjskim. Zobacz pełną listę obsługiwanych języków i skryptów.

Łączenie w pakietyNiegrupowane
Nazwa bibliotekicom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
ImplementacjaModel jest statycznie połączony z aplikacją w czasie kompilacji.Model jest pobierany dynamicznie przez Usługi Google Play.
Wpływ na rozmiar aplikacjiZwiększenie rozmiaru o około 900 KB.Zwiększenie rozmiaru o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Możliwe, że przed pierwszym użyciem trzeba będzie poczekać na pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. Upewnij się, że w sekcji buildscript i allprojects w pliku build.gradle Google na poziomie projektu znajduje się repozytorium Maven.

  2. Dodaj zależności dla bibliotek ML Kit na Androida do pliku Gradle na poziomie modułu. Zwykle ma on postać app/build.gradle. Wybierz jedną z tych zależności w zależności od potrzeb:

    Aby połączyć model w pakiet z aplikacją:

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

    Aby używać modelu w Usługach 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. Jeśli zdecydujesz się używać modelu w Usługach Google Play, możesz skonfigurować automatyczne pobieranie modelu przez aplikację po jej zainstalowaniu ze Sklepu Play. Aby to zrobić, dodaj tę deklarację do pliku AndroidManifest.xml aplikacji:

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

    Możesz też wyraźnie sprawdzić dostępność modelu i poprosić o pobranie za pomocą interfejsu ModuleInstallClient API z Usług Google Play.

    Jeśli nie włączysz pobierania modelu podczas instalacji ani nie zażądasz jawnego pobierania, model zostanie pobrany przy pierwszym uruchomieniu identyfikatora. Żądania wysłane przed zakończeniem pobierania nie dają żadnych wyników.

Określ język ciągu znaków

Aby zidentyfikować język ciągu znaków, wywołaj LanguageIdentification.getClient(), aby uzyskać wystąpienie obiektu LanguageIdentifier, a następnie przekaż ciąg znaków do metody identifyLanguage() obiektu LanguageIdentifier.

Na przykład:

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

Jeśli wywołanie się powiedzie, do detektora sukcesu zostanie przekazany kod języka BCP-47, który wskazuje język tekstu. Jeśli nie wykryto żadnego języka, przekazywany jest kod und (nieokreślony).

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy identyfikuje język z wartością ufności wynoszącą co najmniej 0,5. Ten próg możesz zmienić, przekazując obiekt LanguageIdentificationOptions do getClient():

Kotlin

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

Java

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

Pobierz możliwe języki ciągu znaków

Aby uzyskać wartości ufności dotyczące najbardziej prawdopodobnych języków ciągu, pobierz wystąpienie LanguageIdentifier, a następnie przekaż ciąg do metody identifyPossibleLanguages().

Na przykład:

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

Jeśli wywołanie się powiedzie, do detektora jest przekazywana lista obiektów IdentifiedLanguage. Z każdego obiektu możesz pobrać kod BCP-47 języka i poziom pewności, że ciąg znaków jest w tym języku. Te wartości wskazują poziom pewności, że cały ciąg znaków jest w danym języku. Zestaw ML nie identyfikuje wielu języków w jednym ciągu znaków.

Domyślnie ML Kit zwraca tylko języki, których poziom ufności wynosi co najmniej 0,01. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do getClient():

Kotlin

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

Java

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

Jeśli żaden język nie przekracza tego progu, lista zawiera 1 element o wartości und.