זיהוי שפת הטקסט באמצעות ML Kit ב-iOS

אתם יכולים להשתמש ב-ML Kit כדי לזהות את השפה של מחרוזת טקסט. אפשר את השפה הסבירה ביותר של המחרוזת או לקבל ציון מהימנות עבור כל של המחרוזת.

ML Kit מזהה טקסט ב-103 שפות שונות בכתבים המקוריים שלהן. בנוסף, המערכת יכולה לזהות טקסט רומי בערבית, בבולגרית, בסינית, ביוונית, בהינדי, ביפנית וברוסית.

לפני שמתחילים

  1. אם עדיין לא הוספתם את Firebase לאפליקציה, תוכלו לפעול לפי השלבים שמפורטים במדריך לתחילת העבודה.
  2. כוללים את ספריות ML Kit ב-Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    אחרי שמתקינים או מעדכנים את קבוצות ה-Pod של הפרויקט, חשוב לפתוח את ה-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.