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/<Dimension>/<Lang>/Rules.hs
Duckling/<Dimension>/<Lang>/Corpus.hs
Duckling/Dimensions/<Lang>.hs
( Duckling/Dimensions/Common.hs
にまだ存在しない場合)
Duckling/Rules/<Lang>.hs
新しい言語を追加するには:
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 ライセンスを取得しています。