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

אתם יכולים להשתמש ב-ML Kit כדי לזהות את השפה של מחרוזת טקסט. אפשר את רמת הסמך הגבוהה ביותר במחרוזת וגם את דירוגי הסמך של המחרוזת.

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

רוצה לנסות?

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

  1. כוללים ב-Podfile את רצפי ה-ML Kit הבאים:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. אחרי שמתקינים או מעדכנים את קבוצות ה-Pod של הפרויקט, פותחים את פרויקט Xcode באמצעות .xcworkspace יש תמיכה ב-ML Kit ב-Xcode מגרסה 12.4 ואילך.

זיהוי השפה של מחרוזת

כדי לזהות את השפה של מחרוזת, נשתמש במופע של 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 הוא מועבר ל-handler של ההשלמה האוטומטית, שמציין את שפת הטקסט. אם לא ניתן לזהות באופן בטוח את השפה, הקוד 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 לא מזהה שפות מרובות במחרוזת אחת.

כברירת מחדל, ערכת 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