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

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

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

לפני שאתה מתחיל

  1. אם לא כבר הוסיף Firebase באפליקציה, לעשות זאת על ידי ביצוע השלבים במדריך להפעלה .
  2. כלול את הספריות קיט ML ב Podfile שלך:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    לאחר להתקין או לעדכן שקיקים של הפרויקט שלך, להיות בטוח כדי לפתוח פרויקט Xcode שלך באמצעות שלה .xcworkspace .
  3. ייבא את Firebase באפליקציה שלך:

    מָהִיר

    import Firebase

    מטרה-ג

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

מטרה-ג

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

מָהִיר

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

מטרה-ג

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

מטרה-ג

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

מָהִיר

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

מטרה-ג

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

אם אין שפה פוגשת את הסף הזה, הרשימה תהיה פריט אחד, עם הערך und .