ระบุภาษาของข้อความด้วย 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 เลือกทรัพยากร Dependency รายการใดรายการหนึ่งต่อไปนี้ตามความต้องการ

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

    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 คุณสามารถกำหนดค่า แอปให้ดาวน์โหลดโมเดลลงในอุปกรณ์โดยอัตโนมัติหลังจากติดตั้งแอปจาก 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>
    

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

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

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

หากต้องการระบุภาษาของสตริง ให้เรียก 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 ก็ต่อเมื่อระบุภาษาด้วยค่า Confidence อย่างน้อย 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