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

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

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

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

  1. अगर आपने पहले से ही अपने ऐप्लिकेशन में Firebase नहीं जोड़ा है, तो शुरुआती निर्देश में दिए गए निर्देशों का पालन करके ऐसा करें.
  2. अपनी Podfile में ML Kit लाइब्रेरी शामिल करें:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    अपने प्रोजेक्ट के पॉड को इंस्टॉल या अपडेट करने के बाद, पक्का करें कि आपने Xcode प्रोजेक्ट को इसके .xcworkspace का इस्तेमाल करके खोला हो.
  3. अपने ऐप्लिकेशन में, Firebase इंपोर्ट करें:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

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

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

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

Swift

let languageId = NaturalLanguage.naturalLanguage().languageIdentification()

languageId.identifyLanguage(for: text) { (languageCode, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  if let languageCode = languageCode, languageCode != "und" {
    print("Identified Language: \(languageCode)")
  } else {
    print("No language was identified")
  }
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

[languageId identifyLanguageForText:text
                         completion:^(NSString * _Nullable languageCode,
                                      NSError * _Nullable error) {
                           if (error != nil) {
                             NSLog(@"Failed with error: %@", error.localizedDescription);
                             return;
                           }
                           if (languageCode != nil
                               && ![languageCode isEqualToString:@"und"] ) {
                             NSLog(@"Identified Language: %@", languageCode);
                           } else {
                             NSLog(@"No language was identified");
                           }
                         }];

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

डिफ़ॉल्ट रूप से, ML Kit सिर्फ़ und वैल्यू दिखाता है, जो कम से कम 0.5 कॉन्फ़िडेंस वैल्यू वाली भाषा की पहचान करती है. LanguageIdentificationOptions ऑब्जेक्ट को languageIdentification(options:) पर पास करके, इस थ्रेशोल्ड को बदला जा सकता है:

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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

सबसे ज़्यादा संभावना वाली भाषाओं में कॉन्फ़िडेंस वैल्यू पाने के लिए, LanguageIdentification का इंस्टेंस पाएं. इसके बाद, स्ट्रिंग को identifyPossibleLanguages(for:) तरीके में पास करें.

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

Swift

let languageId = NaturalLanguage.naturalLanguage().languageIdentification()

languageId.identifyPossibleLanguages(for: text) { (identifiedLanguages, error) in
  if let error = error {
    print("Failed with error: \(error)")
    return
  }
  guard let identifiedLanguages = identifiedLanguages,
    !identifiedLanguages.isEmpty,
    identifiedLanguages[0].languageCode != "und"
  else {
    print("No language was identified")
    return
  }

  print("Identified Languages:\n" +
    identifiedLanguages.map {
      String(format: "(%@, %.2f)", $0.languageCode, $0.confidence)
      }.joined(separator: "\n"))
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray<FIRIdentifiedLanguage *> * _Nonnull identifiedLanguages,
                                               NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Failed with error: %@", error.localizedDescription);
    return;
  }
  if (identifiedLanguages.count == 1
      && [identifiedLanguages[0].languageCode isEqualToString:@"und"] ) {
    NSLog(@"No language was identified");
    return;
  }
  NSMutableString *outputText = [NSMutableString stringWithFormat:@"Identified Languages:"];
  for (FIRIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

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

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

Swift

let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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