برای تجزیه و تحلیل یک متن و استخراج موجودیتهای موجود در آن، متد annotate()
را فراخوانی کنید و آن را به رشته متن یا نمونهای از EntityExtractionParams
ارسال کنید که میتواند گزینههای اضافی مانند زمان مرجع، منطقه زمانی یا فیلتری را برای محدود کردن آن تعیین کند. زیر مجموعه ای از انواع موجودیت را جستجو کنید. API فهرستی از اشیاء EntityAnnotation
حاوی اطلاعات مربوط به هر موجودیت را برمی گرداند.
نام SDK | موجودیت-استخراج |
---|---|
پیاده سازی | داراییهای آشکارساز پایه بهطور ایستا به برنامه شما در زمان ساخت مرتبط هستند. |
تاثیر اندازه دارایی | استخراج موجودیت تا 5.6 مگابایت تأثیر اندازه برنامه دارد. |
آن را امتحان کنید
- با برنامه نمونه بازی کنید تا نمونه استفاده از این API را ببینید.
قبل از شروع
- در فایل
build.gradle
در سطح پروژه خود، مطمئن شوید که مخزن Maven Google در هر دو بخش buildscript و allprojects گنجانده شده است. وابستگی کتابخانه استخراج موجودیت کیت ML را به فایل gradle سطح برنامه ماژول خود اضافه کنید که معمولاً
app/build.gradle
نام دارد:dependencies { // … implementation 'com.google.mlkit:entity-extraction:16.0.0-beta5' }
استخراج موجودیت ها
یک شیء EntityExtractor
ایجاد کنید و آن را با EntityExtractorOptions
پیکربندی کنید
کاتلین
val entityExtractor = EntityExtraction.getClient( EntityExtractorOptions.Builder(EntityExtractorOptions.ENGLISH) .build())
جاوا
EntityExtractor entityExtractor = EntityExtraction.getClient( new EntityExtractorOptions.Builder(EntityExtractorOptions.ENGLISH) .build());
EntityExtractorOptions
همچنین در صورت نیاز یک Executor
تعریف شده توسط کاربر را می پذیرد، در غیر این صورت از Executor
پیش فرض در ML Kit استفاده می کند.
مطمئن شوید که مدل مورد نیاز در دستگاه دانلود شده است.
کاتلین
entityExtractor .downloadModelIfNeeded() .addOnSuccessListener { _ -> /* Model downloading succeeded, you can call extraction API here. */ } .addOnFailureListener { _ -> /* Model downloading failed. */ }
جاوا
entityExtractor .downloadModelIfNeeded() .addOnSuccessListener( aVoid -> { // Model downloading succeeded, you can call the extraction API here. }) .addOnFailureListener( exception -> { // Model downloading failed. });
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته یا EntityExtractionParams
را به annotate()
ارسال کنید. تا زمانی که مدل را در دسترس ندارید، annotate()
را صدا نکنید.
کاتلین
val params = EntityExtractionParams.Builder("My flight is LX373, please pick me up at 8am tomorrow.") .setEntityTypesFilter((/* optional entity type filter */) .setPreferredLocale(/* optional preferred locale */) .setReferenceTime(/* optional reference date-time */) .setReferenceTimeZone(/* optional reference timezone */) .build() entityExtractor .annotate(params) .addOnSuccessListener { // Annotation process was successful, you can parse the EntityAnnotations list here. } .addOnFailureListener { // Check failure message here. }
جاوا
EntityExtractionParams params = new EntityExtractionParams .Builder("My flight is LX373, please pick me up at 8am tomorrow.") .setEntityTypesFilter(/* optional entity type filter */) .setPreferredLocale(/* optional preferred locale */) .setReferenceTime(/* optional reference date-time */) .setReferenceTimeZone(/* optional reference timezone */) .build(); entityExtractor .annotate(params) .addOnSuccessListener(new OnSuccessListener<List<EntityAnnotation>>() { @Override public void onSuccess(List<EntityAnnotation> entityAnnotations) { // Annotation process was successful, you can parse the EntityAnnotations list here. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Check failure message here. } });
PreferredLocale
، ReferenceTime
و ReferenceTimeZone
فقط بر موجودیتهای DateTime تأثیر میگذارند. اگر اینها به صراحت تنظیم نشده باشند، به طور پیش فرض مقادیر دستگاه کاربر را تعیین می کنند.
روی نتایج حاشیه نویسی حلقه بزنید تا اطلاعات موجودات شناسایی شده را بازیابی کنید.
کاتلین
for (entityAnnotation in entityAnnotations) { val entities: List<Entity> = entityAnnotation.entities Log.d(TAG, "Range: ${entityAnnotation.start} - ${entityAnnotation.end}") for (entity in entities) { when (entity) { is DateTimeEntity -> { Log.d(TAG, "Granularity: ${entity.dateTimeGranularity}") Log.d(TAG, "TimeStamp: ${entity.timestampMillis}") } is FlightNumberEntity -> { Log.d(TAG, "Airline Code: ${entity.airlineCode}") Log.d(TAG, "Flight number: ${entity.flightNumber}") } is MoneyEntity -> { Log.d(TAG, "Currency: ${entity.unnormalizedCurrency}") Log.d(TAG, "Integer part: ${entity.integerPart}") Log.d(TAG, "Fractional Part: ${entity.fractionalPart}") } else -> { Log.d(TAG, " $entity") } } } }
جاوا
List<EntityAnnotation> entityAnnotations = /* Get from EntityExtractor */; for (EntityAnnotation entityAnnotation : entityAnnotations) { List<Entity> entities = entityAnnotation.getEntities(); Log.d(TAG, String.format("Range: [%d, %d)", entityAnnotation.getStart(), entityAnnotation.getEnd())); for (Entity entity : entities) { switch (entity.getType()) { case Entity.TYPE_DATE_TIME: DateTimeEntity dateTimeEntity = entity.asDateTimeEntity(); Log.d(TAG, "Granularity: " + dateTimeEntity.getDateTimeGranularity()); Log.d(TAG, "Timestamp: " + dateTimeEntity.getTimestampMillis()); case Entity.TYPE_FLIGHT_NUMBER: FlightNumberEntity flightNumberEntity = entity.asFlightNumberEntity(); Log.d(TAG, "Airline Code: " + flightNumberEntity.getAirlineCode()); Log.d(TAG, "Flight number: " + flightNumberEntity.getFlightNumber()); case Entity.TYPE_MONEY: MoneyEntity moneyEntity = entity.asMoneyEntity(); Log.d(TAG, "Currency: " + moneyEntity.getUnnormalizedCurrency()); Log.d(TAG, "Integer Part: " + moneyEntity.getIntegerPart()); Log.d(TAG, "Fractional Part: " + moneyEntity.getFractionalPart()); case Entity.TYPE_UNKNOWN: default: Log.d(TAG, "Entity: " + entity); } } }
زمانی که دیگر به شیء EntityExtractor
نیاز ندارید، متد close()
را فراخوانی کنید. اگر از EntityExtractor
در یک Fragment یا AppCompatActivity استفاده می کنید، می توانید LifecycleOwner.getLifecycle() را در Fragment یا AppCompatActivity و سپس Lifecycle.addObserver را فراخوانی کنید. به عنوان مثال:
کاتلین
val options = … val extractor = EntityExtraction.getClient(options); getLifecycle().addObserver(extractor);
جاوا
EntityExtractorOptions options = … EntityExtractor extractor = EntityExtraction.getClient(options); getLifecycle().addObserver(extractor);
به طور صریح مدل های استخراج موجودیت را مدیریت کنید
هنگامی که از API استخراج موجودیت همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های خاص زبان را در صورت نیاز در دستگاه دانلود می کند (زمانی که downloadModelIfNeeded()
را فرا می خوانید). همچنین میتوانید با استفاده از API مدیریت مدل ML Kit، مدلهایی را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر می خواهید مدل ها را زودتر از موعد دانلود کنید، این می تواند مفید باشد. API همچنین به شما امکان می دهد مدل هایی را که دیگر مورد نیاز نیستند حذف کنید.
کاتلین
val modelManager = RemoteModelManager.getInstance() // Get entity extraction models stored on the device. modelManager.getDownloadedModels(EntityExtractionRemoteModel::class.java) .addOnSuccessListener { // ... } .addOnFailureListener({ // Error. }) // Delete the German model if it's on the device. val germanModel = EntityExtractionRemoteModel.Builder(EntityExtractorOptions.GERMAN).build() modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener({ // Model deleted. }) .addOnFailureListener({ // Error. }) // Download the French model. val frenchModel = EntityExtractionRemoteModel.Builder(EntityExtractorOptions.FRENCH).build() val conditions = DownloadConditions.Builder() .requireWifi() .build() modelManager.download(frenchModel, conditions) .addOnSuccessListener({ // Model downloaded. }) .addOnFailureListener({ // Error. })
جاوا
// Get entity extraction models stored on the device. modelManager.getDownloadedModels(EntityExtractionRemoteModel.class) .addOnSuccessListener(new OnSuccessListener<Set<EntityExtractionRemoteModel>>() { @Override public void onSuccess(Set<EntityExtractionRemoteModel> models) { // ... } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Delete the German model if it's on the device. EntityExtractionRemoteModel germanModel = new EntityExtractionRemoteModel.Builder(EntityExtractorOptions.GERMAN).build(); modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void v) { // Model deleted. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Download the French model. EntityExtractionRemoteModel frenchModel = new EntityExtractionRemoteModel.Builder(EntityExtractorOptions.FRENCH).build(); DownloadConditions conditions = new DownloadConditions.Builder() .requireWifi() .build(); modelManager.download(frenchModel, conditions) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void v) { // Model downloaded. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } });