Le classificateur de texte utilise des techniques d'apprentissage automatique pour aider les développeurs à classer le texte.
Classificateur de texte de la version Android 11
Android 11 introduit une implémentation par défaut pouvant être mise à jour du service de classification de texte dans le module ExtServices . Sur les appareils exécutant Android 11 ou supérieur, la méthode getTextClassifier()
renvoie cette implémentation par défaut dans le module ExtServices. Il est recommandé aux fabricants d'appareils d'utiliser cette implémentation de TextClassifierService
car elle peut être mise à jour via les mises à jour Mainline OTA.
Android 11 supprime également l'implémentation par défaut du classificateur de texte local précédemment introduite dans Android 8.1 . Par conséquent, getLocalTextClassifier()
renvoie un classificateur de texte NO_OP
. Au lieu de l'implémentation locale, vous devez utiliser la méthode getDefaultTextClassifierImplementation()
.
Pour les fabricants d'appareils qui souhaitent utiliser leurs propres algorithmes de classification de texte, ils peuvent implémenter un service de classification de texte personnalisé en spécifiant config_defaultTextClassifierPackage
dans le fichier config.xml
. Si cette configuration n'est pas spécifiée, l'implémentation système par défaut est utilisée. Les implémentations personnalisées peuvent obtenir une instance de l'implémentation par défaut en appelant TextClassifierService.getDefaultTextClassifierImplementation(Context)
. Pour plus d'informations, voir Implémentation d'un service de classification de texte personnalisé .
Essai
Pour valider votre implémentation du service de classification de texte, utilisez les tests CTS (Compatibility Test Suite) dans platform/cts/tests/tests/textclassifier/
.
Améliorations du classificateur de texte de la version Android 10
Android 10 introduit deux méthodes dans l'API TextClassifier : suggestConversationActions
et detectLanguage
. La méthode suggestConversationActions
génère des suggestions de réponses et d'actions à partir d'une conversation donnée et la méthode detectLanguage
détecte la langue du texte.
Les fichiers de modèle pour ces méthodes sont présentés ci-dessous et peuvent être trouvés dans external/libtextclassifier/models/
.
-
suggestionConversationActions
:actions_suggestions.universal.model
-
detectLanguage
:lang_id.model
Pour libérer un appareil avec les derniers fichiers de modèle dans votre image d'usine, procédez comme suit :
Récupérez les derniers fichiers de modèle.
external/libtextclassifier/models/update.sh
- Renommez les fichiers téléchargés pour remplacer ceux existants.
- Vérifiez la configuration.
adb shell dumpsys textclassification
Ceci est un exemple de la sortie de cette commande.
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 }
Améliorations du classificateur de texte de la version Android 9
Android 9 a étendu le cadre de classification de texte introduit dans Android 8.1 avec le nouveau service de classification de texte. Le service de classification de texte est le moyen recommandé pour les OEM de fournir une prise en charge du système de classification de texte. Le service de classification de texte peut faire partie de n'importe quel APK système et peut être mis à jour si nécessaire.
Android 9 inclut une implémentation de service de classification de texte par défaut ( TextClassifierImpl
) qui est utilisée sauf si vous la remplacez par une implémentation de service de classification de texte personnalisée.
Implémentation d'un service de classification de texte personnalisé
Les sections suivantes décrivent comment implémenter un service de classificateur de texte personnalisé que vous développez.
Étendre 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) { ... } ... }
Définir le service dans le manifeste 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>
Notez que le service doit nécessiter l'autorisation android.permission.BIND_TEXTCLASSIFIER_SERVICE
et doit spécifier l'action d'intention android.service.textclassifier.TextClassifierService
.
Définir un service de classification de texte par défaut du système dans la superposition de configuration
[ config.xml ]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Créer le service de classification de texte dans l'image système
Votre service de classification de texte personnalisé peut être un APK autonome intégré à l'image système ou une partie d'un autre APK système. Le système utilise PackageManager.MATCH_SYSTEM_ONLY
pour résoudre le service.
Essai
Exécutez des tests dans android.view.textclassifier.cts
.
Autres changements de classification de texte dans Android 9
Reportez-vous à la section Inspection des modules de langue installés .
Les fichiers de modèle Android 9 sont incompatibles avec les fichiers de modèle Android 8.x.
Les fichiers de modèle Android 9 ont le modèle de dénomination : texclassifier.[language-code].model
(par exemple, textclassifier.en.model
) au lieu de textclassifier.smartselection.en.model
dans Android 8.x.
Obtention des derniers fichiers de modèle de classification de texte
Pour obtenir les modèles les plus à jour, le script suivant peut être exécuté, ce qui met à jour les modèles TextClassifier dans l'arborescence source :
external/libtextclassifier/native/models/update.sh
Classificateur de texte Android version 8.1
Android 8.1 a introduit l'API TextClassfier pour implémenter la classification de texte.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Les développeurs peuvent définir un classificateur de texte personnalisé :
tcm.setTextClassifier(customTextClassifier);
Mais si un développeur d'application définit le classificateur de texte sur null
, un classificateur de texte par défaut du système est renvoyé pour getTextClassifier()
.
Voir android.view.textclassifier.TextClassifierImpl
.
TextView et WebView utilisent TextClassifier pour une sélection intelligente et des fonctionnalités de partage de texte intelligent.

Figure 1. Utilisation de TextClassifier
Modèles de réseaux neuronaux TextClassifier
Le projet Android Open Source (AOSP) propose un certain nombre de modèles de réseaux de neurones pour classer le texte. Chaque fichier de modèle est formé pour une seule langue. Vous pouvez installer n'importe quelle combinaison de modèles. Les modèles sont définis dans :
external/libtextclassifier/Android.mk
Préinstallation de modèles de langue sur les appareils
Vous pouvez spécifier un ensemble de modèles de langage et les installer sur un appareil :
# ----------------------- # 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)
Par exemple, dans device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files PRODUCT_PACKAGES += \ textclassifier.smartselection.bundle1
Inspection des modules de langue installés
Utilisez ADB pour lister les fichiers dans le répertoire :
$ 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
Mises à jour du modèle
Les modèles peuvent être mis à jour soit en incluant un nouveau modèle dans le cadre d'une mise à jour d'image système, soit de manière dynamique en ayant un composant système qui déclenche une mise à jour via l'intention API ACTION_UPDATE_SMART_SELECTION
système. En diffusant cette intention d'API système, le framework est capable de mettre à jour le modèle de langue de la langue actuellement définie. Les modèles eux-mêmes contiennent la langue prise en charge et un numéro de version afin que le dernier modèle approprié soit utilisé.
Vous n'avez donc pas besoin de précharger des modèles pour toutes les langues, car ils peuvent être ajoutés ultérieurement. Si aucun fichier de modèle n'est trouvé pour la langue spécifiée, la classification de texte renvoie des valeurs sans opération.
Tests de la suite de tests de compatibilité
Les tests Android Compatibility Test Suite (CTS) associés se trouvent dans :
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