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ể xem ngôn ngữ phù hợp nhất của chuỗi cũng như điểm số tin cậy cho tất cả các ngôn ngữ có thể sử dụng của chuỗi.

Bộ công cụ học máy nhận dạng văn bản ở hơn 100 ngôn ngữ bằng chữ viết gốc. Ngoài ra, người dùng có thể nhận dạng văn bản được La-tinh hoá 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à tập lệnh được hỗ trợ.

Gộp chungKhông nhóm
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 xây dựng.Mô hình được tải xuống linh động thông qua Dịch vụ Google Play.
Tác động của kích thước ứng dụngTăng kích thước khoảng 900 KB.Tăng kích thước khoảng 200 KB.
Thời gian khởi chạyMô hình có sẵn ngay lập tức.Có thể phải đợi tải mô hình xuống trước khi sử dụng lần đầu tiên.

Dùng thử

Trước khi bắt đầu

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

  2. Thêm các phần phụ thuộc cho thư viện Android của Bộ công cụ học máy vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle. Hãy chọn một trong các phần phụ thuộc sau tuỳ theo nhu cầu của bạn:

    Cách kết hợp mô hình với ứng dụng:

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

    Cách 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 nội dung 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 tình trạng sẵn có 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 cho phép tải mô hình xuống khi 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 trong lần đầu tiên bạn chạy giá trị nhận dạng. Yêu cầu bạn thực hiện trước khi tải xuống hoàn tất không có kết quả nào.

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

Để xác định ngôn ngữ của một chuỗi, hãy gọi LanguageIdentification.getClient() để nhận bản sao của LanguageIdentifier, sau đó 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, thì mã und (chưa xác định) sẽ được chuyển.

Theo mặc định, Bộ công cụ học máy chỉ trả về một giá trị không phải und khi xác định ngôn ngữ có giá trị tin cậy tối thiểu là 0,5. Bạn có thể thay đổi ngưỡng này bằng cách truyền đố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ể dùng của một chuỗi

Để biết giá trị tin cậy của những ngôn ngữ có khả năng xuất hiện cao nhất trong một chuỗi, hãy lấy một bản sao 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, danh sách các đối tượng IdentifiedLanguage sẽ được chuyển đến trình nghe thành công. Từ mỗi đối tượng, bạn có thể nhận mã BCP-47 của ngôn ngữ đó và độ tin cậy của chuỗi bằng ngôn ngữ đó. Lưu ý rằng các giá trị này cho biết độ tin cậy của việc toàn bộ chuỗi đều bằng ngôn ngữ đã cho; Bộ công cụ học máy không xác định nhiều ngôn ngữ trong một chuỗi.

Theo mặc định, Bộ công cụ học máy chỉ trả về các 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 đố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 có một mục với giá trị und.