O classificador de textos usa técnicas de aprendizado de máquina para ajudar os desenvolvedores a classificar um texto.
Classificador de texto da versão do Android 11
O Android 11 apresenta uma implementação padrão atualizável
do serviço de classificador de texto no
módulo ExtServices. Em dispositivos com o Android 11
ou versões mais recentes, o método
getTextClassifier()
retorna essa implementação padrão no módulo ExtServices.
Recomendamos que os fabricantes de dispositivos usem essa implementação do
TextClassifierService
, porque ela pode ser atualizada com o OTA
do Mainline.
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, use o método
getDefaultTextClassifierImplementation()
.
Os fabricantes de dispositivos que querem usar os próprios algoritmos
de classificação de texto podem implementar um serviço de classificador de texto personalizado especificando
config_defaultTextClassifierPackage
no arquivo
config.xml
. Se essa configuração não for especificada, a implementação do sistema padrão
será usada. As implementações personalizadas podem receber uma instância da implementação
padrão chamando
TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Para mais informações, consulte
Como implementar um serviço de classificador de texto personalizado.
Teste
Para validar sua implementação do serviço de classificador de texto, use os
testes do conjunto de teste de compatibilidade (CTS) em
platform/cts/tests/tests/textclassifier/
.
Melhorias no classificador de texto do Android 10
O Android 10 apresenta dois métodos para a
API TextClassifier:
suggestConversationActions
e
detectLanguage
.
O método suggestConversationActions
gera respostas e ações sugeridas
com base em 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 na imagem de fábrica, faça o seguinte:
Buscar os arquivos de modelo mais recentes.
external/libtextclassifier/models/update.sh
- Renomeie os arquivos baixados para substituir os atuais.
- Verifique a configuração.
adb shell dumpsys textclassification
Este é um exemplo 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 }
Melhorias no classificador de texto do Android 9
O Android 9 estendeu o framework de classificação de texto introduzido no Android 8.1 com o novo serviço de classificador de texto. O serviço de classificador de texto é a maneira recomendada para OEMs oferecerem suporte ao sistema de classificação de texto. O serviço de classificador de texto pode fazer parte de qualquer APK do sistema e ser atualizado quando necessário.
O Android 9 inclui uma implementação de serviço de classificador
de texto padrão
(
TextClassifierImpl
) que é usada, a menos que você o substitua por uma
implementação de serviço de 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 personalizado que você desenvolve.
Estender 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) { ... } ... }
Definir o serviço no manifesto do 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>
O serviço precisa exigir a
permissão android.permission.BIND_TEXTCLASSIFIER_SERVICE
e especificar a
ação de intent
android.service.textclassifier.TextClassifierService
.
Definir um serviço de 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>
Criar o serviço de classificador de texto na imagem do sistema
Seu serviço de classificador de texto personalizado pode ser um APK autônomo criado
na imagem do sistema ou parte de outro APK do sistema. O sistema usa
PackageManager.MATCH_SYSTEM_ONLY
para resolver o serviço.
Teste
Execute testes em android.view.textclassifier.cts
.
Outras mudanças na classificação de texto no Android 9
Consulte Como inspecionar módulos de linguagem instalados.
Os arquivos modelo do Android 9 são incompatíveis com 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.
Receber os arquivos mais recentes do modelo de classificação de texto
Para conseguir os modelos mais atualizados, execute o script a seguir, que atualiza os modelos de TextClassifier na árvore de origem:
external/libtextclassifier/native/models/update.sh
Classificador de texto da versão 8.1 do Android
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);
No entanto, se um desenvolvedor de apps 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 recursos de compartilhamento e seleção inteligentes.
Modelos de rede neural do 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. É possível instalar qualquer combinação de modelos. Os modelos são definidos em:
external/libtextclassifier/Android.mk
Pré-instalar modelos de linguagem em dispositivos
É possível especificar um pacote de modelos de linguagem 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
Inspecionar módulos de linguagem instalados
Use o 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 do modelo
Os modelos podem ser atualizados com um novo modelo incluído como parte de uma atualização de imagem
do sistema ou dinamicamente, com um componente do sistema que aciona
uma atualização pela intent API ACTION_UPDATE_SMART_SELECTION
do sistema. Ao transmitir essa intent da API do sistema, o framework pode
atualizar o modelo de idioma do idioma definido. Os modelos
contêm o idioma com suporte e um número de versão para que o modelo mais recente
seja usado.
Portanto, você não precisa pré-carregar modelos para todos os idiomas, porque eles podem ser adicionados mais tarde. Se nenhum arquivo de modelo for encontrado para o idioma especificado, a classificação de texto vai retornar valores sem operação.
Testes do conjunto de testes de compatibilidade
Os testes associados do Teste de compatibilidade do Android (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