Zidentyfikuj język tekstu za pomocą ML Kit na iOS

Możesz użyć ML Kit do identyfikacji języka ciągu tekstu. Możesz uzyskać najbardziej prawdopodobny język ciągu lub uzyskać wyniki ufności dla wszystkich możliwych języków ciągu.

ML Kit rozpoznaje tekst w 103 różnych językach w ich natywnych skryptach. Ponadto zromanizowany 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, wykonaj czynności opisane w przewodniku wprowadzającym .
  2. Dołącz biblioteki ML Kit do swojego pliku Podfile:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    Po zainstalowaniu lub zaktualizowaniu podów projektu pamiętaj, aby otworzyć projekt 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 wystąpienie 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 się powiedzie, kod języka BCP-47 jest przekazywany do obsługi uzupełniania, wskazując język tekstu. Zobacz pełną listę obsługiwanych języków . Jeśli żaden język nie może być pewnie wykryty, kod und (nieokreślony) jest przekazywany.

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy identyfikuje język z wartością ufności 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 ufności najbardziej prawdopodobnych języków ciągu, pobierz instancję LanguageIdentification , a następnie przekaż ciąg do metody 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 się powiedzie, lista obiektów IdentifiedLanguage jest przekazywana do programu obsługi kontynuacji. Z każdego obiektu można uzyskać kod BCP-47 języka i pewność, że ciąg jest w tym języku. Zobacz pełną listę obsługiwanych języków . Zauważ, że te wartości wskazują pewność, że cały ciąg 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 o wartościach ufnoś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ę o wartości und .