ระบุภาษาของข้อความด้วย 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 สำหรับคลัง Android ของ ML Kit ลงในไฟล์ Gradle ระดับแอปของโมดูล ซึ่งโดยปกติคือ app/build.gradle เลือกการขึ้นต่อกันรายการใดรายการหนึ่งต่อไปนี้ตามความต้องการของคุณ

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

    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>
    

    นอกจากนี้ คุณยังตรวจสอบความพร้อมใช้งานของโมเดลและขอให้ดาวน์โหลดผ่าน 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 ไปยังเครื่องมือฟังที่สำเร็จ ซึ่งระบุภาษาของข้อความ หากตรวจไม่พบภาษาใดๆ ระบบจะส่งรหัส 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 ไปยัง เครื่องมือฟังที่สำเร็จ จากออบเจ็กต์แต่ละรายการ คุณจะได้รับรหัส 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