ระบุภาษาของข้อความด้วย ML Kit บน Android

คุณสามารถใช้ ML Kit เพื่อระบุภาษาของสตริงข้อความได้ คุณสามารถดูภาษาที่เป็นไปได้มากที่สุดของสตริง รวมถึงคะแนนความเชื่อมั่นสำหรับภาษาทั้งหมดที่เป็นไปได้ของสตริง

ML Kit จดจำข้อความในภาษาต่างๆ กว่า 100 ภาษาด้วยตัวเขียนดั้งเดิมของภาษานั้นๆ นอกจากนี้ ระบบยังจดจำข้อความที่เขียนด้วยอักษรโรมันสำหรับภาษาอาหรับ บัลแกเรีย จีน กรีก ฮินดี ญี่ปุ่น และรัสเซียได้ด้วย ดูรายการทั้งหมดของภาษาและสคริปต์ที่รองรับ

รวมกลุ่มไม่ได้รวมกลุ่ม
ชื่อคลังcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
การใช้งานโมเดลจะลิงก์กับแอปแบบคงที่ ณ เวลาที่สร้างระบบจะดาวน์โหลดโมเดลแบบไดนามิกผ่านบริการ Google Play
ผลกระทบต่อขนาดแอปเพิ่มขนาดประมาณ 900 KBเพิ่มขนาดประมาณ 200 KB
เวลาเริ่มต้นโมเดลพร้อมใช้งานทันทีคุณอาจต้องรอให้โมเดลดาวน์โหลดก่อนใช้งานครั้งแรก

ลองเลย

ก่อนเริ่มต้น

  1. ในไฟล์ build.gradle ระดับโปรเจ็กต์ ให้ตรวจสอบว่าได้ใส่ที่เก็บ Maven ของ Google ไว้ทั้งในส่วน buildscript และ allprojects

  2. เพิ่ม Dependency สำหรับคลัง ML Kit สำหรับ Android ลงในไฟล์ Gradle ระดับแอปของโมดูล ซึ่งมักจะเป็น app/build.gradle เลือก 1 ในข้อกำหนดต่อไปนี้ตามความต้องการของคุณ

    สำหรับการรวมโมเดลกับแอป

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

    สำหรับการใช้โมเดลในบริการ 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. หากเลือกใช้โมเดลใน Google Play Services คุณจะกำหนดค่าแอปให้ดาวน์โหลดโมเดลลงในอุปกรณ์โดยอัตโนมัติได้หลังจากที่ติดตั้งแอปจาก Play Store โดยเพิ่มประกาศต่อไปนี้ลงในไฟล์ AndroidManifest.xml ของแอป

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

    นอกจากนี้ คุณยังตรวจสอบความพร้อมใช้งานของโมเดลและขอดาวน์โหลดได้อย่างชัดเจนผ่าน ModuleInstallClient API ของบริการ Google Play

    หากคุณไม่ได้เปิดใช้การดาวน์โหลดโมเดลเมื่อติดตั้งหรือขอการดาวน์โหลดอย่างชัดแจ้ง ระบบจะดาวน์โหลดโมเดลเมื่อคุณเรียกใช้ตัวระบุเป็นครั้งแรก คำขอที่คุณส่งก่อนการดาวน์โหลดเสร็จสมบูรณ์จะไม่มีผล

ระบุภาษาของสตริง

หากต้องการระบุภาษาของสตริง ให้เรียกใช้ LanguageIdentification.getClient() เพื่อรับอินสแตนซ์ของ LanguageIdentifier แล้วส่งสตริงไปยังเมธอด identifyLanguage() ของ LanguageIdentifier

เช่น

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

หากการเรียกใช้สำเร็จ ระบบจะส่งรหัสภาษา BCP-47 ไปยัง Listener ที่ดำเนินการสำเร็จ ซึ่งจะระบุภาษาของข้อความ หากไม่พบภาษาใดเลย ระบบจะส่งผ่านรหัส und (ไม่สามารถระบุได้)

โดยค่าเริ่มต้น ML Kit จะแสดงผลค่าอื่นที่ไม่ใช่ und เฉพาะในกรณีที่ระบุภาษาที่มีค่าความเชื่อมั่นอย่างน้อย 0.5 คุณเปลี่ยนเกณฑ์นี้ได้โดยการส่งออบเจ็กต์ LanguageIdentificationOptions ไปยัง getClient() ดังนี้

Kotlin

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

Java

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

รับภาษาที่เป็นไปได้ของสตริง

หากต้องการค่าความเชื่อมั่นของภาษาที่เป็นไปได้มากที่สุดของสตริง ให้รับอินสแตนซ์ของ LanguageIdentifier แล้วส่งสตริงไปยังเมธอด identifyPossibleLanguages()

เช่น

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

หากการเรียกใช้สําเร็จ ระบบจะส่งรายการออบเจ็กต์ IdentifiedLanguage ไปยัง Listener ของความสําเร็จ จากออบเจ็กต์แต่ละรายการ คุณจะดูรหัส BCP-47 ของภาษาและระดับความมั่นใจว่าสตริงเป็นภาษานั้นๆ ได้ โปรดทราบว่าค่าเหล่านี้ระบุความมั่นใจว่าสตริงทั้งหมดเป็นภาษาที่ระบุ ML Kit จะไม่ระบุภาษาหลายภาษาในสตริงเดียว

โดยค่าเริ่มต้น ML Kit จะแสดงเฉพาะภาษาที่มีค่าความเชื่อมั่นอย่างน้อย 0.01 คุณเปลี่ยนเกณฑ์นี้ได้โดยการส่งออบเจ็กต์ LanguageIdentificationOptions ไปยัง getClient()

Kotlin

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

Java

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

หากไม่มีภาษาใดที่ตรงกับเกณฑ์นี้ รายการจะมี 1 รายการซึ่งมีค่าเป็น und