Metin sınıflandırıcı, geliştiricilerin metni sınıflandırmasına yardımcı olmak için makine öğrenimi tekniklerini kullanır.
Android 11 sürümünde metin sınıflandırıcı
Android 11,
ExtServices modülünde metin sınıflandırıcı hizmetinin güncellenebilir varsayılan bir uygulamasını kullanıma sunar. Android 11 veya sonraki sürümleri çalıştıran cihazlarda
getTextClassifier()
yöntemi, ExtServices modülünde bu varsayılan uygulamayı döndürür.
Ana hat OTA güncellemeleri aracılığıyla güncellenebildiğinden, cihaz üreticilerinin TextClassifierService
'ün bu uygulamasını kullanmaları önerilir.
Android 11, daha önce
Android 8.1'de kullanıma sunulan yerel metin sınıflandırıcının varsayılan uygulamasını da kaldırır. Sonuç olarak,
getLocalTextClassifier()
NO_OP
metin sınıflandırıcısı döndürülür. Yerel uygulama yerine
getDefaultTextClassifierImplementation()
yöntemini kullanmalısınız.
Kendi metin sınıflandırma algoritmalarını kullanmak isteyen cihaz üreticileri, config.xml
dosyasında config_defaultTextClassifierPackage
değerini belirterek özel bir metin sınıflandırıcı hizmeti uygulayabilir. Bu yapılandırma belirtilmezse varsayılan sistem uygulaması kullanılır. Özel uygulamalar,
TextClassifierService.getDefaultTextClassifierImplementation(Context)
çağrısını yaparak varsayılan uygulamanın bir örneğini alabilir.
Daha fazla bilgi için
Özel metin sınıflandırıcı hizmeti uygulama başlıklı makaleyi inceleyin.
Test
Metin sınıflandırıcı hizmetini uygulamanızı doğrulamak için
platform/cts/tests/tests/textclassifier/
adresindeki Compatibility Test Suite (CTS) testlerini kullanın.
Android 10 sürümünde metin sınıflandırıcı iyileştirmeleri
Android 10, TextClassifier API'ye iki yöntem ekler:
suggestConversationActions
ve
detectLanguage
.
suggestConversationActions
yöntemi, belirli bir sohbetten önerilen yanıtlar ve işlemler oluşturur. detectLanguage
yöntemi ise metnin dilini algılar.
Bu yöntemlerin model dosyaları aşağıda gösterilmiştir ve
external/libtextclassifier/models/
adresinde bulunabilir.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Fabrika görüntünüzde en son model dosyalarını içeren bir cihaz yayınlamak için aşağıdakileri yapın:
En son model dosyalarını getirme
external/libtextclassifier/models/update.sh
- İndirilen dosyaları mevcut dosyaları değiştirecek şekilde yeniden adlandırın.
- Kurulumu doğrulayın.
adb shell dumpsys textclassification
Bu, söz konusu komutun çıkışını gösteren bir örnektir.
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 sürümünde metin sınıflandırıcı iyileştirmeleri
Android 9, Android 8.1'de kullanıma sunulan metin sınıflandırma çerçevesini yeni metin sınıflandırıcı hizmetiyle genişletti. Metin sınıflandırıcı hizmeti, OEM'lerin metin sınıflandırma sistemi desteği sunması için önerilen yöntemdir. Metin sınıflandırıcı hizmeti, herhangi bir sistem APK'sının parçası olabilir ve gerektiğinde güncellenebilir.
Android 9, özel bir metin sınıflandırıcı hizmet uygulamasıyla değiştirmediğiniz sürece kullanılan varsayılan bir metin sınıflandırıcı hizmet uygulaması (
TextClassifierImpl
) içerir.
Özel metin sınıflandırıcı hizmeti uygulama
Aşağıdaki bölümlerde, geliştirdiğiniz özel bir metin sınıflandırıcı hizmetinin nasıl uygulanacağı açıklanmaktadır.
android.service.textclassifier.TextClassifierService'i genişletin
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) { ... } ... }
Hizmeti Android manifest dosyasında tanımlama
[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>
Hizmetin android.permission.BIND_TEXTCLASSIFIER_SERVICE
iznini gerektirmesi ve android.service.textclassifier.TextClassifierService
intent işlemini belirtmesi gerektiğini unutmayın.
Yapılandırma yer paylaşımında sistem varsayılan metin sınıflandırıcı hizmeti ayarlama
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Metin sınıflandırıcı hizmetini sistem resmine yerleştirme
Özel metin sınıflandırıcı hizmetiniz, sistem görüntüsüne yerleştirilmiş bağımsız bir APK veya başka bir sistem APK'sının bir parçası olabilir. Sistem, hizmeti çözmek için PackageManager.MATCH_SYSTEM_ONLY
değerini kullanır.
Test
android.view.textclassifier.cts
'te testler çalıştırın.
Android 9'daki diğer metin sınıflandırma değişiklikleri
Yüklü dil modüllerini inceleme başlıklı makaleyi inceleyin.
Android 9 model dosyaları, Android 8.x model dosyalarıyla uyumlu değildir.
Android 9 model dosyalarının adlandırma kalıbı, Android 8.x'teki textclassifier.smartselection.en.model
yerine texclassifier.[language-code].model
(ör. textclassifier.en.model
) şeklindedir.
En son metin sınıflandırma modeli dosyalarını edinme
En güncel modelleri elde etmek için aşağıdaki komut dosyası çalıştırılabilir. Bu komut dosyası, kaynak ağaçtaki TextClassifier modellerini günceller:
external/libtextclassifier/native/models/update.sh
Android 8.1 sürümü metin sınıflandırıcı
Android 8.1, metin sınıflandırmasını uygulamak için TextClassifier API'yi kullanıma sundu.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Geliştiriciler özel bir metin sınıflandırıcı ayarlayabilir:
tcm.setTextClassifier(customTextClassifier);
Ancak bir uygulama geliştirici metin sınıflandırıcıyı null
olarak ayarlarsa getTextClassifier()
için sistem varsayılan metin sınıflandırıcısı döndürülür.
android.view.textclassifier.TextClassifierImpl
bakın.
TextView ve WebView, akıllı seçim ve akıllı metin paylaşma özellikleri için TextClassifier'ı kullanır.

Şekil 1. TextClassifier kullanımı
TextClassifier nöral ağ modelleri
Android Açık Kaynak Projesi (AOSP), metni sınıflandırmak için çeşitli nöral ağ modelleri içerir. Her model dosyası tek bir dil için eğitilir. İstediğiniz model kombinasyonunu yükleyebilirsiniz. Modeller şu yerlerde tanımlanır:
external/libtextclassifier/Android.mk
Dil modellerini cihazlara önceden yükleme
Bir dil modeli paketi belirleyebilir ve bunları bir cihaza yükleyebilirsiniz:
# ----------------------- # 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)
Örneğin, device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Yüklü dil modüllerini inceleme
Dizindeki dosyaları listelemek için ADB'yi kullanın:
$ 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
Model güncellemeleri
Modeller, sistem resmi güncellemesinin bir parçası olarak yeni bir model eklenerek veya sistem API ACTION_UPDATE_SMART_SELECTION
niyetiyle güncellemeyi tetikleyen bir sistem bileşeni kullanılarak dinamik olarak güncellenebilir. Bu sistem API'si niyetini yayınlayarak çerçeve, şu anda ayarlanmış dilin dil modelini güncelleyebilir. Modeller, desteklenen dili ve bir sürüm numarasını içerir. Böylece, en uygun model kullanılır.
Bu nedenle, daha sonra eklenebilirler. Bu nedenle, tüm diller için modelleri önceden yüklemeniz gerekmez. Belirtilen dil için model dosyası bulunamazsa metin sınıflandırması işlem yapmaz.
Compatibility Test Suite testleri
İlgili Android Compatibility Test Suite (CTS) testlerini şu adreslerde bulabilirsiniz:
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