iOS'te Makine Öğrenimi Kiti ile metnin dilini tanımlama

Bir metin dizesinin dilini tanımlamak için Makine Öğrenimi Kiti'ni kullanabilirsiniz. Şunları yapabilirsiniz: tüm dizeler için güven puanlarının yanı sıra dizenin en olası dizenin olası dillerine değineceğiz.

ML Kit, 100'den fazla farklı dildeki metinleri yerel alfabelerinde tanır. Ayrıca, Latince yazılmış metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça Bkz. Desteklenen dillerin ve komut dosyalarının tam listesini inceleyin.

Deneyin

Başlamadan önce

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

Dizenin dilini belirleme

Bir dizenin dilini tanımlamak için şunun bir örneğini alın: LanguageIdentification ve ardından dizeyi identifyLanguage(for:) yöntemini çağırın.

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

Arama başarılı olursa, BCP-47 dil kodu metnin dilini belirten tamamlama işleyicisine iletilir. Yanıt hayır ise: dil güvenli bir şekilde algılandığında und kodu (belirsiz) iletilir.

Varsayılan olarak ML Kit, und olmayan bir değeri yalnızca güven değeri en az 0,5’tir. Bu eşiği değiştirebilirsiniz LanguageIdentificationOptions nesnesini 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];

Bir dizenin olası dillerini alma

Bir dizenin en olası dillerinin güven değerlerini elde etmek için LanguageIdentification örneğini kullanın ve daha sonra, dizeyi identifyPossibleLanguages(for:) yöntemini çağırın.

Ö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 IdentifiedLanguage nesnelerinden oluşan bir liste devamlılık işleyici. Her nesneden dilin BCP-47 kodunu alabilirsiniz ve dizenin o dilde olduğundan emin olun. Lütfen bu değerler, tüm dizenin belirtilen dil; Makine Öğrenimi Kiti, tek bir dizede birden fazla dili tanımlamaz.

ML Kit varsayılan olarak yalnızca en az şu güven değerine sahip dilleri döndürür: 0,01. Bu eşiği, Müşteri Eşleştirme için languageIdentification(options:) öğesine LanguageIdentificationOptions nesne eklendi:

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 bir öğe bulunur ve bu öğe için değeri und