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

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

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

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

جرّبه الآن

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

قبل البدء

  1. في ملف build.gradle على مستوى المشروع، تأكد من تضمين مستودع Maven في كلٍّ من القسمَين 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 (غير محدَّد).

بشكل تلقائي، لا تعرض 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 تلقائيًا اللغات التي تتضمن قيم ثقة لا تقل عن 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