콘솔로 이동

iOS에서 ML Kit를 사용하여 텍스트의 언어 식별

ML Kit를 사용하면 텍스트 문자열의 언어를 식별할 수 있습니다. 문자열의 언어일 가능성이 있는 언어를 가져오거나 문자열의 가능한 모든 언어에 대한 신뢰도 점수를 가져올 수 있습니다.

ML Kit는 네이티브 스크립트에서 103개의 다른 언어로된 텍스트를 인식합니다. 또한 그리스어, 러시아어, 불가리아어, 아랍어, 일본어, 중국어, 힌디어로 된 로마자 텍스트도 인식할 수 있습니다.

이 API의 사용 예는 GitHub의 ML Kit 빠른 시작 샘플을 참조하세요.

시작하기 전에

  1. 앱에 Firebase를 아직 추가하지 않은 경우 시작 가이드의 단계에 따라 추가합니다.
  2. Podfile에 ML Kit 라이브러리를 포함합니다.
    pod 'Firebase/Analytics'
    pod 'Firebase/MLNaturalLanguage'
    pod 'Firebase/MLNLLanguageID'
    
    프로젝트의 포드를 설치하거나 업데이트한 후 .xcworkspace를 사용하여 Xcode 프로젝트를 열어야 합니다.
  3. 앱에서 Firebase를 가져옵니다.

    Swift

    import Firebase

    Objective-C

    @import Firebase;

문자열의 언어 식별

문자열의 언어를 식별하려면 LanguageIdentification의 인스턴스를 가져온 후 문자열을 identifyLanguage(for:) 메소드로 전달합니다.

예:

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

호출이 성공하면 BCP-47 언어 코드가 완료 핸들러로 전달되어 텍스트의 언어를 표시합니다. 지원 언어의 전체 목록을 참조하세요. 언어를 확실하게 감지할 수 없는 경우 und(미확인) 코드가 전달됩니다.

기본적으로 ML Kit는 신뢰도 값이 0.5 이상인 언어를 식별하는 경우에만 und가 아닌 값을 반환합니다. LanguageIdentificationOptions 객체를 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];

문자열의 가능한 언어 가져오기

문자열의 언어일 가능성이 있는 언어의 신뢰도 값을 가져오려면 LanguageIdentification의 인스턴스를 가져온 후 문자열을 identifyPossibleLanguages(for:) 메소드에 전달합니다.

예:

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

호출이 성공하면 IdentifiedLanguage 객체의 목록이 지속 핸들러에 전달됩니다. 각 객체에서 언어의 BCP-47 코드와 문자열이 해당 언어에 있다는 신뢰도를 얻을 수 있습니다. 지원 언어의 전체 목록을 참조하세요. 이 값은 전체 문자열이 지정된 언어에 있음을 나타냅니다. ML Kit는 단일 문자열에서 여러 언어를 식별하지 않습니다.

기본적으로 ML Kit는 신뢰도 값이 0.01 이상인 언어만 반환합니다. LanguageIdentificationOptions 객체를 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];

이 임계값을 충족하는 언어가 없으면 목록에 und 값이 포함된 항목 하나만 표시됩니다.