O classificador de texto usa técnicas de aprendizado de máquina para ajudar os desenvolvedores a classificar o texto.
Classificador de texto de lançamento do Android 11
O Android 11 apresenta uma implementação padrão atualizável do serviço classificador de texto no módulo ExtServices . Em dispositivos que executam o Android 11 ou superior, o método getTextClassifier()
retorna esta implementação padrão no módulo ExtServices. Recomenda-se aos fabricantes de dispositivos que usem esta implementação de TextClassifierService
pois ela pode ser atualizada por meio de atualizações Mainline OTA.
O Android 11 também remove a implementação padrão do classificador de texto local introduzida anteriormente no Android 8.1 . Como resultado, getLocalTextClassifier()
retorna um classificador de texto NO_OP
. Em vez da implementação local, você deve usar o método getDefaultTextClassifierImplementation()
.
Para fabricantes de dispositivos que desejam usar seus próprios algoritmos de classificação de texto, eles podem implementar um serviço de classificador de texto personalizado especificando config_defaultTextClassifierPackage
no arquivo config.xml
. Se esta configuração não for especificada, a implementação do sistema padrão será usada. Implementações personalizadas podem obter uma instância da implementação padrão chamando TextClassifierService.getDefaultTextClassifierImplementation(Context)
. Para obter mais informações, consulte Implementando um serviço de classificador de texto personalizado .
Testando
Para validar sua implementação do serviço de classificador de texto, use os testes do Compatibility Test Suite (CTS) em platform/cts/tests/tests/textclassifier/
.
Aprimoramentos do classificador de texto da versão Android 10
O Android 10 apresenta dois métodos para a API suggestConversationActions
: suggestConversationActions
e detectLanguage
. O método suggestConversationActions
gera respostas e ações sugeridas de uma determinada conversa e o método detectLanguage
detecta o idioma do texto.
Os arquivos de modelo para esses métodos são mostrados abaixo e podem ser encontrados em external/libtextclassifier/models/
.
-
suggestionConversationActions
:actions_suggestions.universal.model
-
detectLanguage
:lang_id.model
Para lançar um dispositivo com os arquivos de modelo mais recentes em sua imagem de fábrica, faça o seguinte:
Obtenha os arquivos de modelo mais recentes.
external/libtextclassifier/models/update.sh
- Renomeie os arquivos baixados para substituir os existentes.
- Verifique a configuração.
adb shell dumpsys textclassification
Esta é uma amostra da saída desse comando.
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 }
Aprimoramentos do classificador de texto da versão Android 9
O Android 9 estendeu a estrutura de classificação de texto introduzida no Android 8.1 com o novo serviço classificador de texto. O serviço de classificador de texto é a maneira recomendada para os OEMs fornecerem suporte ao sistema de classificação de texto. O serviço classificador de texto pode fazer parte de qualquer APK do sistema e pode ser atualizado quando necessário.
O Android 9 inclui uma implementação de serviço classificador de texto padrão ( TextClassifierImpl
) que é usada, a menos que você a substitua por uma implementação de serviço classificador de texto personalizado.
Implementar um serviço de classificador de texto personalizado
As seções a seguir descrevem como implementar um serviço de classificador de texto customizado que você desenvolve.
Estenda 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) { ... } ... }
Defina o serviço no manifesto 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>
Observe que o serviço deve exigir a permissão android.permission.BIND_TEXTCLASSIFIER_SERVICE
e deve especificar a ação de intenção android.service.textclassifier.TextClassifierService
.
Defina um serviço classificador de texto padrão do sistema na sobreposição de configuração
[ config.xml ]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Construir o serviço classificador de texto na imagem do sistema
Seu serviço de classificador de texto personalizado pode ser um APK autônomo integrado à imagem do sistema ou uma parte de outro APK do sistema. O sistema usa PackageManager.MATCH_SYSTEM_ONLY
para resolver o serviço.
Testando
Execute testes em android.view.textclassifier.cts
.
Outras mudanças de classificação de texto no Android 9
Consulte Inspecionando módulos de idioma instalados .
Os arquivos do modelo do Android 9 são incompatíveis com os arquivos do modelo do Android 8.x.
Os arquivos de modelo do Android 9 têm o padrão de nomenclatura: texclassifier.[language-code].model
(por exemplo, textclassifier.en.model
) em vez de textclassifier.smartselection.en.model
no Android 8.x.
Obtenção dos arquivos de modelo de classificação de texto mais recentes
Para obter os modelos mais atualizados, o seguinte script pode ser executado, que atualiza os modelos TextClassifier na árvore de origem:
external/libtextclassifier/native/models/update.sh
Classificador de texto Android versão 8.1
O Android 8.1 introduziu a API TextClassfier para implementar a classificação de texto.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Os desenvolvedores podem definir um classificador de texto personalizado:
tcm.setTextClassifier(customTextClassifier);
Mas se um desenvolvedor de aplicativo definir o classificador de texto como null
, um classificador de texto padrão do sistema será retornado para getTextClassifier()
.
Consulte android.view.textclassifier.TextClassifierImpl
.
TextView e WebView usam TextClassifier para seleção inteligente e recursos de compartilhamento de texto inteligente.

Figura 1. Uso de TextClassifier
Modelos de rede neural TextClassifier
O Android Open Source Project (AOSP) apresenta vários modelos de rede neural para classificar texto. Cada arquivo de modelo é treinado para um único idioma. Você pode instalar qualquer combinação de modelos. Os modelos são definidos em:
external/libtextclassifier/Android.mk
Pré-instalando modelos de linguagem em dispositivos
Você pode especificar um pacote de modelos de idioma e instalá-los em um dispositivo:
# ----------------------- # 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)
Por exemplo, em device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files PRODUCT_PACKAGES += \ textclassifier.smartselection.bundle1
Inspecionando módulos de idioma instalados
Use ADB para listar os arquivos no diretório:
$ 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
Atualizações de modelo
Os modelos podem ser atualizados por ter um novo modelo incluído como parte de uma atualização de imagem do sistema ou dinamicamente por ter um componente do sistema que dispara uma atualização por meio da intenção API ACTION_UPDATE_SMART_SELECTION
do sistema. Ao transmitir essa intenção da API do sistema, a estrutura é capaz de atualizar o modelo de idioma do idioma definido atualmente. Os próprios modelos contêm o idioma suportado e um número de versão para que o modelo apropriado mais recente seja usado.
Portanto, você não precisa pré-carregar modelos para todos os idiomas porque eles podem ser adicionados posteriormente. Se nenhum arquivo de modelo for encontrado para o idioma especificado, a classificação do texto retornará valores autônomos.
Testes do Compatibility Test Suite
Os testes associados do Android Compatibility Test Suite (CTS) podem ser encontrados em:
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