您可以使用机器学习套件识别文本字符串使用的语言。您可以获取字符串最可能使用的语言,也可以获取字符串可能使用的所有语言的置信度分数。
机器学习套件可在输入的文稿中识别出 103 种不同语言的文本。此外,还可以识别用拉丁字母拼写的阿拉伯文、保加利亚文、中文、希腊文、印地文、日文和俄文。
准备工作
- 将 Firebase 添加到您的 Android 项目(如果尚未添加)。
- 将 Android 版机器学习套件库的依赖项添加到您的模块(应用级层)Gradle 文件(通常为
app/build.gradle
):apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { // ... implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0' implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7' }
识别字符串使用的语言
要识别字符串使用的语言,请获取 FirebaseLanguageIdentification
的一个实例,然后将字符串传递给 identifyLanguage()
方法。
例如:
FirebaseLanguageIdentification languageIdentifier =
FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyLanguage(text)
.addOnSuccessListener(
new OnSuccessListener<String>() {
@Override
public void onSuccess(@Nullable String languageCode) {
if (languageCode != "und") {
Log.i(TAG, "Language: " + languageCode);
} else {
Log.i(TAG, "Can't identify language.");
}
}
})
.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
值。您可以通过将 FirebaseLanguageIdentificationOptions
对象传递给 getLanguageIdentification()
来更改此阈值:
FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
.getInstance()
.getLanguageIdentification(
new FirebaseLanguageIdentificationOptions.Builder()
.setIdentifyLanguageConfidenceThreshold(0.34f)
.build());
获取字符串可能使用的语言
要获取字符串最可能使用的语言的置信度值,请获取 FirebaseLanguageIdentification
的一个实例,然后将字符串传递给 identifyAllLanguages()
方法。
例如:
FirebaseLanguageIdentification languageIdentifier =
FirebaseNaturalLanguage.getInstance().getLanguageIdentification();
languageIdentifier.identifyAllLanguages(text)
.addOnSuccessListener(
new OnSuccessListener<String>() {
@Override
public void onSuccess(List<IdentifiedLanguage> identifiedLanguages) {
for (IdentifiedLanguage identifiedLanguage : identifiedLanguages) {
String language = identifiedLanguage.getLanguageCode();
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 代码以及字符串使用该语言的置信度。请参阅所支持的语言的完整列表。请注意,这些值表示整个字符串使用给定语言的置信度;如果一个字符串中使用了多种语言,那么机器学习套件将无法识别。
默认情况下,机器学习套件仅返回置信度值至少为 0.01 的语言。您可以通过将 FirebaseLanguageIdentificationOptions
对象传递给 getLanguageIdentification()
来更改此阈值:
FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
.getInstance()
.getLanguageIdentification(
new FirebaseLanguageIdentificationOptions.Builder()
.setIdentifyAllLanguagesConfidenceThreshold(0.5f)
.build());
如果没有语言符合此阈值,则此列表将包含一个值为 und
的项。