Классификатор текста использует методы машинного обучения, чтобы помочь разработчикам классифицировать текст.
Классификатор текста выпуска 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, за счет новой службы классификации текста. Служба классификации текста — это рекомендуемый производителем способ обеспечения поддержки системы классификации текста. Служба классификации текста может быть частью любого системного 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 TextClassifier для реализации классификации текста.
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.
Нейронные сети для классификации текста
В проекте 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, платформа может обновить языковую модель текущего языка. Сами модели содержат поддерживаемый язык и номер версии, поэтому используется последняя подходящая модель.
Таким образом, нет необходимости предварительно загружать модели для всех языков, поскольку их можно добавить позже. Если файл модели для указанного языка не найден, классификация текста возвращает значения, не выполняющие никаких действий.
Тесты набора тестов на совместимость
Соответствующие тесты из набора тестов совместимости Android (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