זיהוי שפת הטקסט באמצעות 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 בקטע buildscript וגם בקטע allprojects.

  2. הוספת יחסי התלות של ספריות ML Kit Android למודול של המודול ברמת האפליקציה, שהוא בדרך כלל 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>
    

    אפשר גם לבדוק באופן מפורש את זמינות המודל ולבקש הורדה דרך API של ModuleInstallClient ב-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