זיהוי שפת הטקסט באמצעות 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'
    
    לאחר שתתקין או תעדכן את ה-Pods של הפרויקט שלך, הקפד לפתוח את פרויקט Xcode שלך ​​באמצעות .xcworkspace שלו.
  3. באפליקציה שלך, ייבא את Firebase:

    מָהִיר

    import Firebase

    Objective-C

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

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 מחזירה ערך non- und רק כאשר היא מזהה את השפה עם ערך ביטחון של 0.5 לפחות. אתה יכול לשנות סף זה על ידי העברת אובייקט LanguageIdentificationOptions ל- languageIdentification(options:) :

מָהִיר

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:) .

לדוגמה:

מָהִיר

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 אינה מזהה מספר שפות במחרוזת אחת.

כברירת מחדל, ML Kit מחזירה רק שפות עם ערכי ביטחון של 0.01 לפחות. אתה יכול לשנות סף זה על ידי העברת אובייקט LanguageIdentificationOptions ל- languageIdentification(options:) :

מָהִיר

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 .