Android'de Makine Öğrenimi Kiti ile metinlerin dilini belirleyin

Bir metin dizesinin dilini belirlemek için ML Kit'i kullanabilirsiniz. Dizenin en olası dilini ve dize için olası tüm dillerin güven puanlarını alabilirsiniz.

ML Kit, 100'den fazla farklı dildeki metinleri kendi alfabelerinde tanır. Ayrıca Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça dillerinde Latin harfleriyle yazılmış metinler de tanınabilir. Desteklenen dillerin ve alfabelerin tam listesini inceleyin.

GruplandırılanlarPaket dışı
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ğlanır.Model, Google Play Hizmetleri aracılığıyla dinamik olarak indirilir.
Uygulama boyutunun etkisiBoyut yaklaşık 900 KB artar.Boyut yaklaşık 200 KB artar.
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ızda, 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) ekleyin. İhtiyaçlarınıza göre aşağıdaki bağımlılıklardan birini seçin:

    Modeli uygulamanızla paketlemek için:

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

    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. Google Play Hizmetleri'ndeki modeli kullanmayı seçerseniz uygulamanızı, Play Store'dan yüklendikten sonra modeli cihaza otomatik olarak indirecek şekilde yapılandırabilirsiniz. Bunun 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, Google Play Hizmetleri ModuleInstallClient API aracılığıyla modelin kullanılabilirliğini açıkça kontrol edebilir ve indirme isteğinde bulunabilirsiniz.

    Yükleme sırasında model indirmeyi etkinleştirmez 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 yaptığınız istekler sonuç vermez.

Bir dizenin dilini belirleme

Bir dizenin dilini tanımlamak için LanguageIdentification.getClient() yöntemini çağırarak LanguageIdentifier örneği alın ve ardından dizeyi LanguageIdentifier sınıfının 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ı dinleyicisine metnin dilini belirten bir BCP-47 dil kodu iletilir. Herhangi bir dil güvenilir bir şekilde algılanmazsa und (belirlenmemiş) kodu iletilir.

Varsayılan olarak ML Kiti, yalnızca dili en az 0,5 güven değeriyle tanımladığında und dışında bir değer döndürür. getClient() yöntemine bir 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 dize için olası dilleri alma

Bir dizedeki en olası dillerin güven değerlerini almak için LanguageIdentifier örneği oluşturun ve 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şleyicisine IdentifiedLanguage nesnelerinin bir listesi iletilir. Her nesneden dilin BCP-47 kodunu ve dizeyle ilgili güven değerini alabilirsiniz. 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 dil tanımlamaz.

Varsayılan olarak ML Kiti, yalnızca güven değerleri en az 0,01 olan dilleri döndürür. getClient() yöntemine bir 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 bir dil yoksa listede und değerine sahip bir öğe bulunur.