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

يمكنك استخدام ML Kit لتحديد لغة سلسلة نصية. يمكنك الحصول على اللغة الأكثر احتمالية للسلسلة أو الحصول على درجات الثقة لجميع اللغات الممكنة للسلسلة.

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

قبل ان تبدأ

  1. إذا لم تكن قد أضفت Firebase إلى تطبيقك بالفعل، فقم بذلك باتباع الخطوات الواردة في دليل البدء .
  2. قم بتضمين مكتبات ML Kit في ملف Podfile الخاص بك:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    بعد تثبيت أو تحديث Pods لمشروعك، تأكد من فتح مشروع Xcode الخاص بك باستخدام .xcworkspace .
  3. في تطبيقك، قم باستيراد Firebase:

    سويفت

    import Firebase

    ج موضوعية

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

ج موضوعية

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)

ج موضوعية

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

ج موضوعية

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)

ج موضوعية

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

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