Вы можете использовать ML Kit для определения языка текстовой строки. Вы можете получить наиболее вероятный язык строки, а также оценки достоверности для всех возможных языков строки.
ML Kit распознает текст более чем на 100 языках с использованием их оригинальных алфавитов. Кроме того, распознается текст, написанный латиницей, на арабском, болгарском, греческом, китайском, русском, японском языках и хинди. Ознакомьтесь с полным списком поддерживаемых языков и письменностей.
| Пакетный | Без пакета | |
|---|---|---|
| Название библиотеки | com.google.mlkit:language-id | com.google.android.gms:play-services-mlkit-language-id |
| Реализация | Модель статически связана с приложением во время сборки. | Модель динамически скачивается через сервисы Google Play. |
| Влияние размера приложения | Размер увеличивается примерно на 900 КБ. | Размер увеличивается примерно на 200 КБ. |
| Время инициализации | Модель доступна сразу. | Перед первым использованием может потребоваться дождаться скачивания модели. |
Попробовать
- Попробуйте поработать с примером приложения, чтобы понять, как использовать этот API.
Подготовка
В файле
build.gradleна уровне проекта добавьте репозиторий Maven от Google в разделыbuildscriptиallprojects.Добавьте зависимости для библиотек 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' }Если вы решите использовать модель в сервисах Google Play, то можете настроить приложение так, чтобы оно автоматически скачивало модель на устройство после установки из Google 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>Вы также можете проверить доступность модели и запросить ее скачивание через ModuleInstallClient API сервисов Google Play.
Если вы не включите скачивание модели во время установки или не запросите явное скачивание, модель будет скачана при первом запуске идентификатора. Запросы, сделанные до завершения скачивания, не принесут результатов.
Определение языка строки
Чтобы определить язык строки, вызовите LanguageIdentification.getClient(), чтобы получить экземпляр LanguageIdentifier, а затем передайте строку в метод identifyLanguage() класса LanguageIdentifier.
Пример:
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 возвращает значение, отличное от und, только если определяет язык с уровнем достоверности не менее 0,5. Вы можете изменить это пороговое значение, передав объект 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.