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

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

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

همراه تفکیک شده
نام کتابخانه com.google.mlkit:language-id com.google.android.gms:play-services-mlkit-language-id
پیاده سازی مدل به طور ایستا به برنامه شما در زمان ساخت پیوند داده می شود. مدل به صورت پویا از طریق خدمات Google Play دانلود می شود.
تاثیر اندازه برنامه حدود 900 کیلوبایت افزایش حجم. افزایش حجم حدود 200 کیلوبایت
زمان اولیه سازی مدل فورا موجود است ممکن است قبل از اولین استفاده باید منتظر بمانید تا مدل دانلود شود.

آن را امتحان کنید

قبل از شروع

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

  2. وابستگی های کتابخانه های اندروید ML Kit را به فایل 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 ارسال کنید.

به عنوان مثال:

کاتلین

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

کاتلین

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

جاوا

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

زبان های ممکن یک رشته را دریافت کنید

برای به دست آوردن مقادیر اطمینان از محتمل ترین زبان های رشته، یک نمونه از LanguageIdentifier دریافت کنید و سپس رشته را به متد identifyPossibleLanguages() ​​ارسال کنید.

به عنوان مثال:

کاتلین

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

کاتلین

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

جاوا

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

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