Duckling adalah perpustakaan Haskell yang mem-parsing teks menjadi data terstruktur.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
Lingkungan Haskell diperlukan. Kami merekomendasikan menggunakan tumpukan.
Di Linux dan MacOS Anda perlu menginstal header pengembangan PCRE. Di Linux, gunakan manajer paket Anda untuk menginstalnya. Di MacOS, cara termudah untuk menginstalnya adalah dengan Homebrew:
brew install pcre
Jika itu tidak membantu, coba jalankan brew doctor
dan perbaiki masalah yang ditemukan.
Untuk mengkompilasi dan menjalankan biner:
stack build
stack exec duckling-example-exe
Pertama kali Anda menjalankannya, ia akan mengunduh semua paket yang diperlukan.
Ini menjalankan server HTTP dasar. Contoh permintaan:
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
Dalam contoh aplikasi, semua dimensi diaktifkan secara default. Berikan parameter dims
untuk menentukan mana yang Anda inginkan. Contoh:
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"]" '
Lihat exe/ExampleMain.hs
untuk contoh tentang cara mengintegrasikan Duckling dalam proyek Anda. Jika backend Anda tidak menjalankan Haskell atau jika Anda tidak ingin memutar server Duckling Anda sendiri, Anda dapat langsung menggunakan entitas bawaan wit.ai.
Duckling mendukung banyak bahasa, namun sebagian besar belum mendukung semua dimensi ( kami membutuhkan bantuan Anda! ). Silakan lihat direktori ini untuk dukungan khusus bahasa.
Dimensi | Contoh masukan | Contoh nilai keluaran |
---|---|---|
AmountOfMoney | "42€" | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | "4111-1111-1111-1111" | {"value":"4111111111111111","issuer":"visa"} |
Distance | "6 mil" | {"value":6,"type":"value","unit":"mile"} |
Duration | "3 menit" | {"value":3,"minute":3,"unit":"minute","normalized":{"value":180,"unit":"second"}} |
Email | "tim [email protected]" | {"value":"[email protected]"} |
Numeral | "delapan puluh delapan" | {"value":88,"type":"value"} |
Ordinal | "ke-33" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "3 cangkir gula" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80F" | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | "hari ini jam 9 pagi" | {"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 galon" | {"value":4,"type":"value","unit":"gallon"} |
Dimensi khusus juga didukung.
Untuk membuat ulang pengklasifikasi dan menjalankan rangkaian pengujian:
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
Penting untuk membuat ulang pengklasifikasi setelah memperbarui kode dan sebelum menjalankan rangkaian pengujian.
Untuk memperluas dukungan Duckling terhadap dimensi dalam bahasa tertentu, biasanya 4 file perlu diperbarui:
Duckling/
Duckling/
Duckling/Dimensions/
(jika belum ada di Duckling/Dimensions/Common.hs
)
Duckling/Rules/
Untuk menambahkan bahasa baru:
Numeral
.Untuk menambahkan lokal baru:
Aturan mempunyai nama, pola, dan produksi. Pola digunakan untuk melakukan pencocokan tingkat karakter (regex pada input) dan pencocokan tingkat konsep (predikat pada token). Produksi adalah fungsi arbitrer yang mengambil daftar token dan mengembalikan token baru.
Korpus (resp. korpus negatif) adalah daftar contoh yang harus (resp. tidak boleh) diurai. Waktu referensi korpus adalah Selasa 12 Februari 2013 pukul 04.30.
Duckling.Debug
menyediakan beberapa alat debugging:
$ 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 berlisensi BSD.