Duckling هي مكتبة Haskell التي تقوم بتحليل النص إلى بيانات منظمة.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
مطلوب بيئة هاسكل. نوصي باستخدام المكدس.
في نظامي التشغيل Linux وMacOS، ستحتاج إلى تثبيت رؤوس تطوير PCRE. على نظام التشغيل Linux، استخدم مدير الحزم لديك لتثبيتها. على نظام MacOS، أسهل طريقة لتثبيتها هي باستخدام Homebrew:
brew install pcre
إذا لم يساعد ذلك، فحاول تشغيل brew doctor
وإصلاح المشكلات التي يجدها.
لتجميع وتشغيل الثنائي:
stack build
stack exec duckling-example-exe
عند تشغيله لأول مرة، سيتم تنزيل جميع الحزم المطلوبة.
يؤدي هذا إلى تشغيل خادم HTTP أساسي. طلب مثال:
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
في تطبيق المثال، يتم تمكين كافة الأبعاد بشكل افتراضي. قم بتوفير المعلمة dims
لتحديد المعلمة التي تريدها. أمثلة:
Identify credit card numbers only:
$ curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_US&text="4111-1111-1111-1111"&dims="["credit-card-number"]" '
If you want multiple dimensions, comma-separate them in the array:
$ curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_US&text="3 cups of sugar"&dims="["quantity","numeral"]" '
راجع exe/ExampleMain.hs
للحصول على مثال حول كيفية دمج Duckling في مشروعك. إذا كانت الواجهة الخلفية لديك لا تعمل على تشغيل Haskell أو إذا كنت لا ترغب في تشغيل خادم Duckling الخاص بك، فيمكنك استخدام كيانات wit.ai المضمنة مباشرة.
يدعم Duckling العديد من اللغات، لكن معظمها لا يدعم جميع الأبعاد حتى الآن ( نحن بحاجة لمساعدتك! ). يرجى البحث في هذا الدليل للحصول على دعم خاص باللغة.
البعد | إدخال المثال | مثال على إخراج القيمة |
---|---|---|
AmountOfMoney | "42€" | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | "4111-1111-1111-1111" | {"value":"4111111111111111","issuer":"visa"} |
Distance | "6 أميال" | {"value":6,"type":"value","unit":"mile"} |
Duration | "3 دقائق" | {"value":3,"minute":3,"unit":"minute","normalized":{"value":180,"unit":"second"}} |
Email | "البطة[email protected]" | {"value":"[email protected]"} |
Numeral | "ثمانية وثمانون" | {"value":88,"type":"value"} |
Ordinal | "الثالث والثلاثون" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "3 أكواب سكر" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80ف" | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | "اليوم الساعة 9 صباحا" | {"values":[{"value":"2016-12-14T09:00:00.000-08:00","grain":"hour","type":"value"}],"value":"2016-12-14T09:00:00.000-08:00","grain":"hour","type":"value"} |
Url | "https://api.wit.ai/message?q=hi" | {"value":"https://api.wit.ai/message?q=hi","domain":"api.wit.ai"} |
Volume | "4 جالون" | {"value":4,"type":"value","unit":"gallon"} |
الأبعاد المخصصة مدعومة أيضًا.
لتجديد المصنفات وتشغيل مجموعة الاختبار:
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
من المهم إعادة إنشاء المصنفات بعد تحديث الكود وقبل تشغيل مجموعة الاختبار.
لتوسيع دعم Duckling لبعد في لغة معينة، عادةً ما يلزم تحديث 4 ملفات:
Duckling/
Duckling/
Duckling/Dimensions/
(إذا لم يكن موجودًا بالفعل في Duckling/Dimensions/Common.hs
)
Duckling/Rules/
لإضافة لغة جديدة:
Numeral
.لإضافة لغة جديدة:
القواعد لها اسم ونمط وإنتاج. تُستخدم الأنماط لإجراء مطابقة على مستوى الأحرف (التعبيرات المنطقية عند الإدخال) ومطابقة على مستوى المفهوم (المسندات على الرموز المميزة). عمليات الإنتاج عبارة عن وظائف عشوائية تأخذ قائمة من الرموز المميزة وتعيد رمزًا مميزًا جديدًا.
المجموعة (المجموعة السلبية) هي قائمة من الأمثلة التي ينبغي (لا ينبغي أن) تحليلها. الموعد المرجعي لاستقبال الملخص هو يوم الثلاثاء 12 فبراير 2013 الساعة 4:30 صباحا.
يوفر Duckling.Debug
بعض أدوات التصحيح:
$ stack repl --no-load > :l Duckling.Debug > debug (makeLocale EN $ Just US) " in two minutes " [Seal Time] in | within | after < duration > (in two minutes) -- regex (in) -- < integer > < unit-of-duration > (two minutes) -- -- integer (0..19) (two) -- -- -- regex (two) -- -- minute (grain) (minutes) -- -- -- regex (minutes) [Entity {dim = " time " , body = " in two minutes " , value = RVal Time (TimeValue (SimpleValue (InstantValue {vValue = 2013-02-12 04:32:00 -0200, vGrain = Second})) [SimpleValue (InstantValue {vValue = 2013-02-12 04:32:00 -0200, vGrain = Second})] Nothing), start = 0, end = 14}]
Duckling مرخص من BSD.