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

يمكنك استخدام أدوات تعلّم الآلة لتحديد لغة سلسلة من النصوص. ويمكنك الحصول على لغة السلسلة، بالإضافة إلى نتائج الثقة لجميع اللغات المحتملة للسلسلة.

تتعرّف أدوات تعلّم الآلة على النصوص بأكثر من 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.5'
    }
    

    لاستخدام النموذج في "خدمات 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 الخاص باللغة والتأكد من أنّ السلسلة في تلك اللغة. يُرجى العِلم أنّ هذه القيم تشير إلى الثقة في أنّ السلسلة كاملةً باللغة المحدّدة، إلا أنّ أدوات تعلّم الآلة لا تتعرّف على لغات متعددة في سلسلة واحدة.

تعرض أدوات تعلّم الآلة تلقائيًا اللغات التي تكون فيها قيم الثقة 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.