تحديد لغة النص باستخدام "حزمة تعلُّم الآلة" على Android

يمكنك استخدام ML Kit لتحديد لغة سلسلة نصية. يمكنك أيضًا الحصول على اللغة الأكثر احتمالاً للسلسلة بالإضافة إلى درجات الثقة لجميع اللغات المحتملة للسلسلة.

تتعرّف حزمة تعلُّم الآلة على النصوص بأكثر من 100 لغة مختلفة وببرامجها النصية الأصلية. بالإضافة إلى ذلك، يمكن التعرّف على النص المحوّل إلى أحرف لاتينية في اللغات العربية والبلغارية والصينية واليونانية والهندية واليابانية والروسية. يمكنك الاطّلاع على القائمة الكاملة باللغات وأنظمة الكتابة المتوافقة.

مُجمَّعةغير مجمَّعة
اسم المكتبةcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
التنفيذيتم ربط النموذج بشكل ثابت بتطبيقك في وقت الإنشاء.يتم تنزيل النموذج بشكل ديناميكي من خلال "خدمات Google Play".
تأثير حجم التطبيقزيادة في الحجم تبلغ 900 كيلوبايت تقريبًازيادة في الحجم تبلغ حوالي 200 كيلوبايت
وقت التهيئةيتوفّر النموذج على الفور.قد تحتاج إلى الانتظار إلى أن يتم تنزيل النموذج قبل استخدامه للمرة الأولى.

جرّبه الآن

  • يمكنك تجربة التطبيق النموذجي للاطّلاع على مثال على كيفية استخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  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"، يجب استيفاء الشروط التالية:

    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"، يمكنك ضبط تطبيقك لتنزيل النموذج تلقائيًا على الجهاز بعد تثبيت تطبيقك من "متجر 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".

    إذا لم تفعِّل تنزيل النماذج أثناء التثبيت أو لم تطلب تنزيلها بشكل صريح، سيتم تنزيل النموذج في المرة الأولى التي تشغّل فيها المعرّف. لن يؤدي تقديم طلبات قبل اكتمال عملية التنزيل إلى عرض أي نتائج.

تحديد لغة سلسلة

لتحديد لغة سلسلة، استدعِ الدالة 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 (غير محدّد).

تلقائيًا، لا تعرض حزمة تعلُّم الآلة قيمة غير 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.