El clasificador de texto usa técnicas de aprendizaje automático para ayudar a los desarrolladores a clasificar el texto.
Clasificador de texto de la versión de Android 11
Android 11 presenta una implementación predeterminada actualizable del servicio de clasificador de texto en el
módulo ExtServices. En dispositivos que ejecutan Android 11 o versiones posteriores, el método getTextClassifier()
muestra esta implementación predeterminada en el módulo ExtServices.
Se recomienda a los fabricantes de dispositivos que usen esta implementación de TextClassifierService
, ya que puede actualizarse de manera inalámbrica por la línea principal.
Android 11 también quita la implementación predeterminada del clasificador de texto local que se introdujo previamente en
Android 8.1. Como resultado, getLocalTextClassifier()
muestra un clasificador de texto NO_OP
. En lugar de la implementación local, debes usar el método
getDefaultTextClassifierImplementation()
.
Para los fabricantes de dispositivos que quieran usar sus propios algoritmos de clasificación de texto, pueden implementar un servicio de clasificación de texto personalizado especificando config_defaultTextClassifierPackage
en el archivo config.xml
. Si no se especifica esta configuración, se usa la implementación predeterminada del sistema. Las implementaciones personalizadas pueden obtener una instancia de la implementación predeterminada llamando a
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Para obtener más información, consulta
Cómo implementar un servicio personalizado de clasificación de texto.
Prueba
Para validar la implementación del servicio de clasificador de texto, usa las 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 presenta dos métodos a la API de TextClassifier: suggestConversationActions
y detectLanguage
.
El método suggestConversationActions
genera respuestas y acciones sugeridas a partir 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 de modelo más recientes en tu imagen de fábrica, haz lo siguiente:
Recupera los archivos del modelo más recientes.
external/libtextclassifier/models/update.sh
- Cambia el nombre de los archivos descargados para reemplazar los existentes.
- Verifica la configuración.
adb shell dumpsys textclassification
Este es un ejemplo del resultado de ese 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 marco de trabajo de clasificación de texto que se introdujo en Android 8.1 con el nuevo servicio de clasificación de texto. El servicio de clasificador de texto es la forma recomendada para que los OEMs proporcionen compatibilidad con el sistema de clasificación de texto. El servicio de clasificador de texto puede ser parte de cualquier APK del sistema y se puede actualizar cuando sea necesario.
Android 9 incluye una implementación predeterminada del servicio de clasificador de texto (
TextClassifierImpl
) que se usa, a menos que la reemplaces por una implementación personalizada del servicio de clasificador de texto.
Implementa un servicio personalizado de clasificación de texto
En las siguientes secciones, se describe cómo implementar un servicio personalizado de clasificador de texto que desarrolles.
Extiende 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 el permiso android.permission.BIND_TEXTCLASSIFIER_SERVICE
y especificar la acción de intent android.service.textclassifier.TextClassifierService
.
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 del 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 Cómo inspeccionar los módulos de idioma instalados.
Los archivos de modelo de Android 9 no son compatibles con los archivos de modelo de Android 8.x.
Los archivos de modelos de Android 9 tienen el patrón de nombres 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 de TextClassifier en el árbol de origen:
external/libtextclassifier/native/models/update.sh
Clasificador de texto de la versión 8.1 de Android
En Android 8.1, se introdujo la API de TextClassfier para implementar la clasificación de texto.
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);
Sin embargo, si un desarrollador de apps establece el clasificador de texto en null
, se muestra un clasificador de texto predeterminado del sistema para getTextClassifier()
.
Consulta los android.view.textclassifier.TextClassifierImpl
.
TextView y WebView usan TextClassifier para las funciones de selección inteligente y uso compartido de texto inteligente.
Modelos de red neuronal de TextClassifier
El Proyecto de código abierto de Android (AOSP) presenta varios modelos de redes neuronales para clasificar texto. Cada archivo de modelo se entrena para un solo idioma. Puedes instalar cualquier combinación de modelos. Los modelos se definen de la siguiente manera:
external/libtextclassifier/Android.mk
Preinstala modelos de lenguaje en los 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 los módulos de lenguaje instalados
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 una actualización de imagen del sistema o de forma dinámica con un componente del sistema que active una actualización a través del intent API ACTION_UPDATE_SMART_SELECTION
del sistema. Cuando transmites este intent de API del sistema, el framework puede actualizar el modelo de idioma del idioma configurado actualmente. Los modelos contienen el idioma compatible y un número de versión, por lo que se usa el último modelo adecuado.
Por lo tanto, no necesitas 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 muestra 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 los siguientes lugares:
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