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"]" '
有關如何將 Duckling 整合到專案中的範例,請參閱exe/ExampleMain.hs
。如果您的後端不執行 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 | “小鴨隊@fb.com” | {"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
。新增區域設定:
規則有名稱、模式和產生式。模式用於執行字元級匹配(輸入上的正規表示式)和概念級匹配(標記上的謂詞)。產生式是任意函數,它接受令牌列表並傳回新令牌。
語料庫(或否定語料庫)是應該(或不應該)解析的範例清單。該語料庫的參考時間是 2013 年 2 月 12 日星期二凌晨 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 許可的。