تنفيذ مصنِّف النص

تستخدِم أداة تصنيف النصوص تقنيات تعلُّم الآلة لمساعدة المطوّرين في تصنيف النصوص.

أداة تصنيف النصوص في إصدار Android 11

يقدّم نظام التشغيل Android 11 تنفيذًا افتراضيًا قابلاً للتحديث لخدمة تصنيف النصوص في وحدة ExtServices. على الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو إصدار أحدث، تعرض الطريقة getTextClassifier() هذا التنفيذ التلقائي في وحدة ExtServices. ننصح مصنعي الأجهزة باستخدام هذا التنفيذ لسمة TextClassifierService لأنّه يمكن تحديثه من خلال تحديثات OTA التلقائية لنظام التشغيل Mainline.

يزيل نظام التشغيل Android 11 أيضًا ميزة "تصنيف النصوص" المحلية التي تم تنفيذها تلقائيًا في الإصدار السابق Android 8.1. ونتيجةً لذلك، تعرِض دالة getLocalTextClassifier() تصنيف نص NO_OP. بدلاً من عملية التنفيذ المحلية، عليك استخدام الطريقة getDefaultTextClassifierImplementation().

بالنسبة إلى الشركات المصنّعة للأجهزة التي قد تريد استخدام خوارزمياتها الخاصة لتصنيف الخوارزميات، يمكنها تنفيذ خدمة مصنِّف نص مخصّص من خلال تحديد config_defaultTextClassifierPackage في ملف config.xml. إذا لم يتم تحديد هذه الإعدادات، يتم استخدام طريقة التنفيذ التلقائية للنظام. يمكن لعمليات التنفيذ المخصّصة الحصول على مثال لعملية التنفيذ التلقائية من خلال استدعاء TextClassifierService.getDefaultTextClassifierImplementation(Context). لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تنفيذ خدمة تصنيف نص مخصّصة.

الاختبار

للتحقّق من تنفيذ خدمة مصنِّف النص، يُرجى استخدام اختبارات مجموعة اختبار التوافق (CTS) في platform/cts/tests/tests/textclassifier/.

تحسينات على أداة تصنيف النصوص في الإصدار 10 من نظام التشغيل Android

يقدّم نظام التشغيل Android 10 طريقتَين لواجهة برمجة التطبيقات TextClassifier API: suggestConversationActions و detectLanguage. تُنشئ الطريقة suggestConversationActions ردودًا ومقترَحات وإجراءات من محادثة معيّنة، وترصد الطريقة detectLanguage لغة النص.

يتم عرض ملفات النماذج لهذه الطرق أدناه ويمكن العثور عليها في external/libtextclassifier/models/.

  • suggestionConversationActions: actions_suggestions.universal.model
  • detectLanguage: lang_id.model

لإصدار جهاز يتضمن أحدث ملفات الطراز في صورة المصنع، يمكنك إجراء ما يلي:

  1. استرجاع أحدث ملفات النماذج

    external/libtextclassifier/models/update.sh
    
  2. أعِد تسمية الملفات التي تم تنزيلها لاستبدال الملفات الحالية.
  3. تأكَّد من صحة الإعداد.
    adb shell dumpsys textclassification
    

    وهذا نموذج لمخرجات ذلك الأمر.

    TextClassifierImpl:
      Annotator model file(s):
        ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und }
        ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en }
      LangID model file(s):
        ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und }
      Actions model file(s):
        ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }

تحسينات مصنِّف النص لإصدار Android 9

وسّعَ Android 9 إطار عمل تصنيف النصوص الذي تم تقديمه في Android 8.1 من خلال خدمة مصنِّف النص الجديدة. وتُعد خدمة مصنِّف النص الطريقة التي يُنصح بها للمصنّعين الأصليين للأجهزة لتقديم الدعم لنظام تصنيف النص. يمكن أن تكون خدمة تصنيف النصوص جزءًا من أي حزمة APK للنظام ويمكن تحديثها عند الضرورة.

يتضمّن Android 9 تطبيقًا تلقائيًا لخدمة مصنِّف النص ( TextClassifierImpl) يتم استخدامه ما لم تستبدله بعملية تنفيذ خدمة مصنِّف نص مخصّص.

تنفيذ خدمة تصنيف نص مخصّصة

توضّح الأقسام التالية كيفية تنفيذ خدمة مصنّفة نصية مخصّصة تقوم بتطويرها.

إضافة فئة إلى android.service.textclassifier.TextClassifierService

public final class TextClassifierServiceImpl
        extends TextClassifierService {

    // Returns TextClassifierImpl.
    private final TextClassifier tc = getLocalTextClassifier();

    @Override
    public void onSuggestSelection(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextSelection.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextSelection> callback) {
        CompletableFuture.supplyAsync(
                () -> tc.suggestSelection(request))
                .thenAccept(r -> callback.onSuccess(r));
    }

    @Override
    public void onClassifyText(
            @Nullable TextClassificationSessionId sessionId,
		@NonNull TextClassification.Request request,
		@NonNull CancellationSignal cancellationSignal,
		@NonNull Callback<TextClassification> callback) {
        ...
    }

    @Override
    public void onGenerateLinks(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextLinks.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextLinks> callback) {
        ...
    }
    ...
}

تحديد الخدمة في بيان Android

[AndroidManifest.xml]

<service android:name=".TextClassifierServiceImpl"
  android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE">
    <intent-filter>
      <action android:name=
        "android.service.textclassifier.TextClassifierService"/>
    </intent-filter>
</service>

يُرجى العِلم أنّ الخدمة يجب أن تطلب الحصول على إذن "android.permission.BIND_TEXTCLASSIFIER_SERVICE" وأن تحدّد إجراء الهدف android.service.textclassifier.TextClassifierService.

ضبط خدمة تصنيف النصوص التلقائية للنظام في تراكب الإعدادات

[config.xml]

<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

تضمين خدمة مصنِّف النص في صورة النظام

يمكن أن تكون خدمة مصنِّف النص المخصّص حزمة APK مستقلة مضمّنة في صورة النظام أو جزءًا من حزمة APK خاصة بنظام آخر. يستخدم النظام PackageManager.MATCH_SYSTEM_ONLY لحلّ الخدمة.

الاختبار

يمكنك إجراء الاختبارات في android.view.textclassifier.cts.

تغييرات أخرى في تصنيف النصوص في Android 9

يُرجى مراجعة القسم فحص وحدات اللغة المثبَّتة.

لا تتوافق ملفات طُرز Android 9 مع ملفات طُرز Android 8.x.

تتّبع ملفات طُرز Android 9 نمط التسمية: texclassifier.[language-code].model (على سبيل المثال، textclassifier.en.model) بدلاً من textclassifier.smartselection.en.model في Android 8.x.

الحصول على أحدث ملفات نماذج تصنيف النصوص

للحصول على أحدث النماذج، يمكن تشغيل النص البرمجي التالي، مما يؤدي إلى تعديل نماذج TextClassifier في شجرة المصدر:

external/libtextclassifier/native/models/update.sh

أداة تصنيف النصوص في الإصدار 8.1 من نظام التشغيل Android

تم تقديم واجهة برمجة التطبيقات TextClassfier في Android 8.1 لتنفيذ تصنيف النص.

TextClassificationManager tcm =
    context.getSystemService(TextClassificationManager.class);
TextClassifier classifier = tcm.getTextClassifier();
TextSelection selection = classifier.suggestSelection(...);
TextClassification classification = classifier.classifyText(...);

يمكن للمطوّرين ضبط مصنِّف نص مخصّص:

tcm.setTextClassifier(customTextClassifier);

أمّا إذا ضبط مطوِّر التطبيقات مصنِّف النص على null، فسيتم عرض مصنِّف نص تلقائي للنظام في getTextClassifier().

يمكنك الاطّلاع على android.view.textclassifier.TextClassifierImpl.

يستخدم كلّ من TextView وWebView فئة TextClassifier لتوفير ميزتَي الاختيار الذكي ومشاركة النص الذكي.

استخدام مصنِّف النص

الشكل 1. استخدام TextClassifier

نماذج الشبكة العصبونية في أداة تصنيف النص

يضمّ "المشروع المفتوح المصدر لنظام Android" ‏(AOSP) عددًا من نماذج الشبكات العصبية لتصنيف النصوص. يتم تدريب كل ملف نموذج على لغة واحدة. يمكنك تثبيت أي مجموعة من النماذج. يتم تحديد النماذج في:

external/libtextclassifier/Android.mk

تثبيت نماذج اللغة مُسبَقًا على الأجهزة

يمكنك تحديد مجموعة من النماذج اللغوية وتثبيتها على جهاز:

# -----------------------
# Smart Selection bundles
# -----------------------

include $(CLEAR_VARS)
LOCAL_MODULE           := textclassifier.smartselection.bundle1
LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model
include $(BUILD_STATIC_LIBRARY)

على سبيل المثال، في device/google/marlin/device-common.mk.

# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
    textclassifier.smartselection.bundle1

فحص وحدات اللغة المثبّتة

استخدِم ADB لعرض الملفات في الدليل:

$ adb shell ls -l /etc/textclassifier
-rw-r--r-- 1 root root ... textclassifier.smartselection.de.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.en.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.es.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model

تعديلات النموذج

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

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

اختبارات مجموعة أدوات اختبار التوافق

يمكن العثور على اختبارات "مجموعة أدوات اختبار التوافق مع Android" (CTS) المرتبطة في:

cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java

cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java

  • testSmartSelection
  • testSmartSelection_dragSelection
  • testSmartSelection_resetSelection