Il classificatore di testo utilizza tecniche di machine learning per aiutare gli sviluppatori per classificare il testo.
Classificatore del testo della release di Android 11
Android 11 introduce un'impostazione predefinita aggiornabile
del servizio di classificazione del testo
Modulo ExtServices. Sui dispositivi con Android 11
o superiore,
getTextClassifier()
restituisce questa implementazione predefinita nel modulo ExtServices.
Consigliamo ai produttori di utilizzare questa implementazione
TextClassifierService
perché può essere aggiornato tramite OTA di Mainline
aggiornamenti.
Android 11 rimuove anche il classificatore di testo locale
un'implementazione predefinita introdotta in precedenza
Android 8.1 Di conseguenza,
getLocalTextClassifier()
restituisce un classificatore di testo NO_OP
. Invece della strategia
devi utilizzare la classe
getDefaultTextClassifierImplementation()
.
Per i produttori di dispositivi che potrebbero volere utilizzare il proprio testo per classificare
possono implementare un servizio di classificazione del testo personalizzato specificando
config_defaultTextClassifierPackage
in config.xml
. Se questa configurazione non è specificata, l'implementazione predefinita di sistema
. Le implementazioni personalizzate possono ottenere un'istanza del
dell'implementazione richiamando
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Per ulteriori informazioni, vedi
Implementazione di un servizio di classificazione del testo personalizzato.
Test
Per convalidare l'implementazione del servizio di classificazione del testo, utilizza il metodo
Test della Compatibility Test Suite (CTS) in
platform/cts/tests/tests/textclassifier/
.
Miglioramenti al classificatore di testo della release Android 10
Android 10 introduce due metodi
API TextClassifier:
suggestConversationActions
e
detectLanguage
.
Il metodo suggestConversationActions
genera le risposte suggerite
e le azioni da una determinata conversazione e il metodo detectLanguage
rileva la lingua del testo.
I file del modello per questi metodi sono mostrati di seguito e si trovano 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, procedi nel seguente modo: le seguenti:
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 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 }
Miglioramenti al classificatore di testo della release Android 9
Android 9 ha esteso il testo di classificazione introdotto in Android 8.1 con il nuovo testo di classificazione. Il servizio di classificazione del testo è la soluzione consigliata per gli OEM per fornire il supporto dei sistemi di classificazione del testo. Il servizio di classificazione del testo può far parte di qualsiasi APK di sistema e può essere aggiornata quando necessario.
Android 9 include un classificatore di testo predefinito
implementazione del servizio
(
TextClassifierImpl
) che viene utilizzato, a meno che non lo sostituisci con un
servizio di classificazione del testo personalizzato
implementazione.
Implementare un servizio di classificazione del testo personalizzato
Le seguenti sezioni descrivono come implementare un classificatore di testo personalizzato per il servizio che hai sviluppato.
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
android.permission.BIND_TEXTCLASSIFIER_SERVICE
e devono
specificare
Intenzione android.service.textclassifier.TextClassifierService
un'azione.
Imposta 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>
Creare il servizio di classificazione del testo nell'immagine di sistema
Il servizio di classificazione del testo personalizzato può essere un APK autonomo creato
nell'immagine di sistema o in una parte di un altro APK di sistema. Il sistema utilizza
PackageManager.MATCH_SYSTEM_ONLY
per risolvere il servizio.
Test
Esegui test in android.view.textclassifier.cts
.
Altre modifiche alla classificazione del testo in Android 9
Consulta Controllo dei moduli di linguaggio installati.
I file del modello Android 9 non sono compatibili con File di modello di Android 8.x.
I file del modello di Android 9 hanno il seguente pattern di denominazione:
texclassifier.[language-code].model
(ad esempio
textclassifier.en.model
)
anziché textclassifier.smartselection.en.model
in Android 8.x.
Ottieni i file di modello di classificazione del testo più recenti
Per ottenere i modelli più aggiornati, è possibile eseguire il seguente script che aggiorna i modelli TextClassifier nell'albero di origine:
external/libtextclassifier/native/models/update.sh
Classificatore di testo versione 8.1 di Android
Android 8.1 ha introdotto l'API TextClassfier per implementare il testo per la classificazione.
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);
Se invece uno sviluppatore di app imposta il classificatore di testo su null
, viene generato
viene restituito il classificatore di testo predefinito per getTextClassifier()
.
Leggi i android.view.textclassifier.TextClassifierImpl
.
TextView e WebView utilizzano TextClassifier per la selezione intelligente e il testo intelligente funzionalità di condivisione.
Modelli di rete neurale di TextClassifier
L'Android Open Source Project (AOSP) offre una serie di di classificazione 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
Lingua di preinstallazione modelli sui dispositivi
Puoi specificare un bundle 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
Controlla la lingua installata moduli
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 in un sistema
aggiornare le immagini o in modo dinamico, grazie a un componente di sistema che attiva
un aggiornamento tramite il sistema API ACTION_UPDATE_SMART_SELECTION
l'intento. Trasmettendo questo intent dell'API di sistema, il framework è in grado di
aggiorna il modello linguistico della lingua attualmente impostata. I modelli stessi
contenere la lingua supportata e un numero di versione in modo che la versione
viene usato un modello.
Non è quindi necessario precaricare i modelli per tutte le lingue perché possono essere aggiunti in un secondo momento. Se non viene trovato alcun file del modello per la lingua specificata, la classificazione del testo restituisce valori autonomi.
Test della suite di test di compatibilità
I test Android Compatibility Test Suite (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