Edited at

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