टेक्स्ट की कैटगरी तय करने वाला टूल, मशीन लर्निंग की तकनीकों का इस्तेमाल करता है. इससे डेवलपर को टेक्स्ट की कैटगरी तय करने में मदद मिलती है.
Android 11 में रिलीज़ किया गया टेक्स्ट क्लासिफ़ायर
Android 11 में,
ExtServices मॉड्यूल में टेक्स्ट क्लासिफ़ायर सेवा का अपडेट किया जा सकने वाला डिफ़ॉल्ट वर्शन उपलब्ध है. Android 11 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर,
getTextClassifier()
तरीके से ExtServices मॉड्यूल में यह डिफ़ॉल्ट सेटिंग लागू होती है.
डिवाइस बनाने वाली कंपनियों को TextClassifierService
के इस वर्शन का इस्तेमाल करने का सुझाव दिया जाता है. ऐसा इसलिए, क्योंकि इसे Mainline OTA अपडेट के ज़रिए अपडेट किया जा सकता है.
Android 11 में, लोकल टेक्स्ट क्लासिफ़ायर के डिफ़ॉल्ट तौर पर लागू होने की सुविधा भी हटा दी गई है. यह सुविधा,
Android 8.1 में पेश की गई थी. इस वजह से,
getLocalTextClassifier()
से, NO_OP
टेक्स्ट क्लासिफ़ायर मिलता है. लोकल तौर पर लागू करने के बजाय, आपको
getDefaultTextClassifierImplementation()
तरीके का इस्तेमाल करना चाहिए.
डिवाइस बनाने वाली कंपनियां, टेक्स्ट को कैटगरी में बांटने वाले अपने एल्गोरिदम का इस्तेमाल कर सकती हैं. इसके लिए, उन्हें config.xml
फ़ाइल में config_defaultTextClassifierPackage
तय करके, टेक्स्ट को कैटगरी में बांटने वाली कस्टम सेवा लागू करनी होगी. अगर इस कॉन्फ़िगरेशन के बारे में नहीं बताया जाता है, तो सिस्टम के डिफ़ॉल्ट सेटिंग का इस्तेमाल किया जाता है. कस्टम तरीके से लागू किए गए फ़ंक्शन,
TextClassifierService.getDefaultTextClassifierImplementation(Context)
को कॉल करके, डिफ़ॉल्ट तरीके से लागू किए गए फ़ंक्शन का इंस्टेंस पा सकते हैं.
ज़्यादा जानकारी के लिए,
पसंद के मुताबिक टेक्स्ट क्लासिफ़ायर सेवा लागू करना लेख पढ़ें.
टेस्ट करना
टेक्स्ट क्लासिफ़ायर सेवा को लागू करने की पुष्टि करने के लिए,
platform/cts/tests/tests/textclassifier/
में Compatibility Test Suite (CTS) टेस्ट का इस्तेमाल करें.
Android 10 में टेक्स्ट क्लासिफ़ायर की सुविधा को बेहतर बनाया गया है
Android 10 में, TextClassifier API के लिए दो तरीके पेश किए गए हैं:
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
) शामिल है. इसका इस्तेमाल तब तक किया जाता है, जब तक इसे कस्टम टेक्स्ट क्लासिफ़ायर सेवा लागू करने की सुविधा से नहीं बदला जाता.
कस्टम टेक्स्ट क्लासिफ़ायर सेवा लागू करना
यहां दिए गए सेक्शन में, आपके बनाए गए कस्टम टेक्स्ट क्लासिफ़ायर सेवा को लागू करने का तरीका बताया गया है.
Extend 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
)
Android 8.x में textclassifier.smartselection.en.model
के बजाय.
टेक्स्ट क्लासिफ़िकेशन मॉडल की नई फ़ाइलें पाना
सबसे नए मॉडल पाने के लिए, यह स्क्रिप्ट चलाई जा सकती है. इससे सोर्स ट्री में मौजूद TextClassifier मॉडल अपडेट हो जाते हैं:
external/libtextclassifier/native/models/update.sh
Android 8.1 में रिलीज़ किया गया टेक्स्ट क्लासिफ़ायर
Android 8.1 में, टेक्स्ट क्लासिफ़िकेशन को लागू करने के लिए TextClassfier API लॉन्च किया गया था.
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 का इस्तेमाल करते हैं.

पहली इमेज. TextClassifier के इस्तेमाल से जुड़ी जानकारी
TextClassifier न्यूरल-नेट मॉडल
Android ओपन सोर्स प्रोजेक्ट (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
के इंटेंट के ज़रिए अपडेट को ट्रिगर करता है. इस सिस्टम एपीआई इंटेंट को ब्रॉडकास्ट करके, फ़्रेमवर्क को
मौजूदा समय में सेट की गई भाषा के मॉडल को अपडेट करने की अनुमति मिलती है. मॉडल में, इस्तेमाल की जा सकने वाली भाषा और वर्शन नंबर होता है, ताकि सबसे नया और सही मॉडल इस्तेमाल किया जा सके.
इसलिए, आपको सभी भाषाओं के लिए मॉडल को पहले से लोड करने की ज़रूरत नहीं है, क्योंकि उन्हें बाद में जोड़ा जा सकता है. अगर दी गई भाषा के लिए कोई मॉडल फ़ाइल नहीं मिलती है, तो टेक्स्ट क्लासिफ़िकेशन, नो-ऑप वैल्यू दिखाता है.
Compatibility Test Suite के टेस्ट
Android Compatibility Test Suite (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