Android'de ML Kit ile metnin dilini belirleme

Bir metin dizesinin dilini tanımlamak için Makine Öğrenimi Kiti'ni kullanabilirsiniz. Dizenin en olası dilini ve dizenin olası tüm dilleri için güven puanlarını alabilirsiniz.

ML Kit, 100'den fazla farklı dildeki metinleri yerel alfabelerinde tanır. Ayrıca Latin alfabesiyle yazı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ılanlarGruplandırılmamış
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 boyutunun etkisiYaklaşık 900 KB boyut artışı.Yaklaşık 200 KB boyut artışı.
Başlatma süresiModel hemen kullanılabilir.İlk kullanımdan önce modelin indirilmesini beklemeniz gerekebilir.

Deneyin

Başlamadan önce

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

  2. ML Kit Android kitaplıklarının bağımlılıklarını, modülünüzün uygulama düzeyindeki gradle dosyasına ekleyin. Bu dosya genellikle app/build.gradle olur. İhtiyaçlarınıza göre aşağıdaki bağımlılıklardan birini seçin:

    Modeli uygulamanızla gruplandırmak için:

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

    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ı, 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, model kullanılabilirliğini açıkça kontrol edebilir ve Google Play Hizmetleri ModuleUploadClient API üzerinden indirme isteğinde bulunabilirsiniz.

    Yükleme zamanı model indirmelerini etkinleştirmez veya açık indirme isteğinde bulunmazsanız model, tanımlayıcıyı ilk çalıştırdığınızda indirilir. İndirme işlemi tamamlanmadan önce yaptığınız istekler sonuç vermez.

Dizenin dilini belirleme

Bir dizenin dilini tanımlamak için LanguageIdentification.getClient() yöntemini çağırarak LanguageIdentifier örneği alın, ardından dizeyi LanguageIdentifier öğesinin 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.
                        // ...
                    }
                });

Çağrı başarılı olursa başarılı dinleyiciye metnin dilini belirten bir BCP-47 dil kodu iletilir. Hiçbir dil güvenli bir şekilde algılanmazsa und (belirsiz) kodu iletilir.

Varsayılan olarak ML Kit, yalnızca en az 0,5 güven değeriyle dili tanımladığında und dışında bir değer döndürür. getClient() öğesine 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 alma

Bir dizenin en olası dillerinin güven değerlerini elde etmek için LanguageIdentifier örneğini alın ve ardından dizeyi identifyPossibleLanguages() yöntemine iletin.

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

Çağrı başarılı olursa başarı işleyiciye IdentifiedLanguage nesnelerinden oluşan bir liste aktarılır. Her nesneden dilin BCP-47 kodunu ve dizenin o dilde olup olmadığını öğrenebilirsiniz. Bu değerler, tüm dizenin belirtilen dilde olduğunun güvenilirliğini gösterir. ML Kit, tek bir dizede birden fazla dil tanımlamaz.

ML Kit, varsayılan olarak yalnızca en az 0,01 güven değerine sahip dilleri döndürür. getClient() adresine LanguageIdentificationOptions nesnesi ileterek 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 eşiği karşılayan dil yoksa listede und değerine sahip bir öğe bulunur.