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

Za pomocą ML Kit możesz zidentyfikować język ciągu tekstowego. Możesz uzyskać najbardziej prawdopodobny język ciągu znaków, a także wyniki ufności dla wszystkich możliwych języków ciągu znaków.

Zestaw ML Kit rozpoznaje tekst w ponad 100 językach w ich rodzimych alfabetach. Dodatkowo można rozpoznawać tekst zlatynizowany w językach: 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 pakietyOdłączone
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 rozmiaru aplikacjiRozmiar zwiększy się o około 900 KB.Rozmiar wzrasta o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Przed pierwszym użyciem może być konieczne pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. W pliku build.gradle na poziomie projektu dodaj repozytorium Google Maven w sekcjach buildscript i allprojects.

  2. Dodaj zależności dla bibliotek ML Kit na Androida do pliku gradle na poziomie aplikacji modułu, który zwykle ma nazwę app/build.gradle. Wybierz jedną z tych zależności w zależności od potrzeb:

    Aby dołączyć model do aplikacji:

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

    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ć aplikację tak, aby automatycznie pobierała model na urządzenie po zainstalowaniu aplikacji ze Sklepu Play. Aby to zrobić, dodaj do pliku AndroidManifest.xml aplikacji tę 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ż bezpośrednio sprawdzić dostępność modelu i poprosić o pobranie za pomocą interfejsu ModuleInstallClient API usług Google Play.

    Jeśli nie włączysz pobierania modelu podczas instalacji lub nie poprosisz o pobranie, model zostanie pobrany przy pierwszym uruchomieniu identyfikatora. Żądania wysłane przed zakończeniem pobierania nie przyniosą żadnych wyników.

Identyfikowanie języka ciągu znaków

Aby rozpoznać język ciągu znaków, wywołaj metodę LanguageIdentification.getClient(), aby uzyskać instancję LanguageIdentifier, a następnie przekaż ciąg znaków do metody identifyLanguage() klasy 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 uda się wykryć języka, zostanie przekazany kod und (nieokreślony).

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy zidentyfikuje język z poziomem ufności wynoszącym co najmniej 0,5. Możesz zmienić ten próg, 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());

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

Aby uzyskać poziomy ufności dla najbardziej prawdopodobnych języków ciągu znaków, pobierz instancję LanguageIdentifier, a następnie przekaż ciąg znaków 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 sukcesu zostanie przekazana lista obiektów IdentifiedLanguage. Z każdego obiektu możesz uzyskać kod BCP-47 języka i poziom ufności, że ciąg znaków jest w tym języku. Pamiętaj, że te wartości wskazują pewność, że cały ciąg znaków jest w danym języku. ML Kit nie identyfikuje wielu języków w jednym ciągu znaków.

Domyślnie ML Kit zwraca tylko języki o poziomie ufności wynoszącym 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.