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

Do identyfikacji języka ciągu tekstowego można użyć narzędzia ML Kit. Możesz uzyskać najbardziej prawdopodobny język ciągu lub uzyskać wyniki pewności dla wszystkich możliwych języków ciągu.

ML Kit rozpoznaje tekst w 103 różnych językach w ich natywnych pismach. Ponadto zlatynizowany tekst można rozpoznać w językach arabskim, bułgarskim, chińskim, greckim, hindi, japońskim i rosyjskim.

Zanim zaczniesz

  1. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
  2. Dodaj zależności dla bibliotek ML Kit Android do pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle ):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
    }
    

Zidentyfikuj język ciągu

Aby zidentyfikować język ciągu, pobierz instancję FirebaseLanguageIdentification , a następnie przekaż ciąg do metody identifyLanguage() .

Na przykład:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyLanguage(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(@Nullable String languageCode) {
              if (languageCode != "und") {
                Log.i(TAG, "Language: " + languageCode);
              } else {
                Log.i(TAG, "Can't identify language.");
              }
            }
          })
      .addOnFailureListener(
          new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
              // Model couldn’t be loaded or other internal error.
              // ...
            }
          });

Jeśli wywołanie powiedzie się, do słuchacza sukcesu przekazywany jest kod języka BCP-47 , wskazujący język tekstu. Zobacz pełną listę obsługiwanych języków . Jeśli nie można z całą pewnością wykryć żadnego języka, przekazywany jest kod und (nieokreślony).

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

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyLanguageConfidenceThreshold(0.34f)
                        .build());

Uzyskaj możliwe języki ciągu

Aby uzyskać wartości zaufania najbardziej prawdopodobnych języków ciągu, pobierz instancję FirebaseLanguageIdentification , a następnie przekaż ciąg do metody identifyAllLanguages() .

Na przykład:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyAllLanguages(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
              for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                String language = identifiedLanguage.getLanguageCode();
                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 powiedzie się, do odbiornika powodzenia zostanie przekazana lista obiektów IdentifiedLanguage . Z każdego obiektu można uzyskać kod BCP-47 języka i pewność, że ciąg znaków jest w tym języku. Zobacz pełną listę obsługiwanych języków . Należy pamiętać, ż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.

Domyślnie ML Kit zwraca tylko języki z wartością pewności co najmniej 0,01. Możesz zmienić ten próg, przekazując obiekt FirebaseLanguageIdentificationOptions do getLanguageIdentification() :

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyAllLanguagesConfidenceThreshold(0.5f)
                        .build());

Jeśli żaden język nie spełnia tego progu, lista będzie zawierać jedną pozycję z wartością und .