شناسایی زبان نوشتار با 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. وابستگی‌های کتابخانه‌های 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>
    

    همچنین می‌توانید به‌طور صریح دردسترس بودن مدل را بررسی کنید و ازطریق 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.
            // ...
        }

جاوا

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