Klasyfikator tekstu korzysta z technik uczenia maszynowego, aby pomagać deweloperom klasyfikować tekst.
Klasyfikator tekstu w Androidzie 11
Android 11 wprowadza domyślną implementację usługi klasyfikacji tekstu, którą można aktualizować w
module ExtServices. Na urządzeniach z Androidem 11 lub nowszym metoda
getTextClassifier()
zwraca tę domyślną implementację w module ExtServices.
Producenci urządzeń powinni używać tej implementacji TextClassifierService
, ponieważ można ją aktualizować za pomocą aktualizacji OTA Mainline.
Android 11 usuwa też domyślną implementację lokalnego klasyfikatora tekstu wprowadzoną wcześniej w
Androidzie 8.1. W związku z tym
getLocalTextClassifier()
zwraca klasyfikator tekstu NO_OP
. Zamiast implementacji lokalnej użyj metody
getDefaultTextClassifierImplementation()
.
Producenci urządzeń, którzy chcą używać własnych algorytmów klasyfikacji tekstu, mogą wdrożyć niestandardową usługę klasyfikacji tekstu, określając config_defaultTextClassifierPackage
w pliku config.xml
. Jeśli ta konfiguracja nie zostanie określona, używana jest domyślna implementacja systemowa. W przypadku implementacji niestandardowych można uzyskać instancję implementacji domyślnej, wywołując
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Więcej informacji znajdziesz w artykule
Wdrażanie 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.
Pliki modeli dla tych metod są widoczne poniżej i znajdują się w
external/libtextclassifier/models/
.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Aby udostępnić urządzenie z najnowszymi plikami modelu w obrazie fabrycznym, wykonaj te czynności:
Pobierz najnowsze pliki modelu.
external/libtextclassifier/models/update.sh
- Zmień nazwy pobranych plików, aby zastąpić istniejące.
- Sprawdź konfigurację.
adb shell dumpsys textclassification
To przykładowe dane wyjściowe 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ł platformę klasyfikacji tekstu wprowadzoną w Androidzie 8.1 o nową usługę klasyfikatora tekstu. Usługa klasyfikatora tekstu jest zalecanym sposobem zapewniania przez producentów OEM obsługi systemu klasyfikacji tekstu. Usługa klasyfikatora tekstu może być częścią dowolnego pakietu APK systemu i w razie potrzeby można ją aktualizować.
Android 9 zawiera domyślną implementację usługi klasyfikatora tekstu (
TextClassifierImpl
), która jest używana, chyba że zastąpisz ją niestandardową implementacją usługi klasyfikatora tekstu.
Wdrażanie niestandardowej usługi klasyfikatora tekstu
W sekcjach poniżej znajdziesz informacje o wdrażaniu opracowanej przez siebie niestandardowej usługi klasyfikacji tekstu.
Rozszerzanie klasy 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) { ... } ... }
Zdefiniuj usługę 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 intencji android.service.textclassifier.TextClassifierService
.
Ustaw domyślną usługę klasyfikacji tekstu w nakładce konfiguracyjnej
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Wbuduj usługę klasyfikatora tekstu w obraz systemu
Usługa niestandardowego klasyfikatora tekstu może być samodzielnym plikiem APK wbudowanym w obraz systemu lub częścią innego systemowego pliku APK. System używa
PackageManager.MATCH_SYSTEM_ONLY
do rozpoznawania usługi.
Testowanie
Przeprowadzaj testy w android.view.textclassifier.cts
.
Inne zmiany w klasyfikacji tekstu w Androidzie 9
Zapoznaj się z sekcją Sprawdzanie zainstalowanych modułów językowych.
Pliki modeli Androida 9 są niezgodne z plikami modeli Androida 8.x.
Pliki modelu Androida 9 mają następujący wzorzec nazewnictwa:texclassifier.[language-code].model
(np.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 Androidzie w wersji 8.1
W Androidzie 8.1 wprowadzono interfejs TextClassifier 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
, w przypadku parametru getTextClassifier()
zwracany jest domyślny klasyfikator tekstu systemu.
Zobacz android.view.textclassifier.TextClassifierImpl
.
Komponenty TextView i WebView używają klasyfikatora tekstu do inteligentnego zaznaczania i inteligentnego udostępniania tekstu.

Rysunek 1. Korzystanie z klasyfikatora tekstu
Modele sieci neuronowych TextClassifier
Projekt Android Open Source (AOSP) zawiera wiele modeli sieci neuronowych do klasyfikowania tekstu. Każdy plik modelu jest trenowany w jednym języku. Możesz zainstalować dowolną kombinację modeli. Modele są zdefiniowane w tych plikach:
external/libtextclassifier/Android.mk
wstępne instalowanie modeli językowych na urządzeniach;
Możesz określić pakiet modeli językowych i zainstalować go 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ć, uwzględniając nowy model w ramach aktualizacji obrazu systemu lub dynamicznie, za pomocą komponentu systemu, który wywołuje aktualizację za pomocą intencji API ACTION_UPDATE_SMART_SELECTION
systemu. Dzięki rozgłaszaniu tego intencji interfejsu API systemu platforma może aktualizować model językowy aktualnie ustawionego języka. Same modele zawierają obsługiwany język i numer wersji, dzięki czemu używany jest najnowszy odpowiedni model.
Nie musisz wstępnie wczytywać modeli dla wszystkich języków, ponieważ można je dodać później. Jeśli dla określonego języka nie zostanie znaleziony plik modelu, klasyfikacja tekstu zwróci wartości no-op.
Testy Compatibility Test Suite
Powiązane testy pakietu CTS (Compatibility Test Suite) na Androida znajdziesz w tych dokumentach:
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