Android'de ML Kit ile metnin dilini belirleme

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 100'den fazla farklı dildeki metinleri ana dillerinde tanır. Ayrıca, Latin alfabesine dayalı metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça olarak tanınabilir. Desteklenen dillerin ve komut dosyalarının tam listesini inceleyin.

GruplandırılmışGrup halinde olmayanlar
Kitaplık adıcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
UygulamaModel, derleme sırasında uygulamanıza statik olarak bağlıdır.Model, Google Play Hizmetleri üzerinden dinamik olarak indirilir.
Uygulama boyutu etkisiBoyutu yaklaşık 900 KB artışı.Boyutu yaklaşık 200 KB artışı.
Başlatma süresiModel hemen kullanılabilir hâle gelir.İ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ümlerinize eklediğ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 (genellikle app/build.gradle dosyasıdır) ekleyin. İhtiyaçlarınıza göre aşağıdaki bağımlılıklardan birini seçin:

    Modeli uygulamanızla birlikte paket haline getirmek 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, model kullanılabilirliğini açıkça kontrol edebilir ve Google Play hizmetleri ModuleInstallClient API üzerinden indirme isteğinde bulunabilirsiniz.

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

Bir dizenin dilini belirleme

Bir dizenin dilini tanımlamak için LanguageIdentification.getClient() yöntemini çağırarak LanguageIdentifier örneğini 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. Güvenli bir şekilde hiçbir dil algılanmazsa und (belirsiz) kodu aktarılır.

Varsayılan olarak ML Kit, dili en az 0,5 güven değeriyle tanımladığında und dışında bir değer döndürür. getClient() nesnesine bir LanguageIdentificationOptions nesnesini 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 almak 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ılı dinleyiciye IdentifiedLanguage nesneden oluşan bir liste iletilir. Her nesneden dilin BCP-47 kodunu ve dizenin o dilde olduğuna dair güveni edinebilirsiniz. Bu değerlerin, tüm dizenin belirtilen dilde olduğuna dair güveni gösterdiğini unutmayın. ML Kit tek bir dizede birden fazla dili tanımlamaz.

Varsayılan olarak ML Kit yalnızca güven değerleri en az 0, 01 olan dilleri döndürür. getClient() nesnesine bir LanguageIdentificationOptions nesnesini 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());

Hiçbir dil bu eşiği karşılamıyorsa listede und değerine sahip tek bir öğe bulunur.