java - 阿拉伯语字符串的 Firebase 查询请求不起作用。仅适用于英文字符串
问题描述
我有一个代码来检查用户名是否已经被使用,如果用户名以英语(或一般的拉丁字母)存在,它可以正常工作,但如果用户名已经以阿拉伯语存在,则查询找不到现有的用户名。请看下面我的代码。
//Check if the user is already exist
final Query query = databaseReference.child("users").orderByChild("uNm").equalTo(userNameText);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.getChildrenCount() > 0){
System.out.println ("this is user in query username :" + dataSnapshot.getValue().toString());
Toast toast = Toast.makeText(ProfileEditing.this, " The username is already taken ", Toast.LENGTH_LONG);
userNameText 是用户想要使用的新键入的用户名。如果 userNameText 是英文并且用户名已经存在,则查询有效并找到它。如果 userNameText 是阿拉伯语并且用户名已经存在,则查询不起作用并且找不到它。
感谢有人可以提供帮助!
解决方案
1-首先,将 ML Kit Android 库的依赖项添加到您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中:
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'
2-识别字符串的语言,获取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.
// ...
}
});
3-默认情况下,ML Kit 仅在识别出置信度值至少为 0.5 的语言时才返回 und 以外的值。您可以通过将 FirebaseLanguageIdentificationOptions 对象传递给 getLanguageIdentification() 来更改此阈值:
FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
.getInstance()
.getLanguageIdentification(
new FirebaseLanguageIdentificationOptions.Builder()
.setIdentifyLanguageConfidenceThreshold(0.34f)
.build());
4-要获取字符串最可能语言的置信度值,请获取 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.
// ...
}
});
5- 默认情况下,ML Kit 仅返回置信度值至少为 0.01 的语言。您可以通过将 FirebaseLanguageIdentificationOptions 对象传递给 getLanguageIdentification() 来更改此阈值:
FirebaseLanguageIdentification languageIdentifier = FirebaseNaturalLanguage
.getInstance()
.getLanguageIdentification(
new FirebaseLanguageIdentificationOptions.Builder()
.setIdentifyAllLanguagesConfidenceThreshold(0.5f)
.build());
使用上面的5个步骤
推荐阅读
- html - 在
- java - Mempoi 生成具有相同数据的双工作表
- javascript - Excel VBA 单击网页中的按钮以下载文件并将其通过电子邮件发送到电子邮件列表
- amazon-web-services - AWS Route53 私有托管区域到内部负载均衡器
- java - Java中的BigInteger因子
- java - Apache CXF 和 Log4j2
- ios - 每 10 毫秒记录 pcmaudiodata 不播放
- reactjs - 我们如何在 useState 中使用 redux state 来设置初始值
- c++ - 访问由 void 指针引用的结构的成员
- php - 怎么显示名字