Zum Analysieren eines Textteils und Extrahieren der darin enthaltenen Entitäten rufen Sie die ML Kit-Entitätsextraktions-API auf, indem Sie den Text direkt an die Methode annotateText:completion:
übergeben. Es ist auch möglich, ein optionales EntityExtractionParams
-Objekt zu übergeben, das andere Konfigurationsoptionen enthält, z. B. eine Referenzzeit, eine Zeitzone oder einen Filter, um die Suche auf eine Teilmenge von Entitätstypen zu beschränken.
Die API gibt eine Liste von EntityAnnotation
-Objekten mit Informationen zu den einzelnen Entitäten zurück.
Die Assets des Entitätsextraktions-Entitätsextraktion werden während der Laufzeit der App statisch verknüpft. Sie erhöhen etwa 10,7 MB in Ihre App.
Testen
- Probieren Sie die Beispiel-App aus, um sich ein Anwendungsbeispiel dieser API anzusehen.
Hinweis
Fügen Sie Ihrer Podfile-Datei die folgenden ML Kit-Bibliotheken hinzu:
pod 'GoogleMLKit/EntityExtraction', '3.2.0'
Nachdem Sie die Pods Ihres Projekts installiert oder aktualisiert haben, öffnen Sie das Xcode-Projekt mit .xcworkspace. ML Kit wird ab Xcode Version 13.2.1 unterstützt.
Entitäten aus Text extrahieren
Wenn Sie Entitäten aus Text extrahieren möchten, erstellen Sie zuerst ein EntityExtractorOptions
-Objekt. Geben Sie dazu die Sprache an und instanziieren Sie damit ein 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];
Prüfen Sie als Nächstes, ob das erforderliche Sprachmodell auf das Gerät heruntergeladen wurde:
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. }];
Übergeben Sie einen String und ein optionales MLKEntityExtractionParams
an die Methode annotate
, nachdem das Modell heruntergeladen wurde.
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. }
Loop über die Annotationsergebnisse, um Informationen zu den erkannten Entitäten abzurufen.
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); } }