אפשר להשתמש ב-ML Kit כדי לזהות את השפה של מחרוזת טקסט. אפשר לקבל את השפה הסבירה ביותר של המחרוזת ואת ציוני הסמך של כל השפות האפשריות במחרוזת.
ML Kit מזהה טקסט ביותר מ-100 שפות שונות בסקריפטים המקוריים שלו. בנוסף, ניתן לזהות טקסט לטיני בשפות הבאות: ערבית, בולגרית, סינית, יוונית, הינדי, יפנית ורוסית. כדאי לעיין ברשימה המלאה של שפות וסקריפטים נתמכים.
אני רוצה לנסות
- שחקו עם האפליקציה לדוגמה כדי לראות דוגמה לשימוש ב-API הזה.
לפני שמתחילים
- יש לכלול את רצפי ה-ML Kit ב-Podfile:
pod 'GoogleMLKit/LanguageID', '3.2.0'
- אחרי שמתקינים או מעדכנים את ה-Pods של הפרויקט, צריך לפתוח את פרויקט ה-Xcode באמצעות
.xcworkspace
שלו. ערכת ML Kit נתמכת ב-Xcode מגרסה 12.4 ואילך.
זיהוי השפה של מחרוזת
כדי לזהות את השפה של מחרוזת, מקבלים מופע של LanguageIdentification
ומעבירים את המחרוזת ל-method 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
ולהעביר את המחרוזת ל-method 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
אובייקטים מועברת ל-handler ההמשך. מכל אובייקט תוכלו לקבל את קוד 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
.