Android पर एमएल किट की मदद से, टेक्स्ट की भाषा की पहचान करना

टेक्स्ट की किसी भाषा की पहचान के लिए एमएल किट का इस्तेमाल किया जा सकता है. आपको स्ट्रिंग के सभी संभावित भाषाओं के लिए स्ट्रिंग और कॉन्फ़िडेंस स्कोर मिल सकते हैं.

ML किट, अपनी मूल स्क्रिप्ट में, टेक्स्ट की पहचान 100 से ज़्यादा अलग-अलग भाषाओं में करता है. साथ ही, रोमन लिपि में लिखे गए टेक्स्ट को अरेबिक, बल्गेरियन, चाइनीज़, ग्रीक, हिन्दी, जैपनीज़, और रशियन में भी पढ़ा जा सकता है. इस्तेमाल की जा सकने वाली भाषाओं और स्क्रिप्ट की पूरी सूची देखें.

भाषा की पहचान करने के दो तरीके हैं: अपने ऐप्लिकेशन के मॉडल के तौर पर मॉडल को बंडल करके या 'Google Play सेवाएं' पर निर्भर किसी अनबंडल किए गए मॉडल का इस्तेमाल करके. अगर आप बंडल नहीं किए गए मॉडल को चुनते हैं, तो आपका ऐप्लिकेशन छोटा हो जाएगा. ज़्यादा जानकारी के लिए यह टेबल देखें.

बंडल किए गएबंडल नहीं किया गया
लाइब्रेरी का नामcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
लागू करनामॉडल, स्टैटिक तरीके से आपके ऐप्लिकेशन से बिल्ड टाइम पर जुड़ा होता है.मॉडल Google Play सेवाओं से डाइनैमिक तौर पर डाउनलोड किया जाता है.
ऐप्लिकेशन के साइज़ पर असरकरीब 1.3 एमबी का साइज़ बढ़ जाता है.करीब 500 केबी साइज़ की बढ़ोतरी.
प्रोसेस शुरू होने का समयमॉडल तुरंत उपलब्ध है.हो सकता है कि पहली बार इस्तेमाल करने से पहले, मॉडल को डाउनलोड करने के लिए इंतज़ार करना पड़े.

शुरू करने से पहले

  1. अपने प्रोजेक्ट-लेवल की build.gradle फ़ाइल में, पक्का करें कि आपके buildscript और allprojects, दोनों सेक्शन में Google's Maven का डेटा स्टोर करने की जगह शामिल की गई हो.

  2. अपने मॉड्यूल की ऐप-लेवल ग्रेडल फ़ाइल पर एमएल किट Android लाइब्रेरी के लिए डिपेंडेंसी जोड़ें, जो आम तौर पर app/build.gradle होती है. अपनी ज़रूरतों के हिसाब से, इनमें से कोई एक डिपेंडेंसी चुनें:

    अपने ऐप्लिकेशन के साथ मॉडल को बंडल करने के लिए:

    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:language-id:17.0.4'
    }
    

    Google Play सेवाओं में मॉडल का इस्तेमाल करने के लिए:

    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-language-id:17.0.0'
    }
    
  3. अगर आप Google Play सेवाओं में मॉडल का इस्तेमाल करने का विकल्प चुनते हैं, तो आप Play स्टोर से अपना ऐप्लिकेशन इंस्टॉल हो जाने के बाद, ऐप्लिकेशन को अपने डिवाइस पर अपने-आप डाउनलोड करने के लिए कॉन्फ़िगर कर सकते हैं. ऐसा करने के लिए, अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में यह एलान जोड़ें:

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="langid" >
          <!-- To use multiple models: android:value="langid,model2,model3" -->
    </application>
    

    मॉडल की उपलब्धता की जानकारी को साफ़ तौर पर देखा जा सकता है. साथ ही, Google Play सेवाओं ModuleInstallClient API की मदद से, डाउनलोड का अनुरोध भी किया जा सकता है.

    अगर इंस्टॉल के समय मॉडल डाउनलोड करने की सुविधा चालू नहीं की जाती या अश्लील डाउनलोड का अनुरोध नहीं किया जाता है, तो पहली बार यह मॉडल डाउनलोड किया जाता है. डाउनलोड पूरा होने से पहले किए गए अनुरोधों का कोई नतीजा नहीं मिलता.

स्ट्रिंग की भाषा की पहचान करना

किसी स्ट्रिंग की भाषा पहचानने के लिए, LanguageIdentification.getClient() को कॉल करें और LanguageIdentifier का इंस्टेंस पाएं. इसके बाद, स्ट्रिंग को LanguageIdentifier के identifyLanguage() तरीके में पास करें.

उदाहरण के लिए:

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener { languageCode ->
            if (languageCode == "und") {
                Log.i(TAG, "Can't identify language.")
            } else {
                Log.i(TAG, "Language: $languageCode")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener(
                new OnSuccessListener<String>() {
                    @Override
                    public void onSuccess(@Nullable String languageCode) {
                        if (languageCode.equals("und")) {
                            Log.i(TAG, "Can't identify language.");
                        } else {
                            Log.i(TAG, "Language: " + languageCode);
                        }
                    }
                })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Model couldn’t be loaded or other internal error.
                        // ...
                    }
                });

अगर कॉल पूरा होता है, तो BCP-47 भाषा कोड को सक्सेस सॉर्टर के पास भेज दिया जाता है. इससे, टेक्स्ट की भाषा का पता चलता है. अगर किसी भाषा का आत्मविश्वास के साथ इस्तेमाल नहीं किया जाता है, तो कोड und (तय नहीं) के साथ कोड पास होता है.

डिफ़ॉल्ट रूप से, एमएल किट und के अलावा, कोई और वैल्यू सिर्फ़ तब दिखाती है, जब वह कम से कम 0.5 की कॉन्फ़िडेंस वैल्यू के साथ भाषा की पहचान करती है. आप LanguageIdentificationOptions ऑब्जेक्ट को getClient() में पास करके इस सीमा को बदल सकते हैं:

Kotlin

val languageIdentifier = LanguageIdentification
        .getClient(LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
        new LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build());

स्ट्रिंग की संभावित भाषाएं पाना

किसी स्ट्रिंग की कॉन्फ़िडेंस वैल्यू पाने के लिए, LanguageIdentifier की सबसे ज़्यादा वैल्यू पाएं और फिर स्ट्रिंग को identifyPossibleLanguages() तरीके से पास करें.

उदाहरण के लिए:

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener { identifiedLanguages ->
            for (identifiedLanguage in identifiedLanguages) {
                val language = identifiedLanguage.languageTag
                val confidence = identifiedLanguage.confidence
                Log.i(TAG, "$language $confidence")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener(new OnSuccessListener<List<IdentifiedLanguage>>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
                for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                    String language = identifiedLanguage.getLanguageTag();
                    float confidence = identifiedLanguage.getConfidence();
                    Log.i(TAG, language + " (" + confidence + ")");
                }
            }
        })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Model couldn’t be loaded or other internal error.
                        // ...
                    }
                });

अगर कॉल पूरा होता है, तो IdentifiedLanguage ऑब्जेक्ट की एक सूची, सक्सेस लिसनर के पास भेजी जाती है. हर ऑब्जेक्ट से, आपको भाषा और BCP-47 कोड मिल सकता है. साथ ही, यह भरोसा भी मिलता है कि स्ट्रिंग उस भाषा में है. ध्यान दें कि ये वैल्यू इस बात पर भरोसा करती हैं कि पूरी स्ट्रिंग दी गई भाषा में है. ML किट एक ही स्ट्रिंग में कई भाषाओं की पहचान नहीं करता.

डिफ़ॉल्ट रूप से, ML किट सिर्फ़ कम से कम 0.01 की कॉन्फ़िडेंस वैल्यू वाली भाषाएं दिखाती है. इस सीमा को बदलने के लिए, आप LanguageIdentificationOptions ऑब्जेक्ट को getClient() पास कर सकते हैं:

Kotlin

val languageIdentifier = LanguageIdentification
      .getClient(LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
      new LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build());

अगर कोई भी सीमा इस सीमा को पूरा नहीं करती है, तो सूची में एक आइटम की वैल्यू und होगी.