您可以使用 ML Kit 识别文本字符串使用的语言。您可以获取字符串最可能使用的语言,也可以获取字符串可能使用的所有语言的置信度分数。
机器学习套件可在输入的文稿中识别出 100 多种不同语言的文本。此外,还可以识别用拉丁字母拼写的阿拉伯文、保加利亚文、中文、希腊文、印地文、日文和俄文。如需查看支持的语言和文字的完整列表,请点击相应链接。
捆绑 | 解除绑定 | |
---|---|---|
库名称 | com.google.mlkit:language-id | com.google.android.gms:play-services-mlkit-language-id |
实现 | 模型在构建时静态链接到您的应用。 | 模型通过 Google Play 服务动态下载。 |
应用大小的影响 | 大约增加了 900 KB。 | 大小增加了约 200 KB。 |
初始化时间 | 模型可立即使用。 | 可能需要等待模型下载完毕,然后才能首次使用。 |
试试看
- 您可以试用示例应用,了解此 API 的使用示例。
准备工作
请务必在您的项目级
build.gradle
文件中的buildscript
和allprojects
部分添加 Google 的 Maven 代码库。将 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 服务中的模型,则可将应用配置为在从 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
的实例,然后将字符串传递给 LanguageIdentifier
的 identifyLanguage()
方法。
例如:
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
(未确定)。
默认情况下,机器学习套件仅在识别置信度值至少为 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 仅返回置信度值至少为 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
的项。