iOS पर ML Kit की मदद से, टेक्स्ट की भाषा की पहचान करना

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

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

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

  1. अपनी Podfile में, इन एमएल किट पॉड शामिल करें:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. अपने प्रोजेक्ट को अपडेट करने या अपडेट करने के लिए, उसके .xcworkspace का इस्तेमाल करके Xcode प्रोजेक्ट खोलें. Xcode वर्शन 12.4 या इसके बाद के वर्शन में ML किट काम करती है.

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

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

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

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

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

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

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

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

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

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

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

Swift

let languageId = 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

MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification];

[languageId identifyPossibleLanguagesForText:text
                                  completion:^(NSArray * _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 (MLKIdentifiedLanguage *language in identifiedLanguages) {
    [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence];
  }
  NSLog(outputText);
}];

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

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

Swift

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

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

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