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

ML Kit를 사용하면 텍스트 문자열의 언어를 식별할 수 있습니다. 다음과 같은 작업을 할 수 있습니다. 문자열의 언어일 가능성이 가장 높으며 모든 문자열에 대한 신뢰도 점수를 문자열의 가능한 언어를 나타냅니다.

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

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

사용해 보기

  • 샘플 앱을 사용하여 이 API의 사용 예를 참조하세요.

시작하기 전에

<ph type="x-smartling-placeholder">
  1. 프로젝트 수준 build.gradle 파일에 Google의 buildscriptallprojects 섹션에 있는 Maven 저장소

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

    모델을 앱과 번들로 묶는 경우:

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

    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.
            // ...
        }

자바

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는 und 이외의 값을 반환합니다. 신뢰값이 0.5 이상인 언어를 선택해야 합니다. 이 LanguageIdentificationOptions 객체를 getClient()에 전달하여 임곗값을 지정합니다.

Kotlin

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

자바

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.
            // ...
        }

자바

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())

자바

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

이 기준을 충족하는 언어가 없으면 목록에 und