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

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

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

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

امتحانش کن.

قبل از اینکه شروع کنی

  1. در فایل build.gradle سطح پروژه خود، مطمئن شوید که مخزن Maven گوگل را هم در بخش‌های 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'
    }
    

    برای استفاده از مدل در سرویس‌های گوگل پلی:

    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. اگر تصمیم دارید از مدل در سرویس‌های گوگل پلی استفاده کنید ، می‌توانید برنامه خود را طوری پیکربندی کنید که پس از نصب برنامه از فروشگاه پلی استور، مدل را به طور خودکار روی دستگاه دانلود کند. برای انجام این کار، اعلان زیر را به فایل 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>
    

    همچنین می‌توانید به صراحت در دسترس بودن مدل را بررسی کرده و از طریق API ModuleInstallClient سرویس‌های گوگل پلی درخواست دانلود دهید.

    اگر دانلود مدل در زمان نصب را فعال نکنید یا درخواست دانلود صریح را ندهید، مدل در اولین باری که شناسه را اجرا می‌کنید دانلود می‌شود. درخواست‌هایی که قبل از اتمام دانلود انجام می‌دهید، هیچ نتیجه‌ای ندارند.

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

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