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

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

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

בחבילהלא מקובצים
שם הספרייהcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
הטמעההמודל מקושר באופן סטטי לאפליקציה שלכם בזמן ה-build.המודל מוריד באופן דינמי דרך 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, ואז להעביר את המחרוזת ל-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 ולהעביר את המחרוזת לשיטה 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.