تحديد لغة النص باستخدام حزمة تعلّم الآلة على نظام التشغيل iOS

يمكنك استخدام حزمة تعلّم الآلة لتحديد لغة سلسلة من النصوص. يمكنك الحصول على اللغة المرجّحة للسلسلة أو الحصول على نتائج الثقة لجميع لغات السلسلة.

تتعرّف حزمة "تعلُّم الآلة" على النصوص بـ 103 لغات مختلفة في نصوصها الأصلية. بالإضافة إلى ذلك، يمكن التعرّف على النص بالأحرف اللاتينية بالنسبة إلى العربية والبلغارية والصينية واليونانية والهندية واليابانية والروسية.

قبل البدء

  1. إذا لم يسبق لك إضافة Firebase إلى تطبيقك، عليك اتّباع الخطوات الواردة في دليل البدء.
  2. تضمين مكتبات ML Kit في Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    بعد تثبيت مجموعات Podfile الخاصة بمشروعك أو تعديلها، احرص على فتح مشروع 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 إلى معالج المتابعة. من كل كائن، يمكنك الحصول على رمز 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];

إذا لم تبلغ أي لغة هذا الحدّ، ستتضمّن القائمة عنصرًا واحدًا، مع القيمة und.