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

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

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

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

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

Прежде чем вы начнете

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

  2. Добавьте зависимости для библиотек Android ML Kit в файл Gradle уровня приложения вашего модуля (обычно это app/build.gradle ). Выберите одну из следующих зависимостей в зависимости от ваших потребностей:

    Для объединения модели с вашим приложением:

    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 Store. Для этого добавьте следующее объявление в файл 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 сервисов Google Play ModuleInstallClient .

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

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

Чтобы определить язык строки, вызовите 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 .