Duckling est une bibliothèque Haskell qui analyse le texte en données structurées.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
Un environnement Haskell est requis. Nous vous recommandons d'utiliser la pile.
Sous Linux et MacOS, vous devrez installer les en-têtes de développement PCRE. Sous Linux, utilisez votre gestionnaire de packages pour les installer. Sur MacOS, le moyen le plus simple de les installer est d'utiliser Homebrew :
brew install pcre
Si cela ne résout pas le problème, essayez d'exécuter brew doctor
et résolvez les problèmes détectés.
Pour compiler et exécuter le binaire :
stack build
stack exec duckling-example-exe
La première fois que vous l'exécuterez, il téléchargera tous les packages requis.
Cela exécute un serveur HTTP de base. Exemple de demande :
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
Dans l'exemple d'application, toutes les dimensions sont activées par défaut. Fournissez le paramètre dims
pour préciser lesquels vous souhaitez. Exemples :
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"]" '
Voir exe/ExampleMain.hs
pour un exemple sur la façon d'intégrer Duckling dans votre projet. Si votre backend n'exécute pas Haskell ou si vous ne souhaitez pas faire tourner votre propre serveur Duckling, vous pouvez utiliser directement les entités intégrées de wit.ai.
Duckling prend en charge de nombreuses langues, mais la plupart ne prennent pas encore en charge toutes les dimensions ( nous avons besoin de votre aide ! ). Veuillez consulter ce répertoire pour obtenir une assistance spécifique à la langue.
Dimension | Exemple de saisie | Exemple de sortie de valeur |
---|---|---|
AmountOfMoney | "42€" | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | "4111-1111-1111-1111" | {"value":"4111111111111111","issuer":"visa"} |
Distance | "6 milles" | {"value":6,"type":"value","unit":"mile"} |
Duration | "3 minutes" | {"value":3,"minute":3,"unit":"minute","normalized":{"value":180,"unit":"second"}} |
Email | "[email protected]" | {"value":"[email protected]"} |
Numeral | "quatre vingt huit" | {"value":88,"type":"value"} |
Ordinal | "33ème" | {"value":33,"type":"value"} |
PhoneNumber | "+1 (650) 123-4567" | {"value":"(+1) 6501234567"} |
Quantity | "3 tasses de sucre" | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | "80F" | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | "aujourd'hui à 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 gallons" | {"value":4,"type":"value","unit":"gallon"} |
Les dimensions personnalisées sont également prises en charge.
Pour régénérer les classificateurs et exécuter la suite de tests :
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
Il est important de régénérer les classificateurs après la mise à jour du code et avant d'exécuter la suite de tests.
Pour étendre la prise en charge de Duckling pour une dimension dans une langue donnée, 4 fichiers doivent généralement être mis à jour :
Duckling/
Duckling/
Duckling/Dimensions/
(s'il n'est pas déjà présent dans Duckling/Dimensions/Common.hs
)
Duckling/Rules/
Pour ajouter une nouvelle langue :
Numeral
.Pour ajouter un nouveau paramètre régional :
Les règles ont un nom, un modèle et une production. Les modèles sont utilisés pour effectuer une correspondance au niveau des caractères (regex en entrée) et une correspondance au niveau du concept (prédicats sur les jetons). Les productions sont des fonctions arbitraires qui prennent une liste de jetons et renvoient un nouveau jeton.
Le corpus (resp. corpus négatif) est une liste d'exemples qui devraient (resp. ne devraient pas) être analysés. L'heure de référence pour le corpus est le mardi 12 février 2013 à 4h30.
Duckling.Debug
fournit quelques outils de débogage :
$ 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 est sous licence BSD.