تحديد لغة النص باستخدام حزمة تعلّم الآلة على 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 (غير محدَّد).

بشكل تلقائي، تعرض 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.