Xác định ngôn ngữ của văn bản bằng Bộ công cụ học máy trên Android

Bạn có thể dùng Bộ công cụ học máy để xác định ngôn ngữ của một chuỗi văn bản. Bạn có thể nhận được ngôn ngữ có khả năng cao nhất của chuỗi cũng như điểm tin cậy cho tất cả các ngôn ngữ có thể có của chuỗi.

Bộ công cụ học máy nhận dạng văn bản bằng hơn 100 ngôn ngữ khác nhau ở dạng chữ viết bản địa. Ngoài ra, văn bản La Mã hoá có thể được nhận dạng cho tiếng Ả Rập, tiếng Bulgaria, tiếng Trung, tiếng Hy Lạp, tiếng Hindi, tiếng Nhật và tiếng Nga. Xem danh sách đầy đủ các ngôn ngữ và chữ viết được hỗ trợ.

Theo cụmKhông được kết hợp
Tên thư việncom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
Triển khaiMô hình được liên kết tĩnh với ứng dụng của bạn tại thời điểm tạo.Mô hình được tải xuống linh hoạt thông qua Dịch vụ Google Play.
Tác động đến kích thước ứng dụngKích thước tăng khoảng 900 KB.Kích thước tăng khoảng 200 KB.
Thời gian khởi chạyMô hình này có sẵn ngay lập tức.Có thể phải đợi mô hình tải xuống trước khi sử dụng lần đầu.

Dùng thử

Trước khi bắt đầu

  1. Trong tệp build.gradle cấp dự án, hãy nhớ thêm kho lưu trữ Maven của Google vào cả hai mục buildscriptallprojects.

  2. Thêm các phần phụ thuộc cho thư viện ML Kit trên Android vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle. Chọn một trong các phần phụ thuộc sau đây dựa trên nhu cầu của bạn:

    Để gói mô hình với ứng dụng của bạn:

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

    Để sử dụng mô hình này trong Dịch vụ 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. Nếu chọn sử dụng mô hình trong Dịch vụ Google Play, bạn có thể định cấu hình ứng dụng để tự động tải mô hình xuống thiết bị sau khi ứng dụng được cài đặt từ Cửa hàng Play. Để thực hiện việc này, hãy thêm khai báo sau vào tệp AndroidManifest.xml của ứng dụng:

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

    Bạn cũng có thể kiểm tra rõ ràng phạm vi cung cấp của mô hình và yêu cầu tải xuống thông qua ModuleInstallClient API của Dịch vụ Google Play.

    Nếu bạn không bật tính năng tải mô hình xuống tại thời điểm cài đặt hoặc yêu cầu tải xuống rõ ràng, thì mô hình sẽ được tải xuống vào lần đầu tiên bạn chạy giá trị nhận dạng. Các yêu cầu bạn thực hiện trước khi quá trình tải xuống hoàn tất sẽ không có kết quả.

Xác định ngôn ngữ của một chuỗi

Để xác định ngôn ngữ của một chuỗi, hãy gọi LanguageIdentification.getClient() để lấy một phiên bản của LanguageIdentifier, rồi truyền chuỗi đó đến phương thức identifyLanguage() của LanguageIdentifier.

Ví dụ:

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

Nếu lệnh gọi thành công, mã ngôn ngữ BCP-47 sẽ được truyền đến trình nghe thành công, cho biết ngôn ngữ của văn bản. Nếu không phát hiện được ngôn ngữ nào một cách chắc chắn, mã und (không xác định) sẽ được truyền.

Theo mặc định, ML Kit chỉ trả về một giá trị khác und khi xác định ngôn ngữ với giá trị độ tin cậy ít nhất là 0,5. Bạn có thể thay đổi ngưỡng này bằng cách truyền một đối tượng LanguageIdentificationOptions đến getClient():

Kotlin

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

Java

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

Lấy các ngôn ngữ có thể có của một chuỗi

Để nhận các giá trị độ tin cậy của những ngôn ngữ có khả năng xuất hiện nhất trong một chuỗi, hãy lấy một thực thể của LanguageIdentifier rồi truyền chuỗi đó đến phương thức identifyPossibleLanguages().

Ví dụ:

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

Nếu lệnh gọi thành công, một danh sách các đối tượng IdentifiedLanguage sẽ được truyền đến trình nghe thành công. Từ mỗi đối tượng, bạn có thể lấy mã BCP-47 của ngôn ngữ và độ tin cậy rằng chuỗi đó thuộc ngôn ngữ đó. Xin lưu ý rằng những giá trị này cho biết độ tin cậy rằng toàn bộ chuỗi nằm trong ngôn ngữ đã cho; ML Kit không xác định nhiều ngôn ngữ trong một chuỗi duy nhất.

Theo mặc định, ML Kit chỉ trả về những ngôn ngữ có giá trị độ tin cậy ít nhất là 0,01. Bạn có thể thay đổi ngưỡng này bằng cách truyền một đối tượng LanguageIdentificationOptions đến getClient():

Kotlin

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

Java

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

Nếu không có ngôn ngữ nào đáp ứng ngưỡng này, thì danh sách sẽ có một mục, với giá trị und.