Klasyfikator tekstu wykorzystuje techniki uczenia maszynowego, aby pomóc programistom klasyfikować tekst.
Klasyfikator tekstu wersji Androida 11
W Androidzie 11 wprowadzono aktualizowaną domyślną implementację usługi klasyfikatora tekstu w module ExtServices . Na urządzeniach z systemem Android 11 lub nowszym metoda getTextClassifier()
zwraca tę domyślną implementację w module ExtServices. Producentom urządzeń zaleca się korzystanie z tej implementacji TextClassifierService
, ponieważ można ją aktualizować za pośrednictwem aktualizacji Mainline OTA.
Android 11 usuwa także domyślną implementację lokalnego klasyfikatora tekstu wprowadzoną wcześniej w Androidzie 8.1 . W rezultacie getLocalTextClassifier()
zwraca klasyfikator tekstu NO_OP
. Zamiast implementacji lokalnej należy użyć metody getDefaultTextClassifierImplementation()
.
Producenci urządzeń, którzy chcą używać własnych algorytmów klasyfikowania tekstu, mogą zaimplementować niestandardową usługę klasyfikatora tekstu, określając config_defaultTextClassifierPackage
w pliku config.xml
. Jeśli ta konfiguracja nie zostanie określona, używana jest domyślna implementacja systemu. Implementacje niestandardowe mogą uzyskać instancję implementacji domyślnej, wywołując TextClassifierService.getDefaultTextClassifierImplementation(Context)
. Więcej informacji można znaleźć w sekcji Implementowanie niestandardowej usługi klasyfikatora tekstu .
Testowanie
Aby sprawdzić poprawność implementacji usługi klasyfikatora tekstu, użyj testów Compatibility Test Suite (CTS) w platform/cts/tests/tests/textclassifier/
.
Ulepszenia klasyfikatora tekstu w wersji Androida 10
W systemie Android 10 do interfejsu API TextClassifier wprowadzono dwie metody: suggestConversationActions
i detectLanguage
. Metoda suggestConversationActions
generuje sugerowane odpowiedzi i akcje z danej konwersacji, a metoda detectLanguage
wykrywa język tekstu.
Pliki modeli tych metod pokazano poniżej i można je znaleźć w external/libtextclassifier/models/
.
-
suggestionConversationActions
:actions_suggestions.universal.model
-
detectLanguage
:lang_id.model
Aby wypuścić urządzenie z najnowszymi plikami modelu w obrazie fabrycznym, wykonaj następujące czynności:
Pobierz najnowsze pliki modeli.
external/libtextclassifier/models/update.sh
- Zmień nazwę pobranych plików, aby zastąpić istniejące.
- Sprawdź konfigurację.
adb shell dumpsys textclassification
To jest przykładowy wynik 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 wersji Androida 9
Android 9 rozszerzył strukturę klasyfikacji tekstu wprowadzoną w Androidzie 8.1 o nową usługę klasyfikatora tekstu. Usługa klasyfikatora tekstu jest zalecaną metodą zapewniania przez producentów OEM obsługi systemu klasyfikacji tekstu. Usługa klasyfikatora tekstu może być częścią dowolnego systemu APK i może być aktualizowana w razie potrzeby.
System Android 9 zawiera domyślną implementację usługi klasyfikatora tekstu ( TextClassifierImpl
), która będzie używana, chyba że zastąpisz ją niestandardową implementacją usługi klasyfikatora tekstu.
Zaimplementuj niestandardową usługę klasyfikatora tekstu
W poniższych sekcjach opisano sposób implementowania opracowanej przez Ciebie niestandardowej usługi klasyfikatora tekstu.
Rozszerz usługę 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 manifeście systemu 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>
Należy pamiętać, że usługa musi wymagać uprawnienia android.permission.BIND_TEXTCLASSIFIER_SERVICE
i musi określać akcję intencji android.service.textclassifier.TextClassifierService
.
Ustaw domyślną systemową usługę klasyfikatora tekstu w nakładce konfiguracyjnej
[ konfiguracja.xml ]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Wbuduj usługę klasyfikatora tekstu w obraz systemu
Twoja niestandardowa usługa klasyfikatora tekstu może być samodzielnym plikiem APK wbudowanym w obraz systemu lub częścią innego pliku APK systemu. System używa PackageManager.MATCH_SYSTEM_ONLY
do rozwiązania usługi.
Testowanie
Uruchom testy w android.view.textclassifier.cts
.
Inne zmiany w klasyfikacji tekstu w systemie Android 9
Patrz Sprawdzanie zainstalowanych modułów językowych .
Pliki modeli Androida 9 są niezgodne z plikami modeli Androida 8.x.
Pliki modeli systemu Android 9 mają wzór nazewnictwa: texclassifier.[language-code].model
(na przykład textclassifier.en.model
) zamiast textclassifier.smartselection.en.model
w systemie Android 8.x.
Uzyskaj najnowsze pliki modelu klasyfikacji tekstu
Aby uzyskać najbardziej aktualne modele, można uruchomić następujący skrypt, który aktualizuje modele TextClassifier w drzewie źródłowym:
external/libtextclassifier/native/models/update.sh
Klasyfikator tekstu w wersji Androida 8.1
W systemie Android 8.1 wprowadzono interfejs API TextClassfier w celu zaimplementowania klasyfikacji tekstu.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Programiści mogą ustawić niestandardowy klasyfikator tekstu:
tcm.setTextClassifier(customTextClassifier);
Jeśli jednak twórca aplikacji ustawi klasyfikator tekstu na null
, dla metody getTextClassifier()
zwracany jest domyślny systemowy klasyfikator tekstu.
Zobacz android.view.textclassifier.TextClassifierImpl
.
TextView i WebView wykorzystują TextClassifier do inteligentnego zaznaczania i inteligentnych funkcji udostępniania tekstu.
Modele sieci neuronowych TextClassifier
Projekt Android Open Source Project (AOSP) zawiera szereg modeli sieci neuronowych do klasyfikacji tekstu. Każdy plik modelu jest szkolony dla jednego języka. Można zainstalować dowolną kombinację modeli. Modele są zdefiniowane w:
external/libtextclassifier/Android.mk
Preinstaluj modele językowe 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
Sprawdź zainstalowane moduły językowe
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 modeli
Modele można aktualizować albo poprzez dodanie nowego modelu w ramach aktualizacji obrazu systemu, albo dynamicznie poprzez dodanie komponentu systemu, który wyzwala aktualizację poprzez intencję systemowego API ACTION_UPDATE_SMART_SELECTION
. Rozgłaszając intencję API systemu, framework jest w stanie zaktualizować model językowy aktualnie ustawionego języka. Same modele zawierają obsługiwany język i numer wersji, dlatego używany jest najnowszy odpowiedni model.
Nie musisz więc wstępnie ładować modeli dla wszystkich języków, ponieważ można je dodać później. Jeśli dla określonego języka nie zostanie znaleziony żaden plik modelu, klasyfikacja tekstu zwróci wartości no-op.
Testy zestawu testów zgodności
Powiązane testy zestawu testów zgodności systemu Android (CTS) można znaleźć w:
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