Il classificatore di testo utilizza tecniche di machine learning per aiutare gli sviluppatori a classificare il testo.
Classificatore di testo della release di Android 11
Android 11 introduce un'implementazione predefinita aggiornabile del servizio di classificazione del testo nel
modulo ExtServices. Sui dispositivi con Android 11 o versioni successive, il metodo
getTextClassifier()
restituisce questa implementazione predefinita nel modulo ExtServices.
I produttori di dispositivi sono invitati a utilizzare questa implementazione di TextClassifierService
, in quanto può essere aggiornata tramite gli aggiornamenti OTA di Mainline.
Android 11 rimuove anche l'implementazione predefinita del classificatore di testo locale precedentemente introdotta in
Android 8.1. Di conseguenza,
getLocalTextClassifier()
restituisce un classificatore di testo NO_OP
. Anziché l'implementazione locale, devi utilizzare il metodo
getDefaultTextClassifierImplementation()
.
I produttori di dispositivi che potrebbero voler utilizzare i propri algoritmi di classificazione del testo possono implementare un servizio di classificazione del testo personalizzato specificando config_defaultTextClassifierPackage
nel file config.xml
. Se questa configurazione non è specificata, viene utilizzata l'implementazione di sistema predefinita. Le implementazioni personalizzate possono ottenere un'istanza dell'implementazione predefinita chiamando
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Per ulteriori informazioni, consulta
Implementare un servizio di classificazione del testo personalizzato.
Test
Per convalidare l'implementazione del servizio di classificazione del testo, utilizza i test della Compatibility Test Suite (CTS) in
platform/cts/tests/tests/textclassifier/
.
Miglioramenti al classificatore di testo nella versione di Android 10
Android 10 introduce due metodi nell'API TextClassifier:
suggestConversationActions
e
detectLanguage
.
Il metodo suggestConversationActions
genera risposte e azioni suggerite da una determinata conversazione, mentre il metodo detectLanguage
rileva la lingua del testo.
I file del modello per questi metodi sono riportati di seguito e sono disponibili in
external/libtextclassifier/models/
.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Per rilasciare un dispositivo con i file del modello più recenti nell'immagine di fabbrica, svolgi i seguenti passaggi:
Recupera i file del modello più recenti.
external/libtextclassifier/models/update.sh
- Rinomina i file scaricati per sostituire quelli esistenti.
- Verifica la configurazione.
adb shell dumpsys textclassification
Questo è un esempio dell'output di questo 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 }
Miglioramenti al classificatore di testo nella release di Android 9
Android 9 ha esteso il framework di classificazione del testo introdotto in Android 8.1 con il nuovo servizio di classificazione del testo. Il servizio di classificazione del testo è il modo consigliato per gli OEM di fornire il supporto del sistema di classificazione del testo. Il servizio di classificazione del testo può essere incluso in qualsiasi APK di sistema e può essere aggiornato quando necessario.
Android 9 include un'implementazione predefinita del servizio di classificazione del testo (
TextClassifierImpl
) che viene utilizzata a meno che non la sostituisci con un'implementazione del servizio di classificazione del testo personalizzato.
Implementare un servizio di classificazione del testo personalizzato
Le sezioni seguenti descrivono come implementare un servizio di classificazione del testo personalizzato sviluppato da te.
Estendi 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) { ... } ... }
Definisci il servizio nel file manifest di 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>
Tieni presente che il servizio deve richiedere l'autorizzazione android.permission.BIND_TEXTCLASSIFIER_SERVICE
e deve specificare l'azione di intent android.service.textclassifier.TextClassifierService
.
Impostare un servizio di classificazione del testo predefinito di sistema nell'overlay di configurazione
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Crea il servizio di classificazione del testo nell'immagine di sistema
Il servizio di classificazione del testo personalizzato può essere un APK autonomo integrato nell'immagine di sistema o parte di un altro APK di sistema. Il sistema utilizza
PackageManager.MATCH_SYSTEM_ONLY
per risolvere il servizio.
Test
Esegui i test in android.view.textclassifier.cts
.
Altre modifiche alla classificazione del testo in Android 9
Consulta la sezione Controllare i moduli di lingua installati.
I file del modello Android 9 non sono compatibili con i file del modello Android 8.x.
I file del modello di Android 9 hanno il pattern di denominazione:
texclassifier.[language-code].model
(ad esempio,
textclassifier.en.model
)
invece di textclassifier.smartselection.en.model
in Android 8.x.
Ottenere i file dei modelli di classificazione del testo più recenti
Per ottenere i modelli più aggiornati, puoi eseguire lo script seguente, che aggiorna i modelli TextClassifier nella struttura ad albero dell'origine:
external/libtextclassifier/native/models/update.sh
Classificatore di testo della release di Android 8.1
Android 8.1 ha introdotto l'API TextClassifier per implementare la classificazione del testo.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Gli sviluppatori possono impostare un classificatore di testo personalizzato:
tcm.setTextClassifier(customTextClassifier);
Tuttavia, se uno sviluppatore di app imposta il classificatore di testo su null
, per null
viene restituito un classificatore di testo predefinito di sistema.getTextClassifier()
Leggi i android.view.textclassifier.TextClassifierImpl
.
TextView e WebView utilizzano TextClassifier per le funzionalità di selezione e condivisione di testo intelligenti.

Figura 1. Utilizzo di TextClassifier
Modelli di reti neurali TextClassifier
Android Open Source Project (AOSP) include una serie di modelli di reti neurali per la classificazione del testo. Ogni file del modello viene addestrato per una singola lingua. Puoi installare qualsiasi combinazione di modelli. I modelli sono definiti in:
external/libtextclassifier/Android.mk
Preinstallare i modelli linguistici sui dispositivi
Puoi specificare un pacchetto di modelli linguistici e installarli su 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)
Ad esempio, in device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Ispeziona i moduli linguistici installati
Utilizza ADB per elencare i file nella directory:
$ 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
Aggiornamenti del modello
I modelli possono essere aggiornati includendo un nuovo modello nell'ambito di un aggiornamento dell'immagine di sistema o dinamicamente tramite un componente di sistema che attiva un aggiornamento tramite l'intent API ACTION_UPDATE_SMART_SELECTION
del sistema. Trasmettendo questa intenzione dell'API di sistema, il framework è in grado di
aggiornare il modello linguistico della lingua attualmente impostata. I modelli stessi contengono la lingua supportata e un numero di versione, in modo da utilizzare il modello appropriato più recente.
Di conseguenza, non è necessario precaricare i modelli per tutte le lingue, perché possono essere aggiunti più tardi. Se non viene trovato alcun file del modello per la lingua specificata, la classificazione del testo restituisce valori no-op.
Test della suite di test di compatibilità
I test della suite di test di compatibilità Android (CTS) associati sono disponibili in:
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