تحديد لغة النص باستخدام حزمة "تعلّم الآلة" على أجهزة iOS

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

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

جرّبه الآن

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

قبل البدء

  1. تضمين مجموعات ML Kit التالية في Podfile:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. بعد تثبيت لوحات مشروعك أو تحديثها، افتح مشروع 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 (غير محدَّد).

تعرض ML Kit تلقائيًا قيمة غير تابعة إلى 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 الخاص باللغة. والثقة في أن السلسلة بتلك اللغة. لاحظ أن تشير هذه القيم إلى الثقة في أن السلسلة بأكملها واللغة لا تتعرّف مجموعة أدوات تعلُّم الآلة على لغات متعددة في سلسلة واحدة.

تعرض ML Kit تلقائيًا اللغات التي تتضمن قيم ثقة لا تقل عن 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