זיהוי שפת הטקסט באמצעות 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. מוסיפים את התלויות של ספריות 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'
    }
    
  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 ואז מעבירים את המחרוזת ל-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.