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

Za pomocą pakietu ML Kit możesz określić język ciągu tekstowego. Dostępne opcje uzyskać najbardziej prawdopodobny język ciągu oraz wskaźniki ufności dla wszystkich możliwych języków ciągu.

ML Kit rozpoznaje tekst w ponad 100 różnych językach w skryptach natywnych. Tekst zlatynizowany można też rozpoznać 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 pakietyNiegrupowane
Nazwa bibliotekicom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
ImplementacjaModel jest statycznie połączony z aplikacją w momencie kompilacji.Model jest pobierany dynamicznie przez Usługi Google Play.
Wpływ rozmiaru aplikacjiZwiększenie rozmiaru o około 900 KB.Zwiększenie rozmiaru o około 200 KB.
Czas inicjowaniaModel jest dostępny od razu.Przed jego pierwszym użyciem konieczne może być poczekać na pobranie modelu.

Wypróbuj

Zanim zaczniesz

  1. W pliku build.gradle na poziomie projektu uwzględnij parametr Google Repozytorium Maven w sekcjach buildscript i allprojects.

  2. Dodaj zależności bibliotek ML Kit na Androida do biblioteki modułu pliku Gradle na poziomie aplikacji, który zwykle ma wartość app/build.gradle. Wybierz jedną z opcji: następujące zależności w zależności od potrzeb:

    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 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ć aplikacja automatycznie pobiera model na urządzenie, ze Sklepu Play. Aby to zrobić, dodaj następującą deklarację do plik AndroidManifest.xml Twojej 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ż bezpośrednio sprawdzić dostępność modelu i poprosić o pobranie go Interfejs ModuleInstallClient API Usług Google Play.

    Jeśli nie włączysz pobierania modelu w czasie instalacji lub nie poprosisz o pobieranie dla pełnoletnich, jest pobierany przy pierwszym uruchomieniu identyfikatora. Twoje prośby przed zakończeniem pobierania nie przyniosą żadnych wyników.

Określ język ciągu

Aby określić język ciągu, wywołaj LanguageIdentification.getClient() w pobierz wystąpienie LanguageIdentifier, a potem przekaż ciąg znaków do funkcji Metoda identifyLanguage() dla 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 to do detektora powodzenia, wskazując język tekstu. Jeśli nie rozpoznanie języka, kod Wartość und (nieokreślona) została potwierdzona.

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy identyfikuje język z wartością ufności równą 0,5. Możesz to zmienić 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());

Znajdź możliwe języki ciągu

Aby uzyskać wartości ufności najbardziej prawdopodobnych języków ciągu, pobierz metodę wystąpienie LanguageIdentifier, a następnie przekazać ciąg znaków do funkcji Metoda 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, lista obiektów IdentifiedLanguage zostanie przekazana do funkcji słuchaczem sukcesu. Z każdego obiektu możesz pobrać kod BCP-47 języka pewność, że tekst jest w tym języku. Pamiętaj, że te wartości wskazują pewność, że cały ciąg jest w danym język; ML Kit nie identyfikuje wielu języków w 1 ciągu znaków.

Domyślnie ML Kit zwraca tylko te języki, w przypadku których poziom ufności wynosi co najmniej 0,01. Możesz zmienić ten próg, przekazując LanguageIdentificationOptions obiekt 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 spełnia tego progu, na liście znajduje się 1 element o wartości und