Mengidentifikasi bahasa teks dengan ML Kit di Android

Anda dapat menggunakan ML Kit untuk mengidentifikasi bahasa pada suatu string teks. Anda bisa mendapatkan bahasa string yang paling mungkin serta skor keyakinan untuk semua bahasa string yang mungkin.

ML Kit mengenali teks di lebih dari 100 bahasa berbeda dalam skrip aslinya. Selain itu, teks berbasis romanisasi dapat dikenali untuk bahasa Arab, Bulgaria, China, Yunani, Hindi, Jepang, dan Rusia. Lihat daftar lengkap untuk bahasa dan skrip yang didukung.

PaketTidak Dipaketkan
Nama librarycom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
PenerapanModel ditautkan secara statis ke aplikasi Anda pada waktu build.Model didownload secara dinamis melalui Layanan Google Play.
Dampak ukuran aplikasiUkuran meningkat sekitar 900 KB.Ukuran meningkat sekitar 200 KB.
Waktu inisialisasiModel akan segera tersedia.Mungkin harus menunggu model didownload sebelum digunakan pertama kali.

Cobalah

  • Coba utak-atik aplikasi contoh ini untuk melihat contoh penggunaan API ini.

Sebelum memulai

  1. Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.

  2. Tambahkan dependensi untuk library Android ML Kit ke file gradle level aplikasi modul Anda, biasanya app/build.gradle. Pilih salah satu dependensi berikut berdasarkan kebutuhan Anda:

    Untuk memaketkan model dengan aplikasi Anda:

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

    Untuk menggunakan model di Layanan Google Play:

    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. Jika memilih untuk menggunakan model di Layanan Google Play, Anda dapat mengonfigurasi aplikasi untuk otomatis mendownload model ke perangkat setelah aplikasi diinstal dari Play Store. Untuk melakukannya, tambahkan deklarasi berikut ke file AndroidManifest.xml aplikasi Anda:

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="langid" >
          <!-- To use multiple models: android:value="langid,model2,model3" -->
    </application>
    

    Anda juga dapat memeriksa ketersediaan model secara eksplisit dan meminta download melalui layanan Google Play ModuleInstallClient API.

    Jika Anda tidak mengaktifkan download model waktu penginstalan atau meminta download eksplisit, model akan didownload saat pertama kali Anda menjalankan ID. Permintaan yang Anda buat sebelum download selesai tidak memberikan hasil apa pun.

Mengidentifikasi bahasa string

Untuk mengidentifikasi bahasa string, panggil LanguageIdentification.getClient() untuk mendapatkan instance LanguageIdentifier, lalu teruskan string tersebut ke metode identifyLanguage() dari LanguageIdentifier.

Contoh:

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

Jika panggilan berhasil, kode bahasa BCP-47 akan diteruskan ke pemroses peristiwa sukses, yang menunjukkan bahasa teks. Jika tidak ada bahasa yang terdeteksi secara meyakinkan, kode und (tidak ditentukan) akan diteruskan.

Secara default, ML Kit menampilkan nilai selain und hanya jika bahasa yang teridentifikasi memiliki tingkat keyakinan minimal 0,5. Anda dapat mengubah nilai minimum ini dengan meneruskan objek LanguageIdentificationOptions ke getClient():

Kotlin

val languageIdentifier = LanguageIdentification
        .getClient(LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
        new LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build());

Mendapatkan bahasa string yang mungkin

Guna mendapatkan nilai keyakinan untuk bahasa string yang paling mungkin, dapatkan instance LanguageIdentifier, lalu teruskan string tersebut ke metode identifyPossibleLanguages().

Contoh:

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

Jika panggilan berhasil, daftar objek IdentifiedLanguage akan diteruskan ke pemroses yang berhasil. Dari setiap objek, Anda bisa mendapatkan kode BCP-47 bahasa dan keyakinan bahwa string ditulis dalam bahasa tersebut. Perhatikan bahwa nilai-nilai ini menunjukkan keyakinan bahwa seluruh string ditulis dalam satu bahasa tertentu; ML Kit tidak mengidentifikasi banyak bahasa dalam satu string.

Secara default, ML Kit hanya menampilkan bahasa dengan tingkat keyakinan minimal 0,01. Anda dapat mengubah nilai minimum ini dengan meneruskan objek LanguageIdentificationOptions ke getClient():

Kotlin

val languageIdentifier = LanguageIdentification
      .getClient(LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
      new LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build());

Jika tidak ada bahasa yang memenuhi nilai minimum ini, daftar memiliki satu item, dengan nilai und.