אתם יכולים להשתמש ב-ML Kit כדי לזהות את השפה של מחרוזת טקסט. אתם יכולים לקבל את השפה הסבירה ביותר של המחרוזת, וגם ציוני סמך לכל השפות האפשריות של המחרוזת.
ML Kit מזהה טקסט ביותר מ-100 שפות שונות בכתב המקורי שלהן. בנוסף, אפשר לזהות טקסט באותיות לטיניות בשפות הבאות: ערבית, בולגרית, סינית, יוונית, הינדי, יפנית ורוסית. הרשימה המלאה של השפות והכתבים הנתמכים.
| בחבילה | לא מקובצים | |
|---|---|---|
| שם הספרייה | com.google.mlkit:language-id | com.google.android.gms:play-services-mlkit-language-id |
| הטמעה | המודל מקושר באופן סטטי לאפליקציה בזמן ה-build. | המודל יורד באופן דינמי דרך Google Play Services. |
| ההשפעה של גודל האפליקציה | הגודל גדל ב-900KB בערך. | הגודל גדל בכ-200KB. |
| זמן האתחול | המודל זמין באופן מיידי. | יכול להיות שתצטרכו לחכות עד שהמודל יסיים לרדת לפני השימוש הראשון. |
רוצה לנסות?
- כדי לראות דוגמה לשימוש ב-API הזה, אתם יכולים להתנסות באפליקציה לדוגמה.
לפני שמתחילים
בקובץ
build.gradleברמת הפרויקט, צריך לכלול את מאגר ה-Maven של Google בקטעיםbuildscriptו-allprojects.מוסיפים את התלויות של ספריות Android של ML Kit לקובץ Gradle ברמת האפליקציה של המודול, שבדרך כלל נמצא ב-
app/build.gradle. בוחרים באחד מהיחסי התלות הבאים, בהתאם לצרכים שלכם:כדי לכלול את המודל באפליקציה:
dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:language-id:17.0.6' }כדי להשתמש במודל ב-Google Play Services:
dependencies { // ... // Use this dependency to use the dynamically downloaded model in Google Play Services implementation 'com.google.android.gms:play-services-mlkit-language-id:17.0.0' }אם אתם בוחרים להשתמש במודל ב-Google Play Services, אתם יכולים להגדיר את האפליקציה כך שהמודל יורד אוטומטית למכשיר אחרי שהאפליקציה מותקנת מחנות Play. כדי לעשות את זה, מוסיפים את ההצהרה הבאה לקובץ
AndroidManifest.xmlשל האפליקציה:<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="langid" > <!-- To use multiple models: android:value="langid,model2,model3" --> </application>אתם יכולים גם לבדוק באופן מפורש את זמינות המודל ולבקש להוריד אותו דרך ModuleInstallClient API של Google Play Services.
אם לא תפעילו הורדות של מודלים בזמן ההתקנה או תבקשו הורדה מפורשת, המודל יורד בפעם הראשונה שתפעילו את המזהה. בקשות שתשלחו לפני שההורדה תסתיים לא יניבו תוצאות.
זיהוי השפה של מחרוזת
כדי לזהות את השפה של מחרוזת, קוראים ל-LanguageIdentification.getClient() כדי לקבל מופע של LanguageIdentifier, ואז מעבירים את המחרוזת ל-method identifyLanguage() של LanguageIdentifier.
לדוגמה:
Kotlin
val languageIdentifier = LanguageIdentification.getClient() languageIdentifier.identifyLanguage(text) .addOnSuccessListener { languageCode -> if (languageCode == "und") { Log.i(TAG, "Can't identify language.") } else { Log.i(TAG, "Language: $languageCode") } } .addOnFailureListener { // Model couldn’t be loaded or other internal error. // ... }
Java
LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(); languageIdentifier.identifyLanguage(text) .addOnSuccessListener( new OnSuccessListener<String>() { @Override public void onSuccess(@Nullable String languageCode) { if (languageCode.equals("und")) { Log.i(TAG, "Can't identify language."); } else { Log.i(TAG, "Language: " + languageCode); } } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Model couldn’t be loaded or other internal error. // ... } });
אם הקריאה מצליחה, קוד שפה בתקן BCP-47 מועבר למאזין להצלחה, ומציין את שפת הטקסט. אם לא זוהתה שפה ברמת ודאות גבוהה, מועבר הקוד und (לא נקבע).
כברירת מחדל, ערכת ML Kit מחזירה ערך שונה מ-und רק כשהיא מזהה את השפה עם ערך מהימנות של לפחות 0.5. כדי לשנות את הסף הזה, אפשר להעביר אובייקט LanguageIdentificationOptions אל getClient():
Kotlin
val languageIdentifier = LanguageIdentification .getClient(LanguageIdentificationOptions.Builder() .setConfidenceThreshold(0.34f) .build())
Java
LanguageIdentifier languageIdentifier = LanguageIdentification.getClient( new LanguageIdentificationOptions.Builder() .setConfidenceThreshold(0.34f) .build());
איך מקבלים את השפות האפשריות של מחרוזת
כדי לקבל את ערכי המהימנות של השפות הסבירות ביותר של מחרוזת, מקבלים מופע של LanguageIdentifier ואז מעבירים את המחרוזת ל-method identifyPossibleLanguages().
לדוגמה:
Kotlin
val languageIdentifier = LanguageIdentification.getClient() languageIdentifier.identifyPossibleLanguages(text) .addOnSuccessListener { identifiedLanguages -> for (identifiedLanguage in identifiedLanguages) { val language = identifiedLanguage.languageTag val confidence = identifiedLanguage.confidence Log.i(TAG, "$language $confidence") } } .addOnFailureListener { // Model couldn’t be loaded or other internal error. // ... }
Java
LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(); languageIdentifier.identifyPossibleLanguages(text) .addOnSuccessListener(new OnSuccessListener<List<IdentifiedLanguage>>() { @Override public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) { for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) { String language = identifiedLanguage.getLanguageTag(); float confidence = identifiedLanguage.getConfidence(); Log.i(TAG, language + " (" + confidence + ")"); } } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Model couldn’t be loaded or other internal error. // ... } });
אם הקריאה מצליחה, רשימה של אובייקטים מסוג IdentifiedLanguage מועברת למאזין להצלחה. מכל אובייקט, אתם יכולים לקבל את קוד BCP-47 של השפה ואת רמת הסמך שהמחרוזת היא בשפה הזו. חשוב לזכור שהערכים האלה מציינים את רמת הסבירות שכל המחרוזת היא בשפה הנתונה. ערכת ML Kit לא מזהה כמה שפות במחרוזת אחת.
כברירת מחדל, ערכת ML Kit מחזירה רק שפות עם ערכי מהימנות של לפחות 0.01. כדי לשנות את הסף הזה, אפשר להעביר אובייקט LanguageIdentificationOptions אל getClient():
Kotlin
val languageIdentifier = LanguageIdentification .getClient(LanguageIdentificationOptions.Builder() .setConfidenceThreshold(0.5f) .build())
Java
LanguageIdentifier languageIdentifier = LanguageIdentification.getClient( new LanguageIdentificationOptions.Builder() .setConfidenceThreshold(0.5f) .build());
אם אין שפה שעומדת בסף הזה, הרשימה תכלול פריט אחד עם הערך und.