Klasyfikator tekstu korzysta z systemów uczących się, aby ułatwić deweloperom klasyfikowanie tekstu.
Klasyfikator tekstu w Androidzie 11
Android 11 wprowadza możliwość aktualizacji domyślnej implementacji usługi klasyfikatora tekstu w
module ExtServices. Na urządzeniach z Androidem 11 lub nowszym metoda
getTextClassifier()
zwraca tę domyślną implementację w module ExtServices.
Producentom urządzeń zalecamy używanie tej implementacji TextClassifierService
, ponieważ można ją aktualizować za pomocą aktualizacji OTA Mainline.
Android 11 usuwa też lokalny klasyfikator tekstu, który był domyślnie implementowany w
Androidzie 8.1. W związku z tym funkcja
getLocalTextClassifier()
zwraca klasyfikator tekstu NO_OP
. Zamiast lokalnej implementacji użyj metody
getDefaultTextClassifierImplementation()
.
Producenci urządzeń, którzy chcą używać własnych algorytmów do klasyfikowania tekstu, mogą wdrożyć niestandardową usługę klasyfikatora tekstu, podając w pliku config_defaultTextClassifierPackage
wartość config_defaultTextClassifierPackage
.config.xml
Jeśli ta konfiguracja nie jest określona, używana jest domyślna implementacja systemu. Implementacje niestandardowe mogą uzyskać instancję domyślnej implementacji, wywołując funkcję
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Więcej informacji znajdziesz w artykule
Implementowanie niestandardowej usługi klasyfikatora tekstu.
Testowanie
Aby sprawdzić implementację usługi klasyfikatora tekstu, użyj testów Compatibility Test Suite (CTS) w
platform/cts/tests/tests/textclassifier/
.
Ulepszenia klasyfikatora tekstu w Androidzie 10
Android 10 wprowadza 2 metody interfejsu TextClassifier API:
suggestConversationActions
i
detectLanguage
.
Metoda suggestConversationActions
generuje sugerowane odpowiedzi i działania na podstawie danej rozmowy, a metoda detectLanguage
wykrywa język tekstu.
Poniżej znajdziesz pliki modeli tych metod, które są dostępne w folderze
external/libtextclassifier/models/
.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Aby wydać urządzenie z najnowszymi plikami modelu w obrazu fabrycznego, wykonaj te czynności:
Pobierz najnowsze pliki modeli.
external/libtextclassifier/models/update.sh
- Zmień nazwy pobranych plików, aby zastąpić istniejące.
- Sprawdź konfigurację.
adb shell dumpsys textclassification
Oto przykład danych wyjściowych tego polecenia.
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 }
Ulepszenia klasyfikatora tekstu w Androidzie 9
Android 9 rozszerzył ramy odniesienia do klasyfikacji tekstu wprowadzone w Androidzie 8.1 o nową usługę klasyfikacji tekstu. Usługa klasyfikatora tekstu to zalecany sposób zapewnienia przez OEM-ów obsługi systemu klasyfikacji tekstu. Usługa klasyfikatora tekstu może być częścią dowolnego pakietu APK systemu i w razie potrzeby może zostać zaktualizowana.
Android 9 zawiera domyślną implementację usługi klasyfikatora tekstu (
TextClassifierImpl
), która jest używana, chyba że zostanie zastąpiona niestandardową implementacją usługi klasyfikatora tekstu.
Wdrażanie niestandardowej usługi klasyfikatora tekstu
W następnych sekcjach znajdziesz informacje o wdrażaniu opracowanego przez siebie niestandardowego usługi klasyfikatora tekstu.
Rozszerzenie 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) { ... } ... }
Definiowanie usługi w pliku manifestu Androida
[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>
Pamiętaj, że usługa musi wymagać uprawnienia android.permission.BIND_TEXTCLASSIFIER_SERVICE
i określać działanie android.service.textclassifier.TextClassifierService
.
Ustaw domyślną usługę klasyfikatora tekstu w konfiguracji
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Włącz usługę klasyfikatora tekstu do obrazu systemu
Niestandardowa usługa klasyfikatora tekstu może być samodzielnym plikiem APK, który jest skompilowany w ramach obrazu systemu lub jako część innego pliku APK systemu. System używa
PackageManager.MATCH_SYSTEM_ONLY
do rozwiązywania problemów z usługą.
Testowanie
Przeprowadzanie testów w android.view.textclassifier.cts
.
Inne zmiany w klasyfikacji tekstu w Androidzie 9
Zobacz sprawdzanie zainstalowanych modułów językowych.
Pliki modeli Androida 9 są niezgodne z plikami modeli Androida 8.x.
Pliki modeli w Androidzie 9 mają wzór nazwy: texclassifier.[language-code].model
(na przykład textclassifier.en.model
) zamiast textclassifier.smartselection.en.model
w Androidzie 8.x.
Pobieranie najnowszych plików modelu klasyfikacji tekstu
Aby uzyskać najnowsze modele, możesz uruchomić ten skrypt, który aktualizuje modele TextClassifier w drzewie źródłowym:
external/libtextclassifier/native/models/update.sh
Klasyfikator tekstu w wersji Android 8.1
W Androidzie 8.1 wprowadzono interfejs TextClassfier API do implementowania klasyfikacji tekstu.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Deweloperzy mogą ustawić niestandardowy klasyfikator tekstu:
tcm.setTextClassifier(customTextClassifier);
Jeśli jednak deweloper aplikacji ustawi klasyfikator tekstu na null
, dla getTextClassifier()
zwrócony zostanie domyślny systemowy klasyfikator tekstu.
Zobacz android.view.textclassifier.TextClassifierImpl
.
TextView i WebView używają klasy TextClassifier do inteligentnego zaznaczania i udostępniania tekstu.

Rysunek 1. Użycie klasyfikatora tekstu
Modele sieci neuronowej TextClassifier
Projekt Android Open Source (AOSP) zawiera wiele modeli sieci neuronowych do klasyfikowania tekstu. Każdy plik modelu jest trenowany pod kątem jednego języka. Możesz zainstalować dowolną kombinację modeli. Modele są zdefiniowane w:
external/libtextclassifier/Android.mk
wstępne instalowanie modeli językowych na urządzeniach;
Możesz określić pakiet modeli językowych i zainstalować je na urządzeniu:
# ----------------------- # 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)
Na przykład w device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Sprawdzanie zainstalowanych modułów językowych
Użyj ADB, aby wyświetlić listę plików w katalogu:
$ 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
Aktualizacje modelu
Modele można aktualizować, dołączając nowy model w ramach aktualizacji obrazu systemu lub dynamicznie, gdy komponent systemu uruchamia aktualizację za pomocą intencji API ACTION_UPDATE_SMART_SELECTION
systemu. Dzięki przesyłaniu intencji interfejsu API system może aktualizować model językowy aktualnie ustawionego języka. Modele zawierają obsługiwany język i numer wersji, dzięki czemu używany jest najnowszy odpowiedni model.
Nie musisz więc wstępnie wczytywać modeli dla wszystkich języków, ponieważ można je dodać później. Jeśli nie uda się znaleźć pliku modelu dla wybranego języka, klasyfikacja tekstu zwróci wartości no-op.
Testy Compatibility Test Suite
Powiązane testy Compatibility Test Suite (CTS) dla Androida można znaleźć w tych miejscach:
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