Определите язык текста с помощью ML Kit на Android. Определите язык текста с помощью ML Kit на Android.

Вы можете использовать ML Kit для определения языка строки текста. Вы можете получить наиболее вероятный язык строки, а также оценки достоверности для всех возможных языков строки.

ML Kit распознаёт текст на более чем 100 языках в их родной письменности. Кроме того, латинизированный текст распознаётся на арабском, болгарском, китайском, греческом, хинди, японском и русском языках. Полный список поддерживаемых языков и письменностей см. здесь.

В комплекте Разделенный
Название библиотеки com.google.mlkit:language-id com.google.android.gms:play-services-mlkit-language-id
Выполнение Модель статически привязывается к вашему приложению во время сборки. Модель динамически загружается через Google Play Services.
Влияние размера приложения Увеличение размера примерно на 900 КБ. Увеличение размера примерно на 200 КБ.
Время инициализации Модель доступна немедленно. Возможно, придется подождать, пока модель загрузится, перед первым использованием.

Попробуйте это

Прежде чем начать

  1. В файле build.gradle уровня проекта обязательно включите репозиторий Maven от Google в разделы buildscript и allprojects .

  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 Services:

    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>
    

    Вы также можете явно проверить доступность модели и запросить загрузку через API ModuleInstallClient сервисов Google Play.

    Если вы не включите загрузку модели во время установки или не запросите явную загрузку, модель будет загружена при первом запуске идентификатора. Запросы, сделанные до завершения загрузки, не дадут результатов.

Определить язык строки

Чтобы определить язык строки, вызовите LanguageIdentification.getClient() для получения экземпляра LanguageIdentifier , а затем передайте строку методу identifyLanguage() объекта LanguageIdentifier .

Например:

Котлин

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

Котлин

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

Ява

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

Получить возможные языки строки

Чтобы получить значения достоверности наиболее вероятных языков строки, получите экземпляр LanguageIdentifier , а затем передайте строку методу identifyPossibleLanguages() .

Например:

Котлин

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

Котлин

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

Ява

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

Если ни один язык не соответствует этому порогу, в списке будет один элемент со значением und .