Duckling เป็นไลบรารี Haskell ที่แยกวิเคราะห์ข้อความเป็นข้อมูลที่มีโครงสร้าง
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
จำเป็นต้องมีสภาพแวดล้อม Haskell เราแนะนำให้ใช้สแต็ก
บน 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 | "33" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "น้ำตาล 3 ถ้วย" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80F" | {"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
หากต้องการเพิ่มสถานที่ใหม่:
กฎเกณฑ์มีชื่อ รูปแบบ และการผลิต รูปแบบใช้เพื่อทำการจับคู่ระดับอักขระ (regexes บนอินพุต) และการจับคู่ระดับแนวคิด (เพรดิเคตบนโทเค็น) การผลิตเป็นฟังก์ชันที่กำหนดเองซึ่งรับรายการโทเค็นและส่งคืนโทเค็นใหม่
คลังข้อมูล (resp. คลังข้อมูลเชิงลบ) คือรายการตัวอย่างที่ควร (ไม่ควร) แยกวิเคราะห์ เวลาอ้างอิงสำหรับคลังข้อมูลคือวันอังคารที่ 12 กุมภาพันธ์ 2556 เวลา 04: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