زبان متن را با ML Kit در iOS شناسایی کنید

می توانید از ML Kit برای شناسایی زبان رشته ای از متن استفاده کنید. می‌توانید محتمل‌ترین زبان رشته را دریافت کنید یا برای همه زبان‌های احتمالی رشته امتیازات اطمینان کسب کنید.

ML Kit متن را به 103 زبان مختلف در اسکریپت های اصلی آنها تشخیص می دهد. علاوه بر این، متن رمان‌سازی شده را می‌توان به زبان‌های عربی، بلغاری، چینی، یونانی، هندی، ژاپنی و روسی تشخیص داد.

قبل از اینکه شروع کنی

  1. اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
  2. کتابخانه‌های ML Kit را در فایل پادفایل خود قرار دهید:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    پس از نصب یا به‌روزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از .xcworkspace آن باز کنید.
  3. در برنامه خود، Firebase را وارد کنید:

    سریع

    import Firebase

    هدف-C

    @import Firebase;

زبان یک رشته را مشخص کنید

برای شناسایی زبان یک رشته، یک نمونه از LanguageIdentification دریافت کنید و سپس رشته را به متد identifyLanguage(for:) منتقل کنید.

مثلا:

سریع

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

هدف-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:) تغییر دهید:

سریع

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

هدف-C

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

زبان های ممکن یک رشته را دریافت کنید

برای به دست آوردن مقادیر اطمینان از محتمل ترین زبان های رشته، یک نمونه از LanguageIdentification دریافت کنید و سپس رشته را به متد identifyPossibleLanguages(for:) منتقل کنید.

مثلا:

سریع

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

هدف-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 به کنترل کننده ادامه ارسال می شود. از هر شی، می توانید کد BCP-47 زبان و اطمینان از اینکه رشته در آن زبان است را دریافت کنید. لیست کامل زبان های پشتیبانی شده را ببینید. توجه داشته باشید که این مقادیر اطمینان از اینکه کل رشته در زبان داده شده است را نشان می دهد. ML Kit چندین زبان را در یک رشته شناسایی نمی کند.

به طور پیش‌فرض، ML Kit فقط زبان‌هایی را با مقادیر اطمینان حداقل 0.01 برمی‌گرداند. شما می توانید این آستانه را با ارسال یک شی LanguageIdentificationOptions به languageIdentification(options:) تغییر دهید:

سریع

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

هدف-C

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

اگر هیچ زبانی این آستانه را برآورده نکند، فهرست دارای یک مورد با مقدار und خواهد بود.