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

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ể lấy ngôn ngữ có nhiều khả năng xuất hiện nhất trong chuỗi hoặc lấy điểm số tin cậy cho tất 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 ở 103 ngôn ngữ khác nhau trong chữ viết gốc. Ngoài ra, văn bản được La tinh hoá có thể được công nhận bằng 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.

Trước khi bắt đầu

  1. Nếu bạn chưa thêm Firebase vào ứng dụng của mình, hãy thực hiện bằng cách làm theo các bước trong hướng dẫn bắt đầu sử dụng.
  2. Đưa các thư viện Bộ công cụ học máy vào Podfile của bạn:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Sau khi bạn cài đặt hoặc cập nhật Nhóm của dự án, hãy nhớ mở dự án Xcode bằng cách sử dụng .xcworkspace của dự án đó.
  3. Trong ứng dụng của bạn, hãy nhập Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

Xác định ngôn ngữ của 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, rồi truyền chuỗi đó đến phương thức identifyLanguage(for:).

Ví dụ:

Swift

let languageId = NaturalLanguage.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

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

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

Nếu lệnh gọi thành công, một 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. Hãy xem danh sách đầy đủ các ngôn ngữ được hỗ trợ. Nếu không thể phát hiện tự tin ngôn ngữ nào, thì mã und (chưa xác định) sẽ được truyền.

Theo mặc định, Bộ công cụ học máy 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.naturalLanguage().languageIdentification(options: options)

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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

Để biết giá trị tin cậy của những ngôn ngữ có nhiều 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 LanguageIdentification, rồi truyền chuỗi đó vào phương thức identifyPossibleLanguages(for:).

Ví dụ:

Swift

let languageId = NaturalLanguage.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

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray<FIRIdentifiedLanguage *> * _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 (FIRIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

Nếu lệnh gọi thành công, một 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 được mã BCP-47 của ngôn ngữ và độ tin cậy rằng chuỗi bằng ngôn ngữ đó. Hãy xem danh sách đầy đủ các ngôn ngữ được hỗ trợ. Lưu ý rằng các giá trị này cho biết độ tin cậy rằng toàn bộ chuỗi bằng một ngôn ngữ nhất định; Bộ công cụ học máy không xác định nhiều ngôn ngữ trong một chuỗi duy nhất.

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 chuyển đối tượng LanguageIdentificationOptions đến languageIdentification(options:):

Swift

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

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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