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

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

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

시작하기 전에

  1. 먼저 Android 프로젝트에 Firebase를 추가합니다.
  2. 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에 ML Kit Android 라이브러리의 종속 항목을 추가합니다.
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
    }

문자열의 언어 식별

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

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

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyLanguage(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(@Nullable String languageCode) {
              if (languageCode != "und") {
                Log.i(TAG, "Language: " + languageCode);
              } else {
                Log.i(TAG, "Can't identify language.");
              }
            }
          })
      .addOnFailureListener(
          new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
              // Model couldn’t be loaded or other internal error.
              // ...
            }
          });

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

기본적으로 ML Kit는 신뢰값이 0.5 이상인 언어를 식별하는 경우에만 und 외의 값을 반환합니다. FirebaseLanguageIdentificationOptions 객체를 getLanguageIdentification()에 전달하여 이 기준을 변경할 수 있습니다.

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyLanguageConfidenceThreshold(0.34f)
                        .build());

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

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

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

FirebaseLanguageIdentification languageIdentifier =
        FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyAllLanguages(text)
      .addOnSuccessListener(
          new OnSuccessListener<String>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
              for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                String language = identifiedLanguage.getLanguageCode();
                float confidence = identifiedLanguage.getConfidence();
                Log.i(TAG, language + " (" + confidence + ")");
              }
            }
          })
      .addOnFailureListener(
          new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
              // Model couldn’t be loaded or other internal error.
              // ...
            }
          });

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

기본적으로 ML Kit는 신뢰도 값이 0.01 이상인 언어만 반환합니다. FirebaseLanguageIdentificationOptions 객체를 getLanguageIdentification()에 전달하여 이 기준을 변경할 수 있습니다.

FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
        .getInstance()
        .getLanguageIdentification(
                new FirebaseLanguageIdentificationOptions.Builder()
                        .setIdentifyAllLanguagesConfidenceThreshold(0.5f)
                        .build());

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