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

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

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

בחבילהלא מקובצים
שם הספרייהcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
הטמעההמודל מקושר באופן סטטי לאפליקציה בזמן הבנייה.המודל מורד באופן דינמי דרך Google Play Services.
השפעה על גודל האפליקציההגודל גדל בכ-900KB.הגודל גדל בכ-200KB.
זמן האתחולהמודל זמין באופן מיידי.יכול להיות שתצטרכו לחכות עד שהמודל יורד לפני השימוש הראשון.

רוצה לנסות?

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

  1. בקובץ build.gradle ברמת הפרויקט, מוודאים שמאגר Maven של Google כלול בקטעים buildscript ו-allprojects.

  2. מוסיפים את התלויות של ספריות ML Kit ל-Android לקובץ 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'
    }
    
  3. אם בוחרים להשתמש במודל ב-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, ואז מעבירים את המחרוזת לשיטה 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 ואז להעביר את המחרוזת לשיטה 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.