O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando classificador de texto

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

Android 11 introduz uma implementação padrão atualizável do serviço de texto classificador no módulo ExtServices . Em dispositivos que executam o Android 11 ou superior, os getTextClassifier() método retorna Esta implementação padrão no módulo ExtServices. Fabricantes de dispositivos são recomendados para usar esta implementação de TextClassifierService , pois ele pode ser atualizado através de atualizações OTA Mainline.

Android 11 também remove a implementação padrão de texto classificador locais previamente introduzido no Android 8.1 . Como resultado, getLocalTextClassifier() retorna um NO_OP classificador de texto. Em vez da implementação local, você deve usar o getDefaultTextClassifierImplementation() método.

Para os fabricantes de dispositivos que possam querer utilizar os seus próprios algoritmos de texto de classificação, eles podem implementar um serviço de classificador de texto personalizado, especificando config_defaultTextClassifierPackage no config.xml arquivo. 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 mais informações, consulte Implementando um serviço personalizado texto classificador .

Testando

Para validar a sua implementação do serviço classificador de texto, usar testes da compatibilidade Test Suite (CTS) em platform/cts/tests/tests/textclassifier/ .

Aprimoramentos do classificador de texto da versão Android 10

Android 10 introduz dois métodos para a API TextClassifier: suggestConversationActions e detectLanguage . O suggestConversationActions método gera respostas e ações sugeridas a partir de uma determinada conversa eo detectLanguage método detecta o idioma do texto.

Os arquivos de modelo para esses métodos são mostrados abaixo e pode ser encontrado em external/libtextclassifier/models/ .

  • suggestionConversationActions : actions_suggestions.universal.model
  • detectLanguage : lang_id.model

Para lançar um dispositivo com os arquivos do modelo mais recente em sua imagem de fábrica, faça o seguinte:

  1. Obtenha os arquivos de modelo mais recentes.

    external/libtextclassifier/models/update.sh
    
  2. Renomeie os arquivos baixados para substituir os existentes.
  3. 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

Android 9 ampliou a estrutura de classificação de texto introduzido no Android 8.1 com o novo serviço de texto classificador. 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.

Android 9 inclui um texto padrão implementação do serviço classificador ( TextClassifierImpl ) que é usado a menos que você substituí-lo com uma implementação de serviço classificador de texto personalizado.

Implementar um serviço 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>

Note-se que o serviço deve requerer a android.permission.BIND_TEXTCLASSIFIER_SERVICE permissão e deve especificar o android.service.textclassifier.TextClassifierService ação intenção.

Definir um serviço classificador de texto padrão do sistema na sobreposição de configuração

[Config]

<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 utiliza PackageManager.MATCH_SYSTEM_ONLY para resolver o serviço.

Testando

Executar testes em android.view.textclassifier.cts .

Outras mudanças de classificação de texto no Android 9

Consulte Inspeção módulos de idiomas instalados .

Os arquivos do modelo do Android 9 são incompatíveis com os arquivos do modelo do Android 8.x.

Android 9 arquivos de modelo tem o padrão de nomenclatura: texclassifier.[language-code].model (por exemplo, textclassifier.en.model ) em vez de textclassifier.smartselection.en.model em 8.x. Android

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, o que atualiza os modelos 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);

Mas se um desenvolvedor de aplicativo define o classificador de texto para null , um classificador de texto padrão do sistema é devolvido para getTextClassifier() .

Veja android.view.textclassifier.TextClassifierImpl .

TextView e WebView usam TextClassifier para seleção inteligente e recursos de compartilhamento de texto inteligente.

Uso do classificador de texto

Uso Figura 1. 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, no 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 ou por ter um novo modelo incluiu como parte de uma atualização de imagem do sistema, ou dinamicamente por ter um componente do sistema que aciona uma atualização através do sistema API ACTION_UPDATE_SMART_SELECTION intenção. Ao transmitir essa intenção da API do sistema, a estrutura é capaz de atualizar o modelo de idioma do idioma atualmente definido. 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