Der Textklassifikator verwendet Techniken des maschinellen Lernens, um Entwicklern bei der Klassifizierung von Text zu helfen.
Textklassifikator in Android 11
In Android 11 wird im
Modul „ExtServices“ eine aktualisierbare Standardimplementierung des Textklassifizierungsdiensts eingeführt. Auf Geräten mit Android 11 oder höher gibt die Methode
getTextClassifier()
diese Standardimplementierung im Modul „ExtServices“ zurück.
Geräteherstellern wird empfohlen, diese Implementierung von TextClassifierService
zu verwenden, da sie über Mainline-Over-the-air-Updates aktualisiert werden kann.
Außerdem wird in Android 11 die Standardimplementierung des lokalen Textklassifizierers entfernt, die in
Android 8.1 eingeführt wurde. Daher gibt
getLocalTextClassifier()
einen NO_OP
-Textklassifikator zurück. Verwenden Sie anstelle der lokalen Implementierung die Methode
getDefaultTextClassifierImplementation()
.
Gerätehersteller, die ihre eigenen Algorithmen zur Textklassifizierung verwenden möchten, können einen benutzerdefinierten Textklassifizierungsdienst implementieren, indem sie in der Datei config.xml
den Wert config_defaultTextClassifierPackage
angeben. Wenn diese Konfiguration nicht angegeben ist, wird die Standardsystemimplementierung verwendet. Benutzerdefinierte Implementierungen können eine Instanz der Standardimplementierung abrufen, indem sie
TextClassifierService.getDefaultTextClassifierImplementation(Context)
aufrufen.
Weitere Informationen finden Sie unter
Benutzerdefinierten Textklassifizierungsdienst implementieren.
Testen
Verwenden Sie die CTS-Tests (Compatibility Test Suite) in
platform/cts/tests/tests/textclassifier/
, um die Implementierung des Textklassifizierungsdiensts zu validieren.
Verbesserungen am Textklassifikator in Android 10
In Android 10 werden der TextClassifier API zwei Methoden hinzugefügt:
suggestConversationActions
und
detectLanguage
.
Die Methode suggestConversationActions
generiert vorgeschlagene Antworten und Aktionen aus einer bestimmten Unterhaltung und die Methode detectLanguage
erkennt die Sprache des Textes.
Die Modelldateien für diese Methoden sind unten aufgeführt und können unter
external/libtextclassifier/models/
gefunden werden.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
So veröffentlichen Sie ein Gerät mit den neuesten Modelldateien in Ihrem Werks-Image:
Rufen Sie die neuesten Modelldateien ab.
external/libtextclassifier/models/update.sh
- Benennen Sie die heruntergeladenen Dateien um, um die vorhandenen zu ersetzen.
- Prüfen Sie die Einrichtung.
adb shell dumpsys textclassification
Hier ist ein Beispiel für die Ausgabe dieses Befehls.
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 }
Verbesserungen am Textklassifikator in Android 9
In Android 9 wurde das in Android 8.1 eingeführte Textklassifizierungs-Framework um den neuen Textklassifizierungsdienst erweitert. Der Textklassifizierungsdienst ist die empfohlene Methode für OEMs, um Unterstützung für das Textklassifizierungssystem bereitzustellen. Der Textklassifizierungsdienst kann Teil eines beliebigen System-APKs sein und bei Bedarf aktualisiert werden.
Android 9 enthält eine Standardimplementierung des Textklassifikator-Dienstes (
TextClassifierImpl
), die verwendet wird, sofern Sie sie nicht durch eine benutzerdefinierte Implementierung des Textklassifikator-Dienstes ersetzen.
Benutzerdefinierten Dienst für Textklassifizierung implementieren
In den folgenden Abschnitten wird beschrieben, wie Sie einen benutzerdefinierten Textklassifizierungsdienst implementieren.
android.service.textclassifier.TextClassifierService erweitern
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) { ... } ... }
Dienst im Android-Manifest definieren
[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>
Der Dienst muss die Berechtigung android.permission.BIND_TEXTCLASSIFIER_SERVICE
erfordern und die Intent-Aktion android.service.textclassifier.TextClassifierService
angeben.
Standard-Textklassifizierungsdienst des Systems im Konfigurations-Overlay festlegen
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Textklassifizierungsdienst in das System-Image einbinden
Ihr benutzerdefinierter Textklassifizierungsdienst kann ein eigenständiges APK sein, das in das System-Image eingebunden ist, oder ein Teil eines anderen System-APKs. Das System verwendet PackageManager.MATCH_SYSTEM_ONLY
, um den Dienst aufzulösen.
Testen
Tests in android.view.textclassifier.cts
ausführen
Weitere Änderungen bei der Textklassifizierung in Android 9
Weitere Informationen finden Sie unter Installierte Sprachmodule prüfen.
Modelldateien für Android 9 sind nicht mit Modelldateien für Android 8.x kompatibel.
Modelldateien für Android 9 haben das Benennungsmuster texclassifier.[language-code].model
(z. B. textclassifier.en.model
) anstelle von textclassifier.smartselection.en.model
in Android 8.x.
Aktuelle Dateien für Textklassifizierungsmodelle abrufen
Um die aktuellsten Modelle zu erhalten, kann das folgende Script ausgeführt werden, das die TextClassifier-Modelle im Quellbaum aktualisiert:
external/libtextclassifier/native/models/update.sh
Textklassifikator der Android-Version 8.1
Mit Android 8.1 wurde die TextClassifier API eingeführt, um die Textklassifizierung zu implementieren.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Entwickler können einen benutzerdefinierten Textklassifikator festlegen:
tcm.setTextClassifier(customTextClassifier);
Wenn ein App-Entwickler den Textklassifikator jedoch auf null
festlegt, wird für getTextClassifier()
der standardmäßige Textklassifikator des Systems zurückgegeben.
android.view.textclassifier.TextClassifierImpl
ansehen.
TextView und WebView verwenden den TextClassifier für die intelligente Auswahl und die intelligente Freigabe von Text.

Abbildung 1: Verwendung von TextClassifier
Neuronale Netzwerkmodelle für TextClassifier
Das Android Open Source Project (AOSP) bietet eine Reihe von neuronalen Netzwerkmodellen zur Textklassifizierung. Jede Modelldatei wird für eine einzelne Sprache trainiert. Sie können eine beliebige Kombination von Modellen installieren. Die Modelle sind definiert in:
external/libtextclassifier/Android.mk
Sprachmodelle auf Geräten vorinstallieren
Sie können ein Sprachmodell-Bundle angeben und auf einem Gerät installieren:
# ----------------------- # 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)
Beispiel: device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Installierte Sprachmodule prüfen
Verwenden Sie ADB, um die Dateien im Verzeichnis aufzulisten:
$ 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
Modellaktualisierungen
Modelle können entweder durch ein neues Modell im Rahmen eines System-Image-Updates oder dynamisch durch eine Systemkomponente aktualisiert werden, die ein Update über die System-API ACTION_UPDATE_SMART_SELECTION
-Intention auslöst. Durch das Senden dieser System-API-Intent kann das Framework das Sprachmodell der aktuell eingestellten Sprache aktualisieren. Die Modelle selbst enthalten die unterstützte Sprache und eine Versionsnummer, damit das jeweils neueste Modell verwendet wird.
Sie müssen also nicht alle Modelle für alle Sprachen vorab laden, da sie später hinzugefügt werden können. Wenn für die angegebene Sprache keine Modelldatei gefunden wird, gibt die Textklassifizierung Nullwerte zurück.
Compatibility Test Suite-Tests
Die zugehörigen CTS-Tests (Compatibility Test Suite) finden Sie hier:
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