Implementa un clasificador de texto

El clasificador de texto usa técnicas de aprendizaje automático para ayudar a los desarrolladores clasificar texto.

Clasificador de texto de la versión de Android 11

Android 11 presenta una versión predeterminada que se puede actualizar implementación del servicio de clasificador de texto en el Módulo ExtServices. En dispositivos que ejecutan Android 11 o una versión posterior, getTextClassifier() muestra esta implementación predeterminada en el módulo ExtServices. Se recomienda que los fabricantes de dispositivos usen esta implementación de TextClassifierService, ya que se puede actualizar a través de la línea principal inalámbrica actualizaciones.

Android 11 también quita el clasificador de texto local implementación predeterminada que se introdujo previamente en Android 8.1 Como resultado, getLocalTextClassifier() muestra un clasificador de texto NO_OP. En lugar de la configuración de implementación, debes usar el getDefaultTextClassifierImplementation() .

Para fabricantes de dispositivos que quieran usar su propio texto de clasificación algoritmos, pueden implementar un servicio de clasificación de texto personalizado especificando config_defaultTextClassifierPackage en config.xml . Si no se especifica esta configuración, se usará la implementación predeterminada del sistema y control sobre el uso de sus datos. Las implementaciones personalizadas pueden obtener una instancia del para la implementación llamando TextClassifierService.getDefaultTextClassifierImplementation(Context) Para obtener más información, consulta Implementar un servicio de clasificador de texto personalizado

Prueba

Para validar tu implementación del servicio de clasificación de texto, usa el Pruebas del Conjunto de pruebas de compatibilidad (CTS) en platform/cts/tests/tests/textclassifier/

Mejoras del clasificador de texto de la versión de Android 10

Android 10 introduce dos métodos en el API de TextClassifier: suggestConversationActions y detectLanguage El método suggestConversationActions genera respuestas sugeridas y acciones de una conversación determinada, y el método detectLanguage detecta el idioma del texto.

Los archivos de modelo para estos métodos se muestran a continuación y se pueden encontrar en external/libtextclassifier/models/

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

Para lanzar un dispositivo con los archivos del modelo más recientes en tu imagen de fábrica, haz lo siguiente: lo siguiente:

  1. Recupera los archivos del modelo más recientes.

    external/libtextclassifier/models/update.sh
    
  2. Cambia el nombre de los archivos descargados para reemplazar los existentes.
  3. Verifica la configuración.
    adb shell dumpsys textclassification
    

    Este es un ejemplo del resultado del comando.

    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 }
    

Mejoras del clasificador de texto de la versión de Android 9

Android 9 extendió el texto de clasificación introducido en Android 8.1 con el nuevo texto de clasificación. El servicio de clasificación de texto es la forma recomendada para los OEMs para admitir el sistema de clasificación de textos. El servicio de clasificador de texto puede ser parte de cualquier APK del sistema y se pueden actualizar cuando sea necesario.

Android 9 incluye un clasificador de texto predeterminado implementación del servicio () TextClassifierImpl) que se usa, a menos que lo reemplaces por un servicio de clasificador de texto personalizado para implementarlos.

Implementa un servicio personalizado de clasificación de texto

En las siguientes secciones, se describe cómo implementar un clasificador de texto personalizado servicio que desarrolles.

Cómo extender 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) {
        ...
    }
    ...
}

Cómo definir el servicio en el manifiesto de 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>

Ten en cuenta que el servicio debe requerir android.permission.BIND_TEXTCLASSIFIER_SERVICE y debe especifica el android.service.textclassifier.TextClassifierService intent acción.

Establece un servicio de clasificación de texto predeterminado del sistema en la superposición de configuración

[config.xml]

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

Compila el servicio de clasificador de texto en la imagen del sistema

Tu servicio de clasificador de texto personalizado puede ser un APK independiente que se compila en la imagen del sistema o una parte de otro APK del sistema. El sistema usa PackageManager.MATCH_SYSTEM_ONLY para resolver el servicio.

Prueba

Ejecuta pruebas en android.view.textclassifier.cts.

Otros cambios en la clasificación de texto en Android 9

Consulta Inspección de los módulos de lenguaje instalados

Los archivos de modelo de Android 9 no son compatibles con Archivos de modelo de Android 8.x.

Los archivos de modelo de Android 9 tienen el siguiente patrón de nomenclatura: texclassifier.[language-code].model (por ejemplo, textclassifier.en.model) en lugar de textclassifier.smartselection.en.model en Android 8.x.

Obtén los archivos de modelos de clasificación de texto más recientes

Para obtener los modelos más actualizados, se puede ejecutar la siguiente secuencia de comandos, que actualiza los modelos TextClassifier en el árbol fuente:

external/libtextclassifier/native/models/update.sh

Clasificador de texto de la versión 8.1 de Android

Android 8.1 introdujo la API de TextClassfier para implementar texto clasificación.

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

Los desarrolladores pueden configurar un clasificador de texto personalizado:

tcm.setTextClassifier(customTextClassifier);

Pero si un desarrollador de apps establece el clasificador de texto en null, un sistema se muestra el clasificador de texto predeterminado para getTextClassifier().

Consulta los android.view.textclassifier.TextClassifierImpl.

TextView y WebView usan TextClassifier para la selección y el texto inteligentes compartir funciones.

Uso del clasificador de texto

Figura 1: Uso de TextClassifier

Modelos de red neuronal de TextClassifier

El Proyecto de código abierto de Android (AOSP) presenta varios componentes de para clasificar texto. Cada archivo de modelo se entrena para un solo lenguaje. Puedes instalar cualquier combinación de modelos. Los modelos se definen de la siguiente manera:

external/libtextclassifier/Android.mk

Preinstalar lenguaje modelos en dispositivos

Puedes especificar un paquete de modelos de lenguaje e instalarlos en un dispositivo:

# -----------------------
# 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)

Por ejemplo, en device/google/marlin/device-common.mk.

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

Cómo inspeccionar el idioma instalado módulos

Usa ADB para mostrar una lista de los archivos del directorio:

$ 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

Actualizaciones de modelos

Los modelos se pueden actualizar incluyendo un modelo nuevo como parte de un sistema. actualizar imágenes o, de forma dinámica, con un componente del sistema que active una actualización a través del sistema API ACTION_UPDATE_SMART_SELECTION . Al transmitir este intent de API del sistema, el framework puede actualiza el modelo del idioma establecido actualmente. Los modelos en sí contienen el idioma admitido y un número de versión, por lo que la última versión se usa el modelo de base de datos.

Por lo tanto, no es necesario precargar modelos para todos los idiomas porque se pueden agregar más adelante. Si no se encuentra ningún archivo de modelo para el idioma especificado, la clasificación de texto devuelve valores no-op.

Pruebas del Conjunto de pruebas de compatibilidad

Las pruebas asociadas del Conjunto de pruebas de compatibilidad (CTS) de Android se pueden encontrar en:

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