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

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

ML Kit, 100'den fazla dildeki metinleri kendi alfabelerinde tanır. Ayrıca Arapça, Bulgarca, Çince, Hintçe, Japonca, Rusça ve Yunanca için romanize edilmiş metinler tanınabilir. Desteklenen dillerin ve komut dosyalarının tam listesini inceleyin.

GruplandırılanlarPaket halinde sunulmayan
Kitaplık adıcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
UygulamaModel, derleme zamanında uygulamanıza statik olarak bağlanır.Model, Google Play Hizmetleri aracılığıyla dinamik olarak indirilir.
Uygulama boyutu etkisiYaklaşık 900 KB boyut artışı.Boyut yaklaşık 200 KB artar.
İlk kullanıma hazırlama 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ümüne eklediğinizden emin olun.

  2. ML Kit Android kitaplıklarına ait bağımlılıkları, 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ı tercih ederseniz uygulamanız Play Store'dan yüklendikten sonra modeli otomatik olarak cihaza indirecek şekilde yapılandırabilirsiniz. Bunu yapmak için uygulamanızın AndroidManifest.xml dosyasına aşağıdaki bildirimi 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 zamanında model indirmelerini etkinleştirmezseniz veya açıkça indirme isteğinde bulunmazsanız model, tanımlayıcıyı ilk çalıştırdığınızda indirilir. İndirme tamamlanmadan önce yaptığınız istekler sonuç vermez.

Bir dizenin dilini belirleme

Bir dizenin dilini belirlemek için LanguageIdentification.getClient() işlevini çağırarak LanguageIdentifier örneğini alı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.
                        // ...
                    }
                });

Çağrı başarılı olursa metnin dilini belirten bir BCP-47 dil kodu, başarı dinleyicisine iletilir. Dil güvenle algılanmazsa und (belirlenmemiş) kodu iletilir.

Varsayılan olarak ML Kit, dili yalnızca en az 0,5 güven değerine sahip bir güven değeriyle tanımladığında und dışında bir değer döndürür. LanguageIdentificationOptions nesnesini getClient()'ye 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.
                        // ...
                    }
                });

Arama başarılı olursa IdentifiedLanguage nesnelerinin listesi başarı dinleyicisine iletilir. Her nesneden dilin BCP-47 kodunu ve dizenin o dilde olduğundan emin olma düzeyini alabilirsiniz. Bu değerlerin, dizenin tamamının belirtilen dilde olduğundan emin olma düzeyini gösterdiğini unutmayın. ML Kit, tek bir dizede birden fazla dili tanımlamaz.

ML Kit, varsayılan olarak yalnızca güven değeri en az 0,01 olan dilleri döndürür. Bu eşiği, LanguageIdentificationOptions nesnesini getClient() olarak ileterek 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.