تنفيذ أداة تصنيف النصوص

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

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

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

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

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

الاختبار

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

تحسينات أداة تصنيف النص في Android 10

يتيح 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

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

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

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

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

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

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

يمكن العثور على اختبارات مجموعة أدوات اختبار التوافق (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