Określ język tekstu za pomocą ML Kit na Androidzie

Za pomocą ML Kit możesz określić język ciągu tekstowego. Możesz poznać najprawdopodobniejszy język ciągu znaków, a także poziomy ufności dla wszystkich możliwych języków ciągu.

ML Kit rozpoznaje tekst w ponad 100 różnych językach w ich rodzimych pismach. Dodatkowo można rozpoznawać tekst w językach arabskim, bułgarskim, chińskim, greckim, hindi, japońskim i rosyjskim w wersji łacińskiej. Zobacz pełną listę obsługiwanych języków i systemów pisma.

Łączenie w pakietyNieopakowane
Nazwa bibliotekicom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
ImplementacjaModel jest statycznie powiązany z aplikacją w momencie kompilacji.Model jest dynamicznie pobierany za pomocą Usług Google Play.
Wpływ rozmiaru aplikacjiRozmiar zwiększy się o około 900 KB.Rozmiar zwiększy się o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Przed pierwszym użyciem może być konieczne poczekanie na pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. W pliku build.gradle na poziomie projektu dodaj repozytorium Maven firmy Google w sekcjach buildscriptallprojects.

  2. Dodaj zależności bibliotek ML Kit na Androida do pliku Gradle modułu na poziomie aplikacji (zwykle app/build.gradle). Wybierz jedną z tych zależności:

    Aby połączyć model z aplikacją:

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

    Aby korzystać z 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żyć modelu w Usługach Google Play, możesz skonfigurować aplikację tak, aby po jej zainstalowaniu ze Sklepu Play automatycznie pobierała model na urządzenie. Aby to zrobić, dodaj do pliku AndroidManifest.xml aplikacji następującą deklarację:

    <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ż sprawdzić dostępność modelu i poprosić o pobieranie za pomocą interfejsu ModuleInstallClient API usług Google Play.

    Jeśli nie włączysz pobierania modelu w czasie instalacji ani nie poprosisz o pobieranie modelu w sposób jawny, model zostanie pobrany przy pierwszym uruchomieniu identyfikatora. Żądania wysłane przed zakończeniem pobierania nie przynoszą żadnych wyników.

Określanie języka ciągu znaków

Aby określić język ciągu, wywołaj funkcję LanguageIdentification.getClient(), aby uzyskać wystąpienie obiektu LanguageIdentifier, a następnie prześlij ciąg 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, kod języka BCP-47 zostanie przekazany do odbiorcy sukcesu, wskazując język tekstu. Jeśli nie można z pewnością wykryć języka, przekazywany jest kod und (nieokreślony).

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

Kotlin

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

Java

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

Pobieranie możliwych języków ciągu

Aby uzyskać wartości ufności najbardziej prawdopodobnych języków ciągu, pobierz wystąpienie klasy 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 zakończy się powodzeniem, do detektora sukcesu zostanie przekazana lista obiektów IdentifiedLanguage. Z każdego obiektu możesz pobrać kod języka BCP-47 oraz poziom pewności, że ciąg znaków jest w danym języku. Pamiętaj, że te wartości wskazują, jak duże jest prawdopodobieństwo, że cały ciąg znaków jest w danym języku. ML Kit nie rozpoznaje wielu języków w jednym ciągu znaków.

Domyślnie ML Kit zwraca tylko języki o wartościach ufności co najmniej 0, 01. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do funkcji 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 spełnia tego progu, lista zawiera 1 element o wartości und.