Определите язык текста с помощью ML Kit на iOS

Вы можете использовать ML Kit для определения языка текстовой строки. Вы можете получить наиболее вероятный язык строки, а также оценки достоверности для всех возможных языков строки.

ML Kit распознает текст на более чем 100 различных языках в их родном алфавите. Кроме того, латинизированный текст можно распознать на арабском, болгарском, китайском, греческом, хинди, японском и русском языках. См. полный список поддерживаемых языков и скриптов.

Попробуйте это

Прежде чем вы начнете

  1. Включите в свой подфайл следующие модули ML Kit:
    pod 'GoogleMLKit/LanguageID', '3.2.0'
    
  2. После установки или обновления модулей вашего проекта откройте проект Xcode, используя его .xcworkspace . ML Kit поддерживается в Xcode версии 12.4 или новее.

Определить язык строки

Чтобы определить язык строки, получите экземпляр LanguageIdentification , а затем передайте строку методу identifyLanguage(for:) .

Например:

Быстрый

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

Цель-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");
                           }
                         }];

Если вызов успешен, обработчику завершения передается код языка BCP-47 , указывающий язык текста. Если ни один язык не может быть уверенно определен, передается код und (неопределенный).

По умолчанию ML Kit возвращает значение, отличное от und , только если он идентифицирует язык со значением достоверности не менее 0,5. Вы можете изменить этот порог, передав объект LanguageIdentificationOptions в languageIdentification(options:) :

Быстрый

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

Цель-C

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

Получить возможные языки строки

Чтобы получить значения достоверности наиболее вероятных языков строки, получите экземпляр LanguageIdentification , а затем передайте строку identifyPossibleLanguages(for:) .

Например:

Быстрый

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

Цель-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);
}];

Если вызов успешен, список объектов IdentifiedLanguage передается обработчику продолжения. Из каждого объекта вы можете получить код языка BCP-47 и уверенность в том, что строка написана на этом языке. Обратите внимание, что эти значения указывают на уверенность в том, что вся строка написана на данном языке; ML Kit не идентифицирует несколько языков в одной строке.

По умолчанию ML Kit возвращает только языки со значениями достоверности не менее 0,01. Вы можете изменить этот порог, передав объект LanguageIdentificationOptions в languageIdentification(options:) :

Быстрый

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

Цель-C

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

Если ни один язык не соответствует этому порогу, в списке будет один элемент со значением und .