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

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

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

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

  1. אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android.
  2. מוסיפים את יחסי התלות של ספריות ML Kit ל-Android לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
    }

זיהוי השפה של מחרוזת

כדי לזהות את השפה של מחרוזת, מקבלים מופע של FirebaseLanguageIdentification ומעבירים את המחרוזת לשיטה identifyLanguage().

לדוגמה:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyLanguage(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(@Nullable String languageCode) {
              if (languageCode != "und") {
                Log.i(TAG, "Language: " + languageCode);
              } else {
                Log.i(TAG, "Can't identify language.");
              }
            }
          })
      .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. כדי לשנות את הסף הזה, מעבירים אובייקט FirebaseLanguageIdentificationOptions אל getLanguageIdentification():

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyLanguageConfidenceThreshold(0.34f)
                        .build());

אחזור השפות האפשריות של מחרוזת

כדי לקבל את ערכי הסמך של השפות הנפוצות ביותר במחרוזת, צריך לקבל את של FirebaseLanguageIdentification, ואז מעבירים את המחרוזת identifyAllLanguages().

לדוגמה:

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyAllLanguages(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
              for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                String language = identifiedLanguage.getLanguageCode();
                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 כדי לשנות את הסף הזה צריך להעביר אובייקט אחד (FirebaseLanguageIdentificationOptions) כדי getLanguageIdentification():

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyAllLanguagesConfidenceThreshold(0.5f)
                        .build());

אם אף שפה לא עומדת בסף הזה, הרשימה תכלול פריט אחד עם הערך und.