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

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

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

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

  1. Если вы еще не добавили Firebase в свое приложение, сделайте это, выполнив действия, описанные в руководстве по началу работы .
  2. Включите библиотеки ML Kit в свой подфайл:
    pod 'Firebase/MLNaturalLanguage', '6.25.0'
    pod 'Firebase/MLNLLanguageID', '6.25.0'
    
    После установки или обновления модулей вашего проекта обязательно откройте проект Xcode, используя его .xcworkspace .
  3. Импортируйте Firebase в свое приложение:

    Быстрый

    import Firebase

    Цель-C

    @import Firebase;

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

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

Например:

Быстрый

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

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

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

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

Быстрый

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

Цель-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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

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

Например:

Быстрый

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

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

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

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

Быстрый

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

Цель-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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