Android'de ML Kit ile metnin dilini tanımlama

Bir metin dizesinin dilini tanımlamak için ML Kit'i kullanabilirsiniz. Dizenin en olası dilini ve dizenin olası tüm dilleri için güven puanlarını alabilirsiniz.

ML Kit, yerel komut dosyalarındaki 100'den fazla dildeki metinleri tanır. Buna ek olarak, Latin alfabesi kullanılan metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça için de tanınabilir. Desteklenen dillerin ve komut dosyalarının tam listesini inceleyin.

GruplandırılanlarGrup halinde olmayanlar
Kitaplık adıcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
UygulamaModel, derleme sırasında statik olarak uygulamanıza bağlıdır.Model, Google Play Hizmetleri aracılığıyla dinamik olarak indirilir.
Uygulama boyutu etkisiYaklaşık 900 KB boyut artışı.Yaklaşık 200 KB boyut artışı.
Başlatma zamanıModel hemen kullanılabilir.İlk kullanımdan önce modelin indirilmesini beklemeniz gerekebilir.

Deneyin

Başlamadan önce

  1. Proje düzeyindeki build.gradle dosyanıza Google'ın Maven deposunu hem buildscript hem de allprojects bölümlerine eklediğinizden emin olun.

  2. ML Kit Android kitaplıklarının bağımlılıklarını, modülünüzün genellikle app/build.gradle olan gradle dosyasına ekleyin. İhtiyaçlarınıza bağlı olarak aşağıdaki bağımlılıklardan birini seçin:

    Modeli uygulamanızla birlikte gruplandırmak için:

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

    Modeli Google Play Hizmetleri'nde kullanmak için:

    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. Modeli Google Play Hizmetleri'nde kullanmayı seçerseniz uygulamanızı Play Store'dan yüklendikten sonra, modeli cihaza otomatik olarak indirecek şekilde yapılandırabilirsiniz. Bunu yapmak için uygulamanızın AndroidManifest.xml dosyasına aşağıdaki beyanı ekleyin:

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

    Ayrıca, modelin kullanılabilirliğini açıkça kontrol edebilir ve Google Play Hizmetleri ModuleInstallClient API üzerinden indirme isteğinde bulunabilirsiniz.

    Yükleme sırasında model indirmeleri etkinleştirmez veya açık indirme isteğinde bulunursanız model, tanımlayıcıyı ilk kez çalıştırdığınızda indirilir. İndirme tamamlanmadan önce yaptığınız istekler hiçbir sonuç vermez.

Bir dizenin dilini tanımlama

Bir dizenin dilini tanımlamak amacıyla LanguageIdentifier örneğini almak için LanguageIdentification.getClient() yöntemini çağırın ve ardından dizeyi LanguageIdentifier işlevinin identifyLanguage() yöntemine iletin.

Örneğin:

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

Arama başarılı olursa başarılı bir dinleyiciye bir BCP-47 dil kodu iletilerek mesajın dilini belirtir. Hiçbir dil güvenli bir şekilde algılanmazsa und kodu (belirsiz) iletilir.

Varsayılan olarak ML Kiti und dışında bir değer ancak dili en az 0, 5 güven değerine sahip olarak tanımladığında döndürür. getClient() eşiğine LanguageIdentificationOptions nesnesi ileterek bu eşiği değiştirebilirsiniz:

Kotlin

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

Java

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

Bir dizenin olası dillerini öğrenme

Bir dizenin en olası dillerinin güven değerlerini almak için bir LanguageIdentifier örneği alın ve ardından dizeyi identifyPossibleLanguages() yöntemine geçirin.

Örneğin:

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

Arama başarılı olursa başarılı dinleyiciye IdentifiedLanguage nesnesinin listesi iletilir. Her nesneden dilin BCP-47 kodunu ve dizenin bu dilde olduğuna dair güven alabilirsiniz. Bu değerlerin, dizenin tamamının belirli bir dilde güvenli olduğunu gösterdiğini unutmayın. ML Kiti tek bir dizede birden fazla dili tanımlamaz.

Varsayılan olarak ML Kit yalnızca en az 0, 01 güven değerlerine sahip dilleri döndürür. getClient() bölümüne LanguageIdentificationOptions nesnesi geçirerek bu eşiği değiştirebilirsiniz:

Kotlin

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

Java

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

Bu dili karşılayan dil yoksa listede und değerine sahip bir öğe bulunur.