Der Textklassifikator verwendet Machine-Learning-Techniken, um Entwicklern bei der Klassifizierung von Text zu helfen.
Textklassifikator für Android 11
In Android 11 wird eine aktualisierbare Standard
Implementierung des Textklassifikator-Dienstes im
Modul ExtServices eingeführt. Auf Geräten mit Android 11
oder höher gibt die
getTextClassifier()
Methode diese Standardimplementierung im Modul ExtServices zurück.
Gerätehersteller sollten diese Implementierung von TextClassifierService verwenden, da sie über Mainline-OTA-Updates aktualisiert werden kann.
In Android 11 wird auch die lokale Standardimplementierung des Textklassifikators
entfernt, die zuvor in
Android 8.1 eingeführt wurde. Daher gibt
getLocalTextClassifier()
einen NO_OP Textklassifikator zurück. Verwenden Sie stattdessen die
Methode
getDefaultTextClassifierImplementation().
Gerätehersteller, die ihre eigenen Algorithmen zur Textklassifizierung verwenden möchten, können einen benutzerdefinierten Textklassifikator-Dienst implementieren, indem sie config_defaultTextClassifierPackage in der Datei config.xml angeben. Wenn diese Konfiguration nicht angegeben ist, wird die Standardimplementierung des Systems verwendet. Benutzerdefinierte Implementierungen können eine Instanz der Standard
Implementierung abrufen, indem sie
TextClassifierService.getDefaultTextClassifierImplementation(Context) aufrufen.
Weitere Informationen finden Sie unter
Benutzerdefinierten Textklassifikator-Dienst implementieren.
Test
Verwenden Sie die
Compatibility Test Suite (CTS)-Tests in
platform/cts/tests/tests/textclassifier/, um Ihre Implementierung des Textklassifikator-Dienstes zu validieren.
Verbesserungen am Textklassifikator für Android 10
In Android 10 werden der
TextClassifier API zwei Methoden hinzugefügt:
suggestConversationActions
und
detectLanguage.
Die Methode suggestConversationActions generiert Vorschläge für Antworten und Aktionen aus einer bestimmten Unterhaltung. Die Methode detectLanguage erkennt die Sprache des Texts.
Die Modelldateien für diese Methoden sind unten aufgeführt und befinden sich in
external/libtextclassifier/models/.
suggestionConversationActions:actions_suggestions.universal.modeldetectLanguage:lang_id.model
So stellen Sie ein Gerät mit den neuesten Modelldateien in Ihrem Factory-Image bereit:
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
Dies 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 für Android 9
In Android 9 wurde das in Android 8.1 eingeführte Framework zur Text klassifizierung um den neuen Text klassifikator-Dienst erweitert. Der Textklassifikator-Dienst ist die empfohlene Methode für OEMs, Unterstützung für das Textklassifizierungssystem bereitzustellen. Der Textklassifikator-Dienst kann Teil einer beliebigen System-APK 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 Textklassifikator-Dienst implementieren
In den folgenden Abschnitten wird beschrieben, wie Sie einen benutzerdefinierten Textklassifikator-Dienst implementieren, den Sie entwickeln.
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.
Standardmäßigen Textklassifikator-Dienst im Konfigurations-Overlay festlegen
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Textklassifikator-Dienst in das System-Image einbinden
Ihr benutzerdefinierter Textklassifikator-Dienst kann eine eigenständige APK sein, die in das System-Image eingebunden ist, oder Teil einer anderen System-APK. Das System verwendet PackageManager.MATCH_SYSTEM_ONLY, um den Dienst aufzulösen.
Test
Führen Sie Tests in android.view.textclassifier.cts aus.
Weitere Änderungen an der Textklassifizierung in Android 9
Weitere Informationen finden Sie unter Installierte Sprachmodule prüfen.
Android 9-Modelldateien sind nicht mit Android 8.x-Modelldateien kompatibel.
Android 9-Modelldateien haben das Namensmuster texclassifier.[language-code].model (z. B. textclassifier.en.model) anstelle von textclassifier.smartselection.en.model in Android 8.x.
Neueste Modelldateien für die Textklassifizierung abrufen
Mit dem folgenden Skript können Sie die neuesten Modelle abrufen, mit denen die TextClassifier-Modelle im Quellcodebaum aktualisiert werden:
external/libtextclassifier/native/models/update.sh
Textklassifikator für Android 8.1
In Android 8.1 wurde die TextClassfier 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 auf null setzt, wird für getTextClassifier() ein standardmäßiger Textklassifikator des Systems zurückgegeben.
Weitere Informationen finden Sie unter android.view.textclassifier.TextClassifierImpl.
TextView und WebView verwenden TextClassifier für die Funktionen zur intelligenten Auswahl und zum intelligenten Teilen von Text.
Abbildung 1 : TextClassifier-Nutzung
Neuronale Netzwerkmodelle für TextClassifier
Das Open-Source-Projekt für Android (Android Open Source Project, AOSP) bietet eine Reihe von neuronalen Netzwerkmodellen zur Klassifizierung von Text. Jede Modelldatei wird für eine einzelne Sprache trainiert. Sie können eine beliebige Kombination von Modellen installieren. Die Modelle sind in folgender Datei definiert:
external/libtextclassifier/Android.mk
Sprachmodelle auf Geräten vorinstallieren
Sie können ein Bundle von Sprachmodellen 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: in device/google/marlin/device-common.mk.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1Installierte 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, das als Teil eines System-Image-Updates enthalten ist, oder dynamisch durch eine Systemkomponente aktualisiert werden, die ein Update über den System-Intent API ACTION_UPDATE_SMART_SELECTION auslöst. Durch das Senden dieses System-API-Intents kann das Framework das Language Model der aktuell festgelegten Sprache aktualisieren. Die Modelle selbst enthalten die unterstützte Sprache und eine Versionsnummer, damit das neueste geeignete Modell verwendet wird.
Sie müssen also keine 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 keine Werte zurück.
CTS-Tests (Compatibility Test Suite)
Die zugehörigen CTS-Tests (Android 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
testSmartSelectiontestSmartSelection_dragSelectiontestSmartSelection_resetSelection