ระบุภาษาของข้อความด้วย ML Kit บน iOS

คุณใช้ ML Kit เพื่อระบุภาษาของสตริงข้อความได้ คุณสามารถ รับภาษาที่เป็นไปได้มากที่สุดของสตริง หรือรับคะแนนความเชื่อมั่นสำหรับค่าใกล้เคียงทั้งหมด ภาษาที่เป็นไปได้ของสตริง

ML Kit จดจำข้อความในสคริปต์ในภาษาต่างๆ ได้ถึง 103 ภาษา นอกจากนี้ ตัวอักษรภาษาอังกฤษสามารถจดจำสำหรับภาษาอาหรับ บัลแกเรีย ภาษาจีน กรีก ฮินดี ญี่ปุ่น และรัสเซีย

ก่อนเริ่มต้น

  1. หากยังไม่ได้เพิ่ม Firebase ลงในแอป ให้ดำเนินการดังนี้ ขั้นตอนในคู่มือเริ่มต้นใช้งาน
  2. รวมไลบรารี ML Kit ไว้ใน Podfile ดังนี้
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    หลังจากติดตั้งหรืออัปเดตพ็อดของโปรเจ็กต์แล้ว อย่าลืมเปิด Xcode โดยใช้ .xcworkspace
  3. ในแอป ให้นำเข้า Firebase ดังนี้

    Swift

    import Firebase

    Objective-C

    @import Firebase;

ระบุภาษาของสตริง

หากต้องการระบุภาษาของสตริง รับอินสแตนซ์ของ LanguageIdentification แล้วส่งสตริงไปยัง identifyLanguage(for:) วิธี

เช่น

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

หากการโทรสำเร็จ รหัสภาษา BCP-47 คือ ไปยังตัวแฮนเดิลการเสร็จสมบูรณ์ โดยระบุภาษาของข้อความ โปรดดู รายการภาษาที่รองรับทั้งหมด หากไม่ใช่ สามารถตรวจพบภาษาได้อย่างมั่นใจ รหัส und (ไม่กำหนด) จะถูกส่ง

โดยค่าเริ่มต้น ML Kit จะแสดงผลค่าที่ไม่ใช่ und ก็ต่อเมื่อมีการระบุค่า ที่มีค่าความเชื่อมั่นอย่างน้อย 0.5 คุณเปลี่ยนแปลงเกณฑ์นี้ได้ โดยการส่งออบเจ็กต์ LanguageIdentificationOptions ไปยัง 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];

ดูภาษาที่เป็นไปได้ของสตริง

หากต้องการค่าความเชื่อมั่นของภาษาที่มีแนวโน้มมากที่สุดของสตริง ให้ใช้ อินสแตนซ์ของ LanguageIdentification แล้วส่งสตริงไปยัง identifyPossibleLanguages(for:) วิธี

เช่น

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);
}];

หากการเรียกสำเร็จ ระบบจะส่งรายการออบเจ็กต์ IdentifiedLanguage รายการไปยัง Continuation Handler จากออบเจ็กต์แต่ละรายการ คุณจะเห็นรหัส BCP-47 ของภาษา และมั่นใจว่าสตริงอยู่ในภาษานั้น โปรดดู รายการภาษาที่รองรับทั้งหมด โปรดทราบว่า ค่าเหล่านี้แสดงถึงความเชื่อมั่นว่าสตริงทั้งหมดอยู่ในรูปแบบ ภาษา; ML Kit จะระบุหลายภาษาในสตริงเดียวไม่ได้

โดยค่าเริ่มต้น ML Kit จะแสดงผลเฉพาะภาษาที่มีค่าความเชื่อมั่นอย่างน้อย 0.01 คุณสามารถเปลี่ยนเกณฑ์นี้ได้โดยการส่ง LanguageIdentificationOptions ออบเจ็กต์ไปยัง 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];

หากไม่มีภาษาที่ตรงกับเกณฑ์นี้ รายการจะมี 1 รายการพร้อมค่า und