تحديد لغة النص باستخدام حزمة تعلّم الآلة على 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 إلى ملف الدرجة على مستوى التطبيق في الوحدة، والذي يكون عادةً app/build.gradle. اختر إحدى التبعيات التالية بناءً على احتياجاتك:

    لدمج النموذج مع تطبيقك:

    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:language-id:17.0.4'
    }
    

    لاستخدام النموذج في "خدمات 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.