หากต้องการวิเคราะห์ข้อความและแยกเอนทิตีในข้อความ ให้เรียกใช้
annotate()
และส่งต่อสตริงข้อความหรืออินสแตนซ์ของ
EntityExtractionParams
ซึ่งสามารถระบุตัวเลือกเพิ่มเติม เช่น
เวลาอ้างอิง เขตเวลา หรือตัวกรองเพื่อจำกัดการค้นหาสำหรับส่วนย่อยของเอนทิตี
ประเภทต่างๆ API แสดงรายการออบเจ็กต์ EntityAnnotation
ที่มี
เกี่ยวกับเอนทิตีแต่ละรายการ
ชื่อ SDK | การดึงข้อมูลเอนทิตี |
---|---|
การใช้งาน | ชิ้นงานสำหรับตัวตรวจจับพื้นฐานจะลิงก์กับแอปของคุณแบบคงที่ ณ เวลาบิลด์ |
ผลกระทบของขนาดชิ้นงาน | การแยกเอนทิตีส่งผลต่อขนาดแอปไม่เกิน 5.6 MB โดยประมาณ |
ลองเลย
- ลองใช้แอปตัวอย่างเพื่อ ดูตัวอย่างการใช้ API นี้
ก่อนเริ่มต้น
- ในไฟล์
build.gradle
ระดับโปรเจ็กต์ ให้ตรวจสอบว่าที่เก็บ Maven ของ Google รวมอยู่ในทั้งส่วนบิลด์สคริปต์และส่วนโปรเจ็กต์ทั้งหมด เพิ่มทรัพยากร Dependency สำหรับไลบรารีการแยกเอนทิตี ML Kit ไปยังไฟล์ Gradle ระดับแอปของโมดูล ซึ่งปกติจะใช้ชื่อว่า
app/build.gradle
:dependencies { // … implementation 'com.google.mlkit:entity-extraction:16.0.0-beta5' }
แยกเอนทิตี
สร้างออบเจ็กต์ EntityExtractor
และกำหนดค่าด้วย EntityExtractorOptions
Kotlin
val entityExtractor = EntityExtraction.getClient( EntityExtractorOptions.Builder(EntityExtractorOptions.ENGLISH) .build())
Java
EntityExtractor entityExtractor = EntityExtraction.getClient( new EntityExtractorOptions.Builder(EntityExtractorOptions.ENGLISH) .build());
EntityExtractorOptions
ยังยอมรับ Executor
ที่กำหนดโดยผู้ใช้ด้วยหากคุณต้องการ มิเช่นนั้น จะใช้ Executor
เริ่มต้นใน ML Kit
ตรวจสอบว่าดาวน์โหลดโมเดลที่กำหนดลงในอุปกรณ์แล้ว
Kotlin
entityExtractor .downloadModelIfNeeded() .addOnSuccessListener { _ -> /* Model downloading succeeded, you can call extraction API here. */ } .addOnFailureListener { _ -> /* Model downloading failed. */ }
Java
entityExtractor .downloadModelIfNeeded() .addOnSuccessListener( aVoid -> { // Model downloading succeeded, you can call the extraction API here. }) .addOnFailureListener( exception -> { // Model downloading failed. });
หลังจากยืนยันว่าดาวน์โหลดโมเดลแล้ว ให้ส่งสตริงหรือ EntityExtractionParams
ไปยัง annotate()
อย่าโทรหา annotate()
จนกว่าจะทราบว่าโมเดลพร้อมใช้งาน
Kotlin
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. }
Java
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 หากไม่ได้ตั้งค่าเหล่านี้ไว้อย่างชัดแจ้ง ระบบจะใช้ค่าเริ่มต้น
จากอุปกรณ์ของผู้ใช้
วนซ้ำผลลัพธ์ของคำอธิบายประกอบเพื่อดึงข้อมูลเกี่ยวกับ รายการที่รู้จัก
Kotlin
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") } } } }
Java
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); } } }
เรียกใช้เมธอด close()
เมื่อไม่จำเป็นต้องใช้ออบเจ็กต์ EntityExtractor
แล้ว หากใช้ EntityExtractor
ใน Fragment หรือ AppCompatActivity คุณสามารถเรียกใช้ LifecycleOwner.getLifecycle() ใน Fragment หรือ AppCompatActivity ตามด้วย Lifecycle.addObserver เช่น
Kotlin
val options = … val extractor = EntityExtraction.getClient(options); getLifecycle().addObserver(extractor);
Java
EntityExtractorOptions options = … EntityExtractor extractor = EntityExtraction.getClient(options); getLifecycle().addObserver(extractor);
จัดการโมเดลการแยกเอนทิตีอย่างชัดเจน
เมื่อคุณใช้ API การแยกเอนทิตีตามที่อธิบายไว้ข้างต้น ML Kit จะดาวน์โหลดรุ่นเฉพาะภาษาลงในอุปกรณ์โดยอัตโนมัติตามที่จำเป็น (เมื่อคุณเรียกใช้ downloadModelIfNeeded()
) นอกจากนี้ คุณยังจัดการโมเดลที่ต้องการให้มีในอุปกรณ์ได้อย่างชัดเจนโดยใช้ API การจัดการโมเดลของ ML Kit ซึ่งจะเป็นประโยชน์หากคุณต้องการดาวน์โหลดโมเดลล่วงหน้า นอกจากนี้ API ยังช่วยให้คุณลบโมเดลที่ไม่จำเป็นแล้วได้ด้วย
Kotlin
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. })
Java
// 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. } });