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

Bạn có thể sử dụng Bộ công cụ máy học để xác định ngôn ngữ của một chuỗi văn bản. Bạn có thể xem 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ả ngôn ngữ của chuỗi đó.

Bộ công cụ máy học nhận dạng văn bản bằng hơn 100 ngôn ngữ trong các tập lệnh gốc. Ngoài ra, văn bản La Mã 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à tập lệnh được hỗ trợ.

Trước khi bắt đầu

  1. Đưa các nhóm Bộ công cụ máy học sau vào Podfile:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Sau khi bạn cài đặt hoặc cập nhật Nhóm của dự án, hãy mở dự án Xcode bằng cách sử dụng .xcworkspace của dự án đó. Bộ công cụ máy học được hỗ trợ trong Xcode phiên bản 12.4 trở lên.

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 lấy một thực thể của LanguageIdentification, sau đó truyền chuỗi đó đến phương thức identifyLanguage(for:).

Ví dụ:

Swift

let languageId = NaturalLanguage.languageIdentification()

languageId.identifyLanguage(for: text) { (languageCode, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  if let languageCode = languageCode, languageCode != "und" {
    print("Identified Language: \(languageCode)")
  } else {
    print("No language was identified")
  }
}

Objective-C

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyLanguageForText:text
                         completion:^(NSString * _Nullable languageCode,
                                      NSError * _Nullable error) {
                           if (error != nil) {
                             NSLog(@"Failed with error: %@", error.localizedDescription);
                             return;
                           }
                           if (![languageCode isEqualToString:@"und"] ) {
                             NSLog(@"Identified Language: %@", languageCode);
                           } else {
                             NSLog(@"No language was identified");
                           }
                         }];

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

Theo mặc định, Bộ công cụ máy học chỉ trả về giá trị không phải und khi xác định ngôn ngữ đó có 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 chuyển đối tượng LanguageIdentificationOptions đến languageIdentification(options:):

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.languageIdentification(options: options)

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

Nhận ngôn ngữ có thể có của một chuỗi

Để nhận các giá trị độ tin cậy của các ngôn ngữ có khả năng nhất của chuỗi, hãy lấy một phiên bản của LanguageIdentification rồi truyền chuỗi đó đến phương thức identifyPossibleLanguages(for:).

Ví dụ:

Swift

let languageId = NaturalLanguage.languageIdentification()

languageId.identifyPossibleLanguages(for: text) { (identifiedLanguages, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  guard let identifiedLanguages = identifiedLanguages,
    !identifiedLanguages.isEmpty,
    identifiedLanguages[0].languageCode != "und"
  else {
    print("No language was identified")
    return
  }

  print("Identified Languages:\n" +
    identifiedLanguages.map {
      String(format: "(%@, %.2f)", $0.languageCode, $0.confidence)
      }.joined(separator: "\n"))
}

Objective-C

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray * _Nonnull identifiedLanguages,
                                               NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Failed with error: %@", error.localizedDescription);
    return;
  }
  if (identifiedLanguages.count == 1
      && [identifiedLanguages[0].languageCode isEqualToString:@"und"] ) {
    NSLog(@"No language was identified");
    return;
  }
  NSMutableString *outputText = [NSMutableString stringWithFormat:@"Identified Languages:"];
  for (MLKIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

Nếu lệnh gọi thành công, danh sách đối tượng IdentifiedLanguage sẽ được chuyển đến trình xử lý tiếp tục. 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ữ đó. Xin lưu ý rằng các giá trị này cho biết độ tin cậy rằng toàn bộ chuỗi đều nằm trong ngôn ngữ cho sẵn; Bộ công cụ máy học không xác định nhiều ngôn ngữ trong một chuỗi.

Theo mặc định, Bộ công cụ máy học chỉ trả về những ngôn ngữ có giá trị tin cậy tối thiểu là 0,01. Bạn có thể thay đổi ngưỡng này bằng cách chuyển đối tượng LanguageIdentificationOptions đến languageIdentification(options:):

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.languageIdentification(options: options)

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

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.