Классификатор текста использует методы машинного обучения, чтобы помочь разработчикам классифицировать текст.
Android 11 выпускает текстовый классификатор
Android 11 представляет обновляемую реализацию по умолчанию службы классификатора текста в модуле ExtServices . На устройствах под управлением Android 11 или выше метод getTextClassifier()
возвращает эту реализацию по умолчанию в модуле ExtServices. Производителям устройств рекомендуется использовать эту реализацию TextClassifierService
, поскольку ее можно обновить с помощью обновлений Mainline OTA.
Android 11 также удаляет реализацию локального текстового классификатора по умолчанию, ранее представленную в Android 8.1 . В результате getLocalTextClassifier()
возвращает текстовый классификатор NO_OP
. Вместо локальной реализации следует использовать метод getDefaultTextClassifierImplementation()
.
Производители устройств, которые хотят использовать собственные алгоритмы классификации текста, могут реализовать пользовательскую службу классификатора текста, указав config_defaultTextClassifierPackage
в файле config.xml
. Если эта конфигурация не указана, используется реализация системы по умолчанию. Пользовательские реализации могут получить экземпляр реализации по умолчанию, вызвав TextClassifierService.getDefaultTextClassifierImplementation(Context)
. Для получения дополнительной информации см. Реализация пользовательской службы классификатора текста .
Тестирование
Для проверки реализации службы классификатора текста используйте тесты Compatibility Test Suite (CTS) в platform/cts/tests/tests/textclassifier/
.
Улучшения классификатора текста в Android 10
Android 10 представляет два метода в API TextClassifier: suggestConversationActions
и detectLanguage
. Метод suggestConversationActions
генерирует предлагаемые ответы и действия из заданного разговора, а метод detectLanguage
определяет язык текста.
Файлы моделей для этих методов показаны ниже и находятся в external/libtextclassifier/models/
.
-
suggestionConversationActions
:actions_suggestions.universal.model
-
detectLanguage
:lang_id.model
Чтобы выпустить устройство с последними файлами модели в вашем заводском образе, выполните следующие действия:
Загрузите последние файлы моделей.
external/libtextclassifier/models/update.sh
- Переименуйте загруженные файлы, чтобы заменить существующие.
- Проверьте настройку.
adb shell dumpsys textclassification
Это пример вывода этой команды.
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 }
Улучшения классификатора текста в Android 9
Android 9 расширил структуру классификации текста, представленную в Android 8.1, с помощью новой службы классификатора текста. Служба классификатора текста является рекомендуемым способом для OEM-производителей обеспечить поддержку системы классификации текста. Служба классификатора текста может быть частью любого системного APK и может быть обновлена при необходимости.
Android 9 включает реализацию службы классификатора текста по умолчанию ( TextClassifierImpl
), которая используется, если вы не замените ее на пользовательскую реализацию службы классификатора текста.
Реализовать пользовательский сервис классификатора текста
В следующих разделах описывается, как реализовать разработанную вами пользовательскую службу классификатора текста.
Расширить 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) { ... } ... }
Определите службу в манифесте 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>
Обратите внимание, что служба должна требовать разрешение android.permission.BIND_TEXTCLASSIFIER_SERVICE
и должна указывать действие намерения android.service.textclassifier.TextClassifierService
.
Установите системную службу классификатора текста по умолчанию в наложении конфигурации
[ config.xml ]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Встроить службу классификатора текста в образ системы
Ваша служба классификатора текста может быть автономным APK, встроенным в системный образ, или частью другого системного APK. Система использует PackageManager.MATCH_SYSTEM_ONLY
для разрешения службы.
Тестирование
Запустите тесты в android.view.textclassifier.cts
.
Другие изменения классификации текста в Android 9
См. раздел Проверка установленных языковых модулей .
Файлы модели Android 9 несовместимы с файлами модели Android 8.x.
Файлы моделей Android 9 имеют следующий шаблон именования: texclassifier.[language-code].model
(например, textclassifier.en.model
) вместо textclassifier.smartselection.en.model
в Android 8.x.
Получите последние файлы модели классификации текста
Для получения самых последних моделей можно запустить следующий скрипт, который обновляет модели TextClassifier в исходном дереве:
external/libtextclassifier/native/models/update.sh
Android релиз 8.1 текстовый классификатор
В Android 8.1 представлен API TextClassfier для реализации классификации текста.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Разработчики могут задать собственный классификатор текста:
tcm.setTextClassifier(customTextClassifier);
Но если разработчик приложения устанавливает для классификатора текста значение null
, для getTextClassifier()
возвращается системный классификатор текста по умолчанию.
См. android.view.textclassifier.TextClassifierImpl
.
TextView и WebView используют TextClassifier для функций интеллектуального выбора и интеллектуального обмена текстом.

Рисунок 1. Использование TextClassifier
Модели нейронных сетей TextClassifier
Android Open Source Project (AOSP) содержит ряд моделей нейронных сетей для классификации текста. Каждый файл модели обучен для одного языка. Вы можете установить любую комбинацию моделей. Модели определены в:
external/libtextclassifier/Android.mk
Предварительная установка языковых моделей на устройствах
Вы можете указать набор языковых моделей и установить их на устройство:
# ----------------------- # 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)
Например, в device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Проверьте установленные языковые модули
Используйте ADB для вывода списка файлов в каталоге:
$ 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
Обновления модели
Модели могут обновляться либо путем включения новой модели в обновление образа системы, либо динамически, путем наличия системного компонента, который запускает обновление через системное API ACTION_UPDATE_SMART_SELECTION
намерение. Транслируя это системное API намерение, фреймворк может обновить языковую модель текущего установленного языка. Сами модели содержат поддерживаемый язык и номер версии, поэтому используется последняя подходящая модель.
Поэтому вам не нужно предварительно загружать модели для всех языков, поскольку их можно добавить позже. Если для указанного языка не найден файл модели, классификация текста возвращает значения no-op.
Тесты набора тестов на совместимость
Соответствующие тесты Android Compatibility Test Suite (CTS) можно найти здесь:
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