Duckling é uma biblioteca Haskell que analisa texto em dados estruturados.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
Um ambiente Haskell é necessário. Recomendamos o uso de pilha.
No Linux e no MacOS, você precisará instalar os cabeçalhos de desenvolvimento PCRE. No Linux, use seu gerenciador de pacotes para instalá-los. No MacOS, a maneira mais fácil de instalá-los é com o Homebrew:
brew install pcre
Se isso não ajudar, tente executar brew doctor
e corrija os problemas encontrados.
Para compilar e executar o binário:
stack build
stack exec duckling-example-exe
Na primeira vez que você executá-lo, ele baixará todos os pacotes necessários.
Isso executa um servidor HTTP básico. Solicitação de exemplo:
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
No aplicativo de exemplo, todas as dimensões estão habilitadas por padrão. Forneça o parâmetro dims
para especificar quais você deseja. Exemplos:
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"]" '
Consulte exe/ExampleMain.hs
para obter um exemplo de como integrar o Duckling em seu projeto. Se o seu back-end não executa Haskell ou se você não deseja rodar seu próprio servidor Duckling, você pode usar diretamente as entidades integradas do wit.ai.
O Duckling oferece suporte a vários idiomas, mas a maioria ainda não oferece suporte a todas as dimensões ( precisamos da sua ajuda! ). Por favor, consulte este diretório para obter suporte específico ao idioma.
Dimensão | Entrada de exemplo | Exemplo de saída de valor |
---|---|---|
AmountOfMoney | "42€" | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | "4111-1111-1111-1111" | {"value":"4111111111111111","issuer":"visa"} |
Distance | "6 milhas" | {"value":6,"type":"value","unit":"mile"} |
Duration | "3 minutos" | {"value":3,"minute":3,"unit":"minute","normalized":{"value":180,"unit":"second"}} |
Email | "[email protected]" | {"value":"[email protected]"} |
Numeral | "oitenta e oito" | {"value":88,"type":"value"} |
Ordinal | "33º" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "3 xícaras de açúcar" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80F" | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | "hoje às 9h" | {"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 galões" | {"value":4,"type":"value","unit":"gallon"} |
Dimensões personalizadas também são suportadas.
Para regenerar os classificadores e executar o conjunto de testes:
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
É importante regenerar os classificadores após atualizar o código e antes de executar o conjunto de testes.
Para estender o suporte do Duckling para uma dimensão em um determinado idioma, normalmente 4 arquivos precisam ser atualizados:
Duckling/
Duckling/
Duckling/Dimensions/
(se ainda não estiver presente em Duckling/Dimensions/Common.hs
)
Duckling/Rules/
Para adicionar um novo idioma:
Numeral
.Para adicionar uma nova localidade:
As regras têm nome, padrão e produção. Os padrões são usados para realizar correspondência em nível de caractere (regexes na entrada) e correspondência em nível de conceito (predicados em tokens). As produções são funções arbitrárias que pegam uma lista de tokens e retornam um novo token.
O corpus (resp. corpus negativo) é uma lista de exemplos que deveriam (resp. não deveriam) analisar. O horário de referência para o corpus é terça-feira, 12 de fevereiro de 2013, às 4h30.
Duckling.Debug
fornece algumas ferramentas de depuração:
$ 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}]
Patinho é licenciado pelo BSD.