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

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

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

시작하기 전에

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

문자열의 언어 식별

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

예를 들면 다음과 같습니다.

SwiftObjective-C
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")
  }
}
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:)에 전달하여 이 기준을 변경할 수 있습니다.

SwiftObjective-C
let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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

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

예를 들면 다음과 같습니다.

SwiftObjective-C
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"))
}
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:)에 전달하여 이 기준을 변경할 수 있습니다.

SwiftObjective-C
let options = LanguageIdentificationOptions(confidenceThreshold: 0.4)
let languageId = NaturalLanguage.naturalLanguage().languageIdentification(options: options)
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
    [[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
    [naturalLanguage languageIdentificationWithOptions:options];

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

Firebase용 ML Kit는 앱 개발자를 위해 바로 사용 가능한 ML 솔루션을 제공했습니다. 새로운 앱은 기기별 ML의 경우 독립형 ML Kit 라이브러리를 사용해야 하며 클라우드 기반 ML의 경우 Firebase ML을 사용해야 합니다.

업데이트됨 Feb 28, 2025