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

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

إصدار 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: 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 .

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

[ التكوين.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 8.1 واجهة برمجة تطبيقات TextClassfier لتنفيذ تصنيف النص.

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

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

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

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