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 许可的。