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

ML Kit를 사용하여 텍스트 문자열의 언어를 식별할 수 있습니다. 문자열의 가장 가능성이 높은 언어와 문자열의 가능한 모든 언어에 대한 신뢰도 점수를 가져올 수 있습니다.

ML Kit는 기본 스크립트에서 100개 이상의 다양한 언어로 된 텍스트를 인식합니다. 또한 그리스어, 러시아어, 불가리아어, 러시아어, 불가리아어, 아랍어, 일본어, 중국어, 힌디어로 된 로마자 텍스트도 인식할 수 있습니다. 지원되는 언어 및 스크립트의 전체 목록을 참고하세요.

번들번들로 묶이지 않음
라이브러리 이름com.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
구현모델이 빌드 시간에 앱에 정적으로 연결됩니다.모델이 Google Play 서비스를 통해 동적으로 다운로드됩니다.
앱 크기의 영향크기가 약 900KB 증가했습니다.크기가 약 200KB 증가합니다.
초기화 시간모델을 즉시 사용할 수 있습니다.처음 사용하기 전에 모델이 다운로드될 때까지 기다려야 할 수도 있습니다.

사용해 보기

  • 샘플 앱을 살펴보고 이 API의 사용 예를 확인합니다.

시작하기 전에

  1. 프로젝트 수준 build.gradle 파일의 buildscriptallprojects 섹션에 Google의 Maven 저장소가 포함되어야 합니다.

  2. 모듈의 앱 수준 Gradle 파일(일반적으로 app/build.gradle)에 ML Kit Android 라이브러리의 종속 항목을 추가합니다. 필요에 따라 다음 종속 항목 중 하나를 선택합니다.

    모델을 앱과 번들로 묶는 방법은 다음과 같습니다.

    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:language-id:17.0.5'
    }
    

    Google Play 서비스에서 모델을 사용하는 경우:

    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-language-id:17.0.0'
    }
    
  3. Google Play 서비스에서 모델을 사용하기로 선택한 경우 Play 스토어에서 앱이 설치된 후 기기에 모델을 자동으로 다운로드하도록 앱을 구성할 수 있습니다. 이를 위해 다음 선언을 앱의 AndroidManifest.xml 파일에 추가합니다.

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="langid" >
          <!-- To use multiple models: android:value="langid,model2,model3" -->
    </application>
    

    Google Play 서비스 ModuleInstallClient API를 통해 모델 가용성을 명시적으로 확인하고 다운로드를 요청할 수도 있습니다.

    설치 시 모델 다운로드를 사용 설정하지 않거나 명시적 다운로드를 요청하지 않으면 식별자를 처음 실행할 때 모델이 다운로드됩니다. 다운로드가 완료되기 전에 요청하면 결과가 생성되지 않습니다.

문자열의 언어 식별

문자열의 언어를 식별하려면 LanguageIdentification.getClient()를 호출하여 LanguageIdentifier의 인스턴스를 가져온 다음 문자열을 LanguageIdentifieridentifyLanguage() 메서드에 전달합니다.

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

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener { languageCode ->
            if (languageCode == "und") {
                Log.i(TAG, "Can't identify language.")
            } else {
                Log.i(TAG, "Language: $languageCode")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyLanguage(text)
        .addOnSuccessListener(
                new OnSuccessListener<String>() {
                    @Override
                    public void onSuccess(@Nullable String languageCode) {
                        if (languageCode.equals("und")) {
                            Log.i(TAG, "Can't identify language.");
                        } else {
                            Log.i(TAG, "Language: " + languageCode);
                        }
                    }
                })
        .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 이외의 값을 반환합니다. LanguageIdentificationOptions 객체를 getClient()에 전달하여 이 기준을 변경할 수 있습니다.

Kotlin

val languageIdentifier = LanguageIdentification
        .getClient(LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
        new LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build());

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

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

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

Kotlin

val languageIdentifier = LanguageIdentification.getClient()
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener { identifiedLanguages ->
            for (identifiedLanguage in identifiedLanguages) {
                val language = identifiedLanguage.languageTag
                val confidence = identifiedLanguage.confidence
                Log.i(TAG, "$language $confidence")
            }
        }
        .addOnFailureListener {
            // Model couldn’t be loaded or other internal error.
            // ...
        }

Java

LanguageIdentifier languageIdentifier =
        LanguageIdentification.getClient();
languageIdentifier.identifyPossibleLanguages(text)
        .addOnSuccessListener(new OnSuccessListener<List<IdentifiedLanguage>>() {
            @Override
            public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
                for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
                    String language = identifiedLanguage.getLanguageTag();
                    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 이상인 언어만 반환합니다. LanguageIdentificationOptions 객체를 getClient()에 전달하여 이 기준을 변경할 수 있습니다.

Kotlin

val languageIdentifier = LanguageIdentification
      .getClient(LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build())

Java

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
      new LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build());

이 임곗값을 충족하는 언어가 없으면 목록에 und 값이 포함된 항목이 하나 있습니다.