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

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

ML Kit rozpoznaje tekst w ponad 100 różnych językach w skryptach natywnych. Tekst zlatynizowany można też rozpoznać w językach arabskim, bułgarskim, chińskim, greckim, hindi, japońskim i rosyjskim. Zobacz pełną listę obsługiwanych języków i skryptów.

Wypróbuj

Zanim zaczniesz

  1. W pliku Podfile umieść te pody ML Kit:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. Po zainstalowaniu lub zaktualizowaniu podów projektu otwórz projekt Xcode za pomocą .xcworkspace ML Kit jest obsługiwany w Xcode w wersji 12.4 lub nowszej.

Określ język ciągu

Aby określić język ciągu, pobierz wystąpienie LanguageIdentification, a następnie przekaż ten ciąg do funkcji Metoda 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 to przekazywane do modułu obsługi uzupełniania, co wskazuje język tekstu. Jeśli nie .und

Domyślnie ML Kit zwraca wartość inną niż und tylko wtedy, gdy identyfikuje 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.languageIdentification(options: options)

Objective-C

MLKLanguageIdentificationOptions *options =
    [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
MLKLanguageIdentification *languageId =
    [MLKLanguageIdentification languageIdentificationWithOptions:options];

Znajdź możliwe języki ciągu

Aby uzyskać wartości ufności najbardziej prawdopodobnych języków ciągu, pobierz metodę wystąpienie LanguageIdentification, a następnie przekazać ciąg znaków do funkcji Metoda 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, lista obiektów IdentifiedLanguage zostanie przekazana do funkcji z funkcją obsługi kontynuacji. Z każdego obiektu możesz pobrać kod BCP-47 języka i pewność, że tekst jest w tym języku. Pamiętaj, że te wartości wskazują pewność, że cały ciąg jest w danym język; ML Kit nie identyfikuje wielu języków w 1 ciągu znaków.

Domyślnie ML Kit zwraca tylko te języki, w przypadku których poziom ufności wynosi 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.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, na liście znajduje się 1 element o wartości und