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:
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 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.
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