ระบุภาษาของข้อความด้วย 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.4'
    }
    

    สําหรับการใช้โมเดลนี้ในบริการ 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 ไปยัง 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