استخراج موجودیت های عددی با استفاده از Duckling در پایتون
موسسه پایا پروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
Wit.ai یک پلت فرم پردازش زبان طبیعی (NLP) است که در پروژه پایتون به توسعه دهندگان اجازه می دهد تا تجربیات مکالمه ای را برای برنامه های مختلف بسازند. یکی از ویژگی های کلیدی Wit.ai سیستم استخراج موجودیت آن است که می تواند موجودیت ها را از ورودی کاربر شناسایی و استخراج کند.
یکی از ویژگی های کلیدی ارائه شده توسط Wit.ai سیستم استخراج موجودیت آن به نام Duckling است. Duckling یک کتابخانه منبع باز است که می تواند موجودیت هایی مانند زمان، تاریخ، مدت زمان و اعداد را از ورودی متن استخراج کند.
در انجام پروژه پایتون، ما بر روی عملکرد برچسب گذاری موجودیت عددی ارائه شده توسط Duckling و نحوه پیاده سازی آن با استفاده از پایتون تمرکز خواهیم کرد.
شروع کار با جوجه اردک:
ماژول های مورد نیاز:
pip install wit
pip install ducklingpip
install –force-reinstall JPype1==0.6.3 # To avoid a common
dependency error
1. وارد کردن کتابخانه های لازم:
سپس می توانیم یک فایل پروژه پایتون ایجاد کنیم و کتابخانه های لازم را وارد کنیم:
importing the necesary packages#
import wit
import duckling
2. اتصال به Wit.ai API
اکنون می توانیم از کتابخانه wit برای اتصال به Wit.ai API استفاده کنیم:
initialize wit.ai instance using api-token#
“access_token = “your-access-token
client = wit.Wit(access_token)
3. آزمایش اتصال
ما می توانیم اتصال خود را با ارسال یک پیام به Wit.ai API آزمایش کنیم:
capturing numeric entity using raw text(example0) using wit.ai client instance#
“.example0 = “I want to read 3 geekforgeeks articles
response = client.message(example0)
print(response)
مشتری . متد ()message پیامی را به Wit.ai API ارسال می کند و پاسخ JSON را برمی گرداند. پاسخ باید شامل موجوداتی باشد که Wit.ai توانسته است از پیام استخراج کند. در این مورد، پاسخ باید چیزی شبیه به این باشد:
}
,”.text”: “I want to read 3 geekforgeeks articles”
,[] “:intents”
} “:entities”
] : “wit$amount_of_money:amount_of_money”
} , “id”: “12345678-1234-5678-1234-567812345678”
, “name”: “wit$amount_of_money”
,”role”: “amount_of_money”
, “start”: 16
,”body”: “3”
, “end”: 20
,”confidence”: 0.9975
,[] :”entities
, “value”: 3.0
“type”: “value”
{
[
{
{
میتوانیم ببینیم که Wit.ai توانست موجودیت عددی “3” را از پیام استخراج کند و آن را به عنوان مقدار پول برچسب گذاری کند. با این حال، در این مورد، ما می خواهیم موجودیت عددی را بدون هیچ برچسب خاصی استخراج کنیم. اینجاست که جوجه اردک وارد می شود.
برچسب گذاری موجودیت عددی
استفاده از Duckling برای برچسب گذاری موجودیت عددی:
برای استفاده از Duckling برای برچسب گذاری موجودیت عددی، ابتدا باید یک تجزیه کننده Duckling ایجاد کنیم.
loading the opensource Duckling parser#
()parser = duckling.Duckling
سپس می توانیم از تجزیه کننده برای استخراج موجودیت های عددی از یک پیام استفاده کنیم:
مثال 1:
import json # to beautify json while printing
using the opensource duckling instance#
to capture a generalized numeric entities#
“.example1 = “I want to read 3 geeksforgeeks articles
print(json.dumps(response, indent=3))
تجزیه کننده. متد ()parse پیام را به تجزیه کننده Duckling ارسال می کند و لیستی از موجودیت هایی را که Duckling توانسته است استخراج کند، برمی گرداند.
ما میتوانیم مشاهده کنیم که Duckling توانست موجودیت عددی “3” را از پروژه پایتون استخراج کند و آن را به عنوان یک عدد برچسبگذاری کند. ما چندین موجودیت ممکن مختلف را از متن تجزیه شده دریافت می کنیم اما می توانیم این موجودیت را از پاسخ با استفاده از کد زیر استخراج کنیم:
مثال 1:
extracted the final response#
entities = response[0][“value”][“value”]
print(entities)
خروجی:
3.0
مثال 2:
extracting the datetime entity from raw text#
“.example2 = u”Let\’s meet at tomorrow at half past six to read a geekforgeeks article
duck_parsed = parser.parse_time(example2)
print(json.dumps(duck_parsed[0], indent=3))
همانطور که مشاهده می کنید، Duckling می تواند تاریخ نسبی را از متن خام تشخیص دهد و یک رشته تاریخ-زمان را به عنوان مقداری که تاریخ فردا 2023-03-28 (28 مارس 2023) و زمان مشخص شده در متن خام است، برمی گرداند.
(شش و نیم) یعنی 6:30 صبح. ما می توانیم رشته تاریخ-زمان را که در قالب iso موجود است تجزیه کنیم تا یک شی DateTime به این صورت بدست آوریم:
import datetime
print(datetime.datetime.fromisoformat(duck_parsed[0][‘value’][‘value’]))
خروجی:
:This outputs the DateTime object like so
2023-03-28 06:30:00+05:30
منابع:
https://medium.com/@swainshashwat/extracting-numeric-entities-using-duckling-in-python-7074f3c97d82
https://www.geeksforgeeks.org/extracting-numeric-entities-using-duckling-in-python/