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

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

تتعرّف أدوات تعلّم الآلة على النصوص بأكثر من 100 لغة مختلفة في نصوصها البرمجية الأصلية. بالإضافة إلى ذلك، يمكن التعرّف على النص المكتوب بأحرف لاتينية في اللغات العربية والبلغارية والصينية واليونانية والهندية واليابانية والروسية. يمكنك الاطّلاع على القائمة الكاملة للغات والنصوص البرمجية المتوافقة.

تجربة السمات والبيانات

  • جرِّب نموذج التطبيق للاطّلاع على مثال حول استخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  1. أدرِج مجموعات تعلّم الآلة التالية في Podfile:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. بعد تثبيت أو تحديث مجموعات Pods لمشروعك، افتح مشروع Xcode باستخدام .xcworkspace. تتوفّر هذه الأداة في الإصدار 12.4 من Xcode أو إصدار أحدث.

تحديد لغة السلسلة

لتحديد لغة السلسلة، احصل على مثيل LanguageIdentification، ثم اضبط السلسلة على طريقة identifyLanguage(for:).

مثال:

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyLanguageForText:text
                         completion:^(NSString * _Nullable languageCode,
                                      NSError * _Nullable error) {
                           if (error != nil) {
                             NSLog(@"Failed with error: %@", error.localizedDescription);
                             return;
                           }
                           if (![languageCode isEqualToString:@"und"] ) {
                             NSLog(@"Identified Language: %@", languageCode);
                           } else {
                             NSLog(@"No language was identified");
                           }
                         }];

إذا نجح الاتصال، يتم تمرير رمز اللغة BCP-47 إلى معالج الإكمال، مع الإشارة إلى لغة النص. وإذا تعذّر رصد أي لغة بثقة، يتم تمرير الرمز und (غير محدَّد).

تعرض أدوات تعلّم الآلة تلقائيًا قيمة ليست und إلا عندما تتعرّف على اللغة بقيمة لا تقل عن 0.5. يمكنك تغيير هذا الحدّ من خلال تمرير عنصر LanguageIdentificationOptions إلى languageIdentification(options:):

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

الحصول على اللغات المحتملة للسلسلة

للحصول على قيم الثقة للّغات المرجّحة في السلسلة، احصل على مثيل LanguageIdentification ثم أدخِل السلسلة إلى الطريقة identifyPossibleLanguages(for:).

مثال:

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray * _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 (MLKIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

إذا نجح الاستدعاء، يتم تمرير قائمة بكائنات IdentifiedLanguage إلى معالج المتابعة. من كل عنصر، يمكنك الحصول على رمز BCP-47 الخاص باللغة والتأكد من أنّ السلسلة مكتوبة بهذه اللغة. تجدر الإشارة إلى أنّ هذه القيم تشير إلى الثقة في أنّ السلسلة بأكملها باللغة المحدّدة، ولا ترصد هذه الأداة لغات متعدّدة في سلسلة واحدة.

تعرض أدوات تعلّم الآلة تلقائيًا اللغات التي تكون قيم الثقة فيها 0.01 على الأقل فقط. يمكنك تغيير هذا الحدّ من خلال تمرير عنصر LanguageIdentificationOptions إلى languageIdentification(options:):

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

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