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

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

ML Kit rozpoznaje tekst w ponad 100 różnych językach w swoich rodzimych skryptach. Dodatkowo tekst zlatynizowany jest rozpoznawany w języku arabskim, bułgarskim, chińskim, greckim, hindi, japońskim, rosyjskim i rosyjskim. Zobacz pełną listę obsługiwanych języków i skryptów.

Wypróbuj

Zanim zaczniesz

  1. W pliku Podfile uwzględnij te pody ML Kit:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Po zainstalowaniu lub zaktualizowaniu podów w projekcie otwórz projekt Xcode, korzystając z jego polecenia .xcworkspace. ML Kit obsługuje Xcode w wersji 12.4 lub nowszej.

Określ język ciągu znaków

Aby zidentyfikować język ciągu znaków, pobierz wystąpienie LanguageIdentification, a potem przekaż go do metody identifyLanguage(for:).

Na przykład:

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

Jeśli wywołanie się powiedzie, kod języka BCP-47 zostanie przekazany do modułu obsługi ukończenia, który wskazuje język tekstu. Jeśli nie udało się wykryć języka, 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 wynoszącą co najmniej 0,5. Możesz zmienić ten próg, przekazując do obiektu languageIdentification(options:) obiekt LanguageIdentificationOptions:

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

Uzyskiwanie możliwych języków dla ciągu

Aby uzyskać wartości ufności języków, w przypadku których ciąg znaków jest najbardziej prawdopodobny, pobierz wystąpienie LanguageIdentification, a następnie przekaż ciąg do metody identifyPossibleLanguages(for:).

Na przykład:

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

Jeśli wywołanie się powiedzie, do modułu obsługi kontynuacji jest przekazywana lista obiektów IdentifiedLanguage. Z każdego obiektu możesz pobrać kod BCP-47 języka i poziom pewności, że ciąg znaków jest w tym języku. Te wartości wskazują, że cały ciąg znaków jest w danym języku. ML Kit nie identyfikuje wielu języków w jednym ciągu znaków.

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

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

Jeśli żaden język nie spełnia tego progu, lista zawiera 1 element z wartością und.