لتحليل جزء من النص واستخراج الكيانات منه، استدعِ واجهة برمجة التطبيقات لاستخراج الكيانات في حزمة تعلّم الآلة من خلال تمرير النص مباشرةً إلى طريقة annotateText:completion:. يمكنك أيضًا تمرير عنصر EntityExtractionParams اختياري يحتوي على خيارات إعداد أخرى، مثل وقت مرجعي أو منطقة زمنية أو فلتر لحصر البحث في مجموعة فرعية من أنواع الكيانات.
تعرض واجهة برمجة التطبيقات قائمة بعناصر EntityAnnotation تحتوي على معلومات عن كل كيان.
يتم ربط مواد عرض أداة رصد الكيانات الأساسية بشكل ثابت في وقت تشغيل التطبيق. وتضيف هذه المواد حوالي 10.7 ميغابايت إلى تطبيقك.
للتجربة:
- يمكنك تجربة التطبيق النموذجي للاطّلاع على مثال على استخدام واجهة برمجة التطبيقات هذه.
قبل البدء
أدرِج مكتبات حزمة تعلّم الآلة التالية في ملف Podfile:
pod 'GoogleMLKit/EntityExtraction', '8.0.0'بعد تثبيت أو تعديل ملفات Pods في مشروعك، افتح مشروع Xcode باستخدام ملف .xcworkspace. تتوافق حزمة تعلّم الآلة مع الإصدار 13.2.1 من Xcode أو الإصدارات الأحدث.
استخراج الكيانات من النص
لاستخراج الكيانات من النص، أنشئ أولاً عنصر EntityExtractorOptions من خلال تحديد اللغة واستخدِم هذا العنصر لإنشاء مثيل EntityExtractor
Swift
// Note: You can specify any of the 15 languages entity extraction supports here. let options = EntityExtractorOptions(modelIdentifier: EntityExtractionModelIdentifier.english) let entityExtractor = EntityExtractor.entityExtractor(options: options)
Objective-C
// Note: You can specify any of the 15 languages entity extraction supports here. MLKEntityExtractorOptions *options = [[MLKEntityExtractorOptions alloc] initWithModelIdentifier:MLKEntityExtractionModelIdentifierEnglish]; MLKEntityExtractor *entityExtractor = [MLKEntityExtractor entityExtractorWithOptions:options];
بعد ذلك، تأكَّد من تنزيل نموذج اللغة المطلوب على الجهاز:
Swift
entityExtractor.downloadModelIfNeeded(completion: { // If the error is nil, the download completed successfully. })
Objective-C
[entityExtractor downloadModelIfNeededWithCompletion:^(NSError *_Nullable error) { // If the error is nil, the download completed successfully. }];
بعد تنزيل النموذج، مرِّر سلسلة وMLKEntityExtractionParams اختياري إلى طريقة annotate.
Swift
// The EntityExtractionParams parameter is optional. Only instantiate and // configure one if you need to customize one or more of its params. var params = EntityExtractionParams() // The params object contains the following properties which can be customized on // each annotateText: call. Please see the class's documentation for a more // detailed description of what each property represents. params.referenceTime = Date(); params.referenceTimeZone = TimeZone(identifier: "GMT"); params.preferredLocale = Locale(identifier: "en-US"); params.typesFilter = Set([EntityType.address, EntityType.dateTime]) extractor.annotateText( text.string, params: params, completion: { result, error in // If the error is nil, the annotation completed successfully and any results // will be contained in the `result` array. } )
Objective-C
// The MLKEntityExtractionParams property is optional. Only instantiate and // configure one if you need to customize one or more of its params. MLKEntityExtractionParams *params = [[MLKEntityExtractionParams alloc] init]; // The params object contains the following properties which can be customized on // each annotateText: call. Please see the class's documentation for a fuller // description of what each property represents. params.referenceTime = [NSDate date]; params.referenceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; params.preferredLocale = [NSLocale localWithLocaleIdentifier:@"en-US"]; params.typesFilter = [NSSet setWithObjects:MLKEntityExtractionEntityTypeAddress, MLKEntityExtractionEntityTypeDateTime, nil]; [extractor annotateText:text.string withParams:params completion:^(NSArray*_Nullable result, NSError *_Nullable error) { // If the error is nil, the annotation completed successfully and any results // will be contained in the `result` array. }
كرِّر نتائج التعليقات التوضيحية لاسترداد معلومات عن الكيانات التي تم التعرّف عليها.
Swift
// let annotations be the Array! returned from EntityExtractor for annotation in annotations { let entities = annotation.entities for entity in entities { switch entity.entityType { case EntityType.dateTime: guard let dateTimeEntity = entity.dateTimeEntity else { print("This field should be populated.") return } print("Granularity: %d", dateTimeEntity.dateTimeGranularity) print("DateTime: %@", dateTimeEntity.dateTime) case EntityType.flightNumber: guard let flightNumberEntity = entity.flightNumberEntity else { print("This field should be populated.") return } print("Airline Code: %@", flightNumberEntity.airlineCode) print("Flight number: %@", flightNumberEntity.flightNumber) case EntityType.money: guard let moneyEntity = entity.moneyEntity else { print("This field should be populated.") return } print("Currency: %@", moneyEntity.integerPart) print("Integer Part: %d", moneyEntity.integerPart) print("Fractional Part: %d", moneyEntity.fractionalPart) // Add additional cases as needed. default: print("Entity: %@", entity); } } }
Objective-C
NSArray*annotations; // Returned from EntityExtractor for (MLKEntityAnnotation *annotation in annotations) { NSArray *entities = annotation.entities; NSLog(@"Range: [%d, %d)", (int)annotation.range.location, (int)(annotation.range.location + annotation.range.length)); for (MLKEntity *entity in entities) { if ([entity.entityType isEqualToString:MLKEntityExtractionEntityTypeDateTime]) { MLKDateTimeEntity *dateTimeEntity = entity.dateTimeEntity; NSLog(@"Granularity: %d", (int)dateTimeEntity.dateTimeGranularity); NSLog(@"DateTime: %@", dateTimeEntity.dateTime); break; } else if ([entity.entityType isEqualToString:MLKEntityExtractionEntityTypeFlightNumber]) { MLKFlightNumberEntity *flightNumberEntity = entity.flightNumberEntity; NSLog(@"Airline Code: %@", flightNumberEntity.airlineCode); NSLog(@"Flight number: %@", flightNumberEntity.flightNumber); break; } else if ([entity.entityType isEqualToString:MLKEntityExtractionEntityTypeMoney]) { MLKMoneyEntity *moneyEntity = entity.moneyEntity; NSLog(@"Currency: %@", moneyEntity.unnormalizedCurrency); NSLog(@"Integer Part: %d", (int)moneyEntity.integerPart); NSLog(@"Fractional Part: %d", (int)moneyEntity.fractionalPart); break; } else { // Add additional cases as needed. NSLog(@"Entity: %@", entity); } }