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ể sử dụng ML Kit để xác định ngôn ngữ của chuỗi văn bản. Bạn có thể lấy ngôn ngữ có khả năng xảy ra nhất của chuỗi hoặc nhận điểm tin cậy cho tất cả các ngôn ngữ có thể có của chuỗi.

ML Kit nhận dạng văn bản ở 103 ngôn ngữ khác nhau bằng chữ viết gốc của chúng. Ngoài ra, văn bản La Mã có thể được nhận dạng bằng tiếng Ả Rập, tiếng Bungari, 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 làm như vậy bằng cách làm theo các bước trong hướng dẫn bắt đầu .
  2. Bao gồm các thư viện ML Kit trong 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 Pod của dự án, hãy nhớ mở dự án Xcode của bạn bằng cách sử dụng .xcworkspace .
  3. Trong ứng dụng của bạn, hãy nhập Firebase:

    Nhanh

    import Firebase

    Mục tiêu-C

    @import Firebase;

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 phiên bản của LanguageIdentification và sau đó chuyển chuỗi đó sang phương thức identifyLanguage(for:) .

Ví dụ:

Nhanh

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")
  }
}

Mục tiêu-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 cuộc 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. Xem danh sách đầy đủ các ngôn ngữ được hỗ trợ . Nếu không thể phát hiện được ngôn ngữ một cách chắc chắn thì mã und (không xác định) sẽ được chuyển.

Theo mặc định, Bộ ML chỉ trả về giá trị không und khi nó 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 một đối tượng LanguageIdentificationOptions tới languageIdentification(options:) :

Nhanh

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

Mục tiêu-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

Để nhận các giá trị độ tin cậy của các ngôn ngữ có khả năng xảy ra nhất trong chuỗi, hãy lấy một phiên bản của LanguageIdentification và sau đó chuyển chuỗi đó sang phương thức identifyPossibleLanguages(for:) .

Ví dụ:

Nhanh

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"))
}

Mục tiêu-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 cuộc gọi thành công, một danh sách các đố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ể lấy mã BCP-47 của ngôn ngữ và độ tin cậy rằng chuỗi đó nằm trong ngôn ngữ đó. Xem danh sách đầy đủ các ngôn ngữ được hỗ trợ . Lưu ý rằng các giá trị này biểu thị độ 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.

Theo mặc định, ML Kit 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 một đối tượng LanguageIdentificationOptions tới languageIdentification(options:) :

Nhanh

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

Mục tiêu-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 thì danh sách sẽ có một mục có giá trị und .