Identyfikowanie języka tekstu za pomocą ML Kit na iOS

Do identyfikacji języka ciągu tekstowego można użyć narzędzia ML Kit. Możesz uzyskać najbardziej prawdopodobny język ciągu lub uzyskać wyniki pewności dla wszystkich możliwych języków ciągu.

ML Kit rozpoznaje tekst w 103 różnych językach w ich natywnych pismach. Ponadto zlatynizowany tekst można rozpoznać w językach arabskim, bułgarskim, chińskim, greckim, hindi, japońskim i rosyjskim.

Zanim zaczniesz

  1. Jeśli nie dodałeś jeszcze Firebase do swojej aplikacji, zrób to, wykonując czynności opisane w przewodniku wprowadzającym .
  2. Dołącz biblioteki ML Kit do swojego Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Po zainstalowaniu lub zaktualizowaniu Podów swojego projektu pamiętaj o otwarciu projektu Xcode przy użyciu jego .xcworkspace .
  3. W swojej aplikacji zaimportuj Firebase:

    Szybki

    import Firebase

    Cel C

    @import Firebase;

Zidentyfikuj język ciągu

Aby zidentyfikować język ciągu, pobierz instancję LanguageIdentification , a następnie przekaż ciąg do metody identifyLanguage(for:) .

Na przykład:

Szybki

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

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

Jeśli wywołanie powiedzie się, do procedury obsługi uzupełniania przekazywany jest kod języka BCP-47 , wskazujący język tekstu. Zobacz pełną listę obsługiwanych języków . Jeśli nie można z całą pewnością wykryć żadnego języka, przekazywany jest kod und (nieokreślony).

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy zidentyfikuje język z wartością zaufania co najmniej 0,5. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do languageIdentification(options:) :

Szybki

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

Cel C

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

Uzyskaj możliwe języki ciągu

Aby uzyskać wartości pewności najbardziej prawdopodobnych języków ciągu, pobierz instancję LanguageIdentification , a następnie przekaż ciąg do identifyPossibleLanguages(for:) .

Na przykład:

Szybki

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

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

Jeśli wywołanie powiedzie się, lista obiektów IdentifiedLanguage zostanie przekazana do procedury obsługi kontynuacji. Z każdego obiektu można uzyskać kod BCP-47 języka i pewność, że ciąg znaków jest w tym języku. Zobacz pełną listę obsługiwanych języków . Należy pamiętać, że te wartości wskazują pewność, że cały ciąg znaków jest w danym języku; ML Kit nie identyfikuje wielu języków w jednym ciągu.

Domyślnie ML Kit zwraca tylko języki z wartością pewności co najmniej 0,01. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do languageIdentification(options:) :

Szybki

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

Cel C

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

Jeśli żaden język nie spełnia tego progu, lista będzie zawierać jedną pozycję z wartością und .