Haskell
duckling

Duckling (•ө•) を使って時間、日付抽出をしてみた!

Duckling ってなに?

Ducklingとは、もともとClojureだったProjectがHaskellに移行し、Facebookの一部のプロジェクトが使用しているオープンソース自然言語テキスト分析の事です。

Duclkingの名前の由来は?

Ducklingは、もともと“Picsou”と呼ばれていました。“Picsou”はフランス版のドナルドダックのことで、なんでも食べてしまうところから名付けられました。後に英語のコミュニティに親しみやすくするため、ドナルドダックの“duck”と言語学(linguistic)のlingを取って“Duckling”と改名することにしました。

Duckling で何が出来るのか?

以下の情報を、自然言語のテキストから抽出出来ます。

  • 金額
  • クレジットカード番号
  • 単位
  • 距離
  • 時間間隔
  • メールアドレス
  • 数字
  • 順序
  • 電話番号
  • 数量
  • 気温
  • 時刻
  • URL
  • 体積

Ducklingのここがすごい!

抽出した情報の中に、誤字が多少混ざっていても上手に拾ってくれます。
以下サイトで試せます。
https://duckling.wit.ai/#faq

それでは実際に試してみましょう!

ここでは、Haskell環境構築は割愛させていただきます。
home brewを使うなり、cabalなりstackを使うなりご自由にどうぞ。

以下は、あと2分で会議がはじまるよー
あと2分で行くよー 等の文から抽出した例です。

$ stack repl --no-load
> :l Duckling.Debug
> debug (makeLocale EN $ Just US) "in two minutes" [This 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}]

2分後がちゃんと抽出できました。
もっと便利な機能がありますので、機会があり次第アップデート、あるいは別記事で書きたいと思います。

以上
ありがとうございました。(•ө•) (•ө•) (•ө•)


Thanks
Mr, Julien Odent