Duckling es una biblioteca de Haskell que analiza texto en datos estructurados.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
Se requiere un entorno Haskell. Recomendamos utilizar pila.
En Linux y MacOS necesitarás instalar encabezados de desarrollo PCRE. En Linux, use su administrador de paquetes para instalarlos. En MacOS, la forma más sencilla de instalarlos es con Homebrew:
brew install pcre
Si eso no ayuda, intente ejecutar brew doctor
y solucione los problemas que encuentre.
Para compilar y ejecutar el binario:
stack build
stack exec duckling-example-exe
La primera vez que lo ejecute, descargará todos los paquetes necesarios.
Esto ejecuta un servidor HTTP básico. Solicitud de ejemplo:
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
En la aplicación de ejemplo, todas las dimensiones están habilitadas de forma predeterminada. Proporcione el parámetro dims
para especificar cuáles desea. Ejemplos:
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 ver un ejemplo sobre cómo integrar Duckling en su proyecto. Si su backend no ejecuta Haskell o si no desea ejecutar su propio servidor Duckling, puede usar directamente las entidades integradas de wit.ai.
Duckling admite muchos idiomas, pero la mayoría aún no admite todas las dimensiones ( ¡necesitamos su ayuda! ). Consulte este directorio para obtener soporte específico para cada idioma.
Dimensión | Entrada de ejemplo | Ejemplo de salida de valor |
---|---|---|
AmountOfMoney | "42€" | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | "4111-1111-1111-1111" | {"value":"4111111111111111","issuer":"visa"} |
Distance | "6 millas" | {"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 | "ochenta y ocho" | {"value":88,"type":"value"} |
Ordinal | "33" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "3 tazas de azúcar" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80F" | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | "hoy a las 9am" | {"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=hola" | {"value":"https://api.wit.ai/message?q=hi","domain":"api.wit.ai"} |
Volume | "4 galones" | {"value":4,"type":"value","unit":"gallon"} |
También se admiten dimensiones personalizadas.
Para regenerar los clasificadores y ejecutar el conjunto de pruebas:
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
Es importante regenerar los clasificadores después de actualizar el código y antes de ejecutar el conjunto de pruebas.
Para ampliar el soporte de Duckling para una dimensión en un idioma determinado, normalmente es necesario actualizar 4 archivos:
Duckling/
Duckling/
Duckling/Dimensions/
(si aún no está presente en Duckling/Dimensions/Common.hs
)
Duckling/Rules/
Para agregar un nuevo idioma:
Numeral
.Para agregar una nueva ubicación:
Las reglas tienen un nombre, un patrón y una producción. Los patrones se utilizan para realizar coincidencias a nivel de caracteres (expresiones regulares en la entrada) y coincidencias a nivel de conceptos (predicados en tokens). Las producciones son funciones arbitrarias que toman una lista de tokens y devuelven un token nuevo.
El corpus (resp. corpus negativo) es una lista de ejemplos que deberían (o no deberían) analizarse. La hora de referencia para el corpus es el martes 12 de febrero de 2013 a las 4:30 am.
Duckling.Debug
proporciona algunas herramientas de depuración:
$ 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 tiene licencia BSD.