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

Bir metin dizesinin dilini tanımlamak için Makine Öğrenimi Kiti'ni kullanabilirsiniz. Şunları yapabilirsiniz: tüm dizeler için güven puanlarının yanı sıra dizenin en olası dizenin olası dillerine değineceğiz.

ML Kit, 100'den fazla farklı dildeki metinleri yerel alfabelerinde tanır. Ayrıca, Latince yazılmış metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça Bkz. 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 Google'ın Hem buildscript hem de allprojects bölümlerinizde Maven deposu.

  2. ML Kit Android kitaplıklarının bağımlılıklarını modülünüze uygulama düzeyinde gradle dosyasıdır. Bu dosya genellikle app/build.gradle boyutundadır. Şunlardan birini seçin: bağımlılıkları belirlemenize yardımcı olur:

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

    <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 ModuleLoadClient API'si

    Yükleme zamanı modelinin indirilmesini etkinleştirmezseniz veya açıkça indirme isteğinde bulunmazsanız model, tanımlayıcıyı ilk çalıştırdığınızda indirilir. Yaptığınız istekler hiçbir sonuç döndürmez.

Dizenin dilini belirleme

Bir dizenin dilini belirlemek için LanguageIdentification.getClient() işlevini çağırarak bir LanguageIdentifier örneğini alır ve ardından, dizeyi LanguageIdentifier identifyLanguage() yöntemi.

Ö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, BCP-47 dil kodu başarı dinleyicisine iletilmelidir. Yanıt hayır ise: algılandığında, kod und (belirsiz) geçirildi.

ML Kit, varsayılan olarak yalnızca und dışında bir değer döndürdüğünde güven değeri en az 0,5’tir. Bu ayarı değiştirebilirsiniz. getClient() öğesine bir LanguageIdentificationOptions nesnesi ileterek eşik:

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 kullanın ve daha sonra, dizeyi identifyPossibleLanguages() yöntemini çağırın.

Ö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 IdentifiedLanguage nesnelerinden oluşan bir liste yardımcı olmaktır. Her nesneden dilin BCP-47 kodunu alabilir ve dizenin o dilde olduğundan emin olun. Lütfen bu değerler, tüm dizenin belirtilen dil; Makine Öğrenimi Kiti, tek bir dizede birden fazla dili tanımlamaz.

ML Kit varsayılan olarak yalnızca en az şu güven değerine sahip dilleri döndürür: 0,01. Bu eşiği, Müşteri Eşleştirme için LanguageIdentificationOptions nesne getClient():

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 bir öğe bulunur ve bu öğe için değeri und.