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

Za pomocą pakietu ML Kit możesz określić język ciągu tekstowego. Możesz uzyskać najbardziej prawdopodobny język ciągu lub uzyskać wskaźniki ufności dla wszystkich możliwych języków ciągu.

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

Zanim zaczniesz

  1. Jeśli nie masz jeszcze dodanej usługi Firebase do swojej aplikacji, wykonaj czynności opisane we wprowadzeniu.
  2. Dodaj biblioteki ML Kit do 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 za pomocą pliku .xcworkspace.
  3. W aplikacji zaimportuj Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

Określ język ciągu

Aby zidentyfikować język ciągu, uzyskaj wystąpienie LanguageIdentification, a następnie przekaż ciąg znaków do metody identifyLanguage(for:).

Przykład:

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

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

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy identyfikuje język z wartością ufności równą 0,5. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do 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];

Znajdź możliwe języki ciągu

Aby uzyskać wartości ufności dla najbardziej prawdopodobnego języka ciągu, pobierz wystąpienie LanguageIdentification i przekaż ciąg do metody identifyPossibleLanguages(for:).

Przykład:

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

Jeśli wywołanie się powiedzie, do modułu obsługi kontynuacji zostanie przekazana lista obiektów IdentifiedLanguage. Z każdego obiektu możesz uzyskać kod języka BCP-47 i pewność, że ciąg znaków jest w tym języku. Zobacz pełną listę obsługiwanych języków. Pamiętaj, że te wartości dają pewność, że cały ciąg jest w danym języku. ML Kit nie rozpoznaje wielu języków w 1 ciągu znaków.

Domyślnie ML Kit zwraca tylko języki o poziomie ufności wynoszącym co najmniej 0, 01. Możesz zmienić ten próg, przekazując obiekt LanguageIdentificationOptions do 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];

Jeśli żaden język nie osiąga tego progu, na liście będzie znajdować się 1 element o wartości und.