iOS'te ML Kit ile metin dilini tanımlama

Bir metin dizesinin dilini belirlemek için ML Kit'i kullanabilirsiniz. Dizenin en olası dilini ve dizedeki olası tüm diller için güven puanlarını öğrenebilirsiniz.

ML Kit, yerel komut dosyalarında 100'den fazla dildeki metinleri tanır. Ayrıca Latin alfabesi kullanılan metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça için de tanınabilir. Desteklenen dillerin ve komut dosyalarının tam listesine bakın.

Deneyin

Başlamadan önce

  1. Aşağıdaki ML Kit kapsüllerini Podfile dosyanıza ekleyin:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Projenizin Kapsüllerini yükledikten veya güncelledikten sonra, .xcworkspace kodunu kullanarak Xcode projenizi açın. ML Kit, Xcode'un 12.4 veya sonraki sürümlerinde desteklenir.

Dizenin dilini belirleme

Bir dizenin dilini tanımlamak için LanguageIdentification örneğini alın ve ardından dizeyi identifyLanguage(for:) yöntemine geçirin.

Örneğin:

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");
                           }
                         }];

Görüşme başarılı olursa tamamlama işleyiciye bir BCP-47 dil kodu iletilir. Bu kod, metnin dilini belirtir. Hiçbir dil güvenli bir şekilde algılanamazsa und kodu (belirlenmemiş) geçirilir.

Varsayılan olarak ML Kit, und dışında bir değeri yalnızca güven değeri en az 0,5 olan dili tanımladığında döndürür. Bu eşiği, LanguageIdentificationOptions nesnesini languageIdentification(options:) adlı nesneye geçirerek değiştirebilirsiniz:

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];

Bir dizenin olası dillerini alma

Bir dizenin en olası dillerinin güven değerlerini almak için bir LanguageIdentification örneği alın ve ardından dizeyi identifyPossibleLanguages(for:) yöntemine geçirin.

Örneğin:

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);
}];

Arama başarılı olursa IdentifiedLanguage nesnelerinin listesi devam işleyiciye iletilir. Her nesneden dilin BCP-47 kodunu ve dizenin bu dilde olduğuna dair güven alabilirsiniz. Bu değerlerin tüm dizenin belirtilen dilde yazıldığına dair güveni gösterdiğini unutmayın. ML Kit tek bir dizede birden fazla dili tanımlamaz.

Varsayılan olarak ML Kit yalnızca en az 0, 01 güven değerlerine sahip dilleri döndürür. Bu eşiği, languageIdentification(options:) nesnesine bir LanguageIdentificationOptions nesnesi ileterek değiştirebilirsiniz:

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];

Hiçbir dil bu eşiği karşılamıyorsa listede und değerine sahip bir öğe bulunur.