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

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

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

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

इसे आज़माएं

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

  1. प्रोजेक्ट-लेवल की build.gradle फ़ाइल में, अपने buildscript और allprojects, दोनों सेक्शन में Google की Maven रिपॉज़िटरी को शामिल करना न भूलें.

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

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

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

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

    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 Services में इस्तेमाल किया जाता है, तो अपने ऐप्लिकेशन को इस तरह कॉन्फ़िगर किया जा सकता है कि Play Store से ऐप्लिकेशन इंस्टॉल होने के बाद, मॉडल आपके डिवाइस पर अपने-आप डाउनलोड हो जाए. ऐसा करने के लिए, अपने ऐप्लिकेशन की 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 services के ModuleInstallClient API की मदद से, मॉडल को डाउनलोड करने का अनुरोध किया जा सकता है.

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

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

किसी स्ट्रिंग की भाषा की पहचान करने के लिए, LanguageIdentifier का इंस्टेंस पाने के लिए, LanguageIdentification.getClient() को कॉल करें. इसके बाद, स्ट्रिंग को 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 (तय नहीं किया गया) पास कर दिया जाता है.

डिफ़ॉल्ट रूप से, ML Kit 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 किट सिर्फ़ वे भाषाएं दिखाता है जिनकी कॉन्फ़िडेंस वैल्यू कम से कम 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 वैल्यू के साथ शामिल कर दिया जाता है.