شناسایی زبان نوشتار با ML Kit در Android

می‌توانید از ML Kit برای شناسایی زبان رشته نوشتار استفاده کنید. می‌توانید محتمل‌ترین زبان رشته و همچنین امتیازهای اطمینان برای همه زبان‌های احتمالی رشته را دریافت کنید.

‫ML Kit نوشتار را به بیش‌از ۱۰۰ زبان مختلف با خطوط بومی آن‌ها تشخیص می‌دهد. علاوه‌براین، نوشتار رومی‌سازی‌شده برای زبان‌های عربی، بلغاری، چینی، یونانی، ژاپنی، روسی، و هندی قابل‌تشخیص است. فهرست کامل زبان‌ها و خط‌های پشتیبانی‌شده را ببینید.

موجود در بسته‌بندیتفکیک‌شده
نام کتابخانهcom.google.mlkit:language-idcom.google.android.gms:play-services-mlkit-language-id
پیاده‌سازیمدل در زمان ساخت به‌صورت ایستا به برنامه شما پیوند داده می‌شود.مدل به‌طور پویا ازطریق «خدمات Google Play» بارگیری می‌شود.
تأثیر اندازه برنامهحدود ۹۰۰ کیلوبایت افزایش اندازه.حدود ۲۰۰ کیلوبایت افزایش اندازه.
زمان مقداردهی اولیهمدل بلافاصله دردسترس است.ممکن است لازم باشد قبل‌از اولین استفاده منتظر بمانید تا مدل بارگیری شود.

امتحان کنید

  • با برنامه نمونه بازی کنید تا نمونه‌ای از استفاده از این API را ببینید.

قبل‌از شروع

  1. در فایل build.gradle سطح پروژه، حتماً مخزن Maven مربوط به Google را در هر دو بخش buildscript و allprojects اضافه کنید.

  2. وابستگی‌های کتابخانه‌های 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'
    }
    
  3. اگر تصمیم بگیرید از مدل در «خدمات 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 را دریافت کنید، و سپس رشته را به روش 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.
            // ...
        }

جاوا

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 برمی‌گرداند که زبان را با مقدار اطمینان حداقل ۰٫۵ شناسایی کند. می‌توانید این آستانه را با ارسال یک شیء LanguageIdentificationOptions به getClient() تغییر دهید:

Kotlin

val languageIdentifier = LanguageIdentification
        .getClient(LanguageIdentificationOptions.Builder()
                .setConfidenceThreshold(0.34f)
                .build())

جاوا

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.
            // ...
        }

جاوا

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 فقط زبان‌هایی را برمی‌گرداند که مقدار اطمینان آن‌ها حداقل ۰٫۰۱ باشد. می‌توانید این آستانه را با ارسال یک شیء LanguageIdentificationOptions به getClient() تغییر دهید:

Kotlin

val languageIdentifier = LanguageIdentification
      .getClient(LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build())

جاوا

LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
      new LanguageIdentificationOptions.Builder()
              .setConfidenceThreshold(0.5f)
              .build());

اگر هیچ زبانی این آستانه را برآورده نکند، فهرست یک مورد با مقدار und دارد.