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: dizenin en olası dilini bulur veya tüm dizelere ilişkin dizenin olası dillerine değineceğiz.

ML Kit, yerel alfabelerinde 103 farklı dildeki metinleri tanır. Ayrıca, Latince yazılmış metinler Arapça, Bulgarca, Çince, Yunanca, Hintçe, Japonca ve Rusça

Başlamadan önce

  1. Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımlara bakın.
  2. ML Kit kitaplıklarını Podfile'ınıza ekleyin:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Projenizin kapsüllerini yükledikten veya güncelledikten sonra Xcode .xcworkspace kullanarak projenize dahil olabilir.
  3. Uygulamanızda Firebase'i içe aktarın:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

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

Arama başarılı olursa, BCP-47 dil kodu metnin dilini belirten tamamlama işleyicisine iletilir. Bkz. desteklenen dillerin tam listesini inceleyin. 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.naturalLanguage().languageIdentification(options: options)

Objective-C

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

Bir dizenin olası dillerini alma

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

Örneğin:

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

Ç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. Bkz. desteklenen dillerin tam listesini inceleyin. 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.naturalLanguage().languageIdentification(options: options)

Objective-C

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

Bu eşiği karşılayan dil yoksa listede şu değeri içeren bir öğe bulunur: und