iOS'te ML Kit ile metnin dilini belirleme

Bir metin dizesinin dilini tanımlamak için ML Kit'i kullanabilirsiniz. Dizenin en olası dilini ve dizenin olası tüm dilleri için güven puanlarını alabilirsiniz.

ML Kit 100'den fazla farklı dildeki metinleri ana dillerinde tanır. Ayrıca, Latin alfabesine dayalı metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça olarak tanınabilir. Desteklenen dillerin ve komut dosyalarının tam listesini inceleyin.

Deneyin

Başlamadan önce

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

Bir dizenin dilini belirleme

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

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

Çağrı başarılı olursa tamamlama işleyiciye metnin dilini belirten bir BCP-47 dil kodu iletilir. Hiçbir dil güvenli şekilde algılanamazsa und kodu (belirsiz) aktarılır.

Varsayılan olarak ML Kit, yalnızca dili en az 0,5 güven değeriyle tanımladığında und olmayan bir değer döndürür. languageIdentification(options:) nesnesine bir LanguageIdentificationOptions nesnesini ileterek bu eşiği 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 LanguageIdentification örneğini alın ve ardından dizeyi identifyPossibleLanguages(for:) yöntemine iletin.

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

Çağrı başarılı olursa devam işleyiciye IdentifiedLanguage nesne içeren bir liste iletilir. Her nesneden dilin BCP-47 kodunu ve dizenin o dilde olduğundan emin olabilirsiniz. Bu değerlerin, tüm dizenin belirtilen dilde olduğuna 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 güven değerleri en az 0, 01 olan dilleri döndürür. languageIdentification(options:) nesnesine bir LanguageIdentificationOptions nesnesini ileterek bu eşiği 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 tek bir öğe bulunur.