Duckling ist eine Haskell-Bibliothek, die Text in strukturierte Daten analysiert.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
Eine Haskell-Umgebung ist erforderlich. Wir empfehlen die Verwendung von Stack.
Unter Linux und MacOS müssen Sie PCRE-Entwicklungsheader installieren. Verwenden Sie unter Linux Ihren Paketmanager, um sie zu installieren. Unter MacOS lässt sich die Installation am einfachsten mit Homebrew durchführen:
brew install pcre
Wenn das nicht hilft, versuchen Sie, brew doctor
auszuführen und die gefundenen Probleme zu beheben.
So kompilieren Sie die Binärdatei und führen sie aus:
stack build
stack exec duckling-example-exe
Wenn Sie es zum ersten Mal ausführen, werden alle erforderlichen Pakete heruntergeladen.
Dadurch wird ein einfacher HTTP-Server ausgeführt. Beispielanfrage:
curl -XPOST http://0.0.0.0:8000/parse --data ' locale=en_GB&text=tomorrow at eight '
In der Beispielanwendung sind alle Dimensionen standardmäßig aktiviert. Geben Sie den Parameter dims
an, um anzugeben, welche Sie möchten. Beispiele:
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"]" '
Ein Beispiel für die Integration von Duckling in Ihr Projekt finden Sie exe/ExampleMain.hs
. Wenn Ihr Backend Haskell nicht ausführt oder Sie keinen eigenen Duckling-Server betreiben möchten, können Sie die integrierten Entitäten von wit.ai direkt verwenden.
Duckling unterstützt viele Sprachen, aber die meisten unterstützen noch nicht alle Dimensionen ( wir brauchen Ihre Hilfe! ). Bitte schauen Sie in diesem Verzeichnis nach, um sprachspezifische Unterstützung zu erhalten.
Dimension | Beispieleingabe | Beispielwertausgabe |
---|---|---|
AmountOfMoney | „42€“ | {"value":42,"type":"value","unit":"EUR"} |
CreditCardNumber | „4111-1111-1111-1111“ | {"value":"4111111111111111","issuer":"visa"} |
Distance | „6 Meilen“ | {"value":6,"type":"value","unit":"mile"} |
Duration | „3 Minuten“ | {"value":3,"minute":3,"unit":"minute","normalized":{"value":180,"unit":"second"}} |
Email | „[email protected]“ | {"value":"[email protected]"} |
Numeral | „achtundachtzig“ | {"value":88,"type":"value"} |
Ordinal | „33.“ | {"value":33,"type":"value"} |
PhoneNumber | „+1 (650) 123-4567“ | {"value":"(+1) 6501234567"} |
Quantity | „3 Tassen Zucker“ | {"value":3,"type":"value","product":"sugar","unit":"cup"} |
Temperature | „80F“ | {"value":80,"type":"value","unit":"fahrenheit"} |
Time | „Heute um 9 Uhr“ | {"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 Gallonen“ | {"value":4,"type":"value","unit":"gallon"} |
Benutzerdefinierte Abmessungen werden ebenfalls unterstützt.
So generieren Sie die Klassifikatoren neu und führen die Testsuite aus:
stack build :duckling-regen-exe && stack exec duckling-regen-exe && stack test
Es ist wichtig, die Klassifikatoren nach der Aktualisierung des Codes und vor der Ausführung der Testsuite neu zu generieren.
Um die Unterstützung von Duckling für eine Dimension in einer bestimmten Sprache zu erweitern, müssen normalerweise vier Dateien aktualisiert werden:
Duckling/
Duckling/
Duckling/Dimensions/
(falls nicht bereits in Duckling/Dimensions/Common.hs
vorhanden)
Duckling/Rules/
So fügen Sie eine neue Sprache hinzu:
Numeral
.So fügen Sie ein neues Gebietsschema hinzu:
Regeln haben einen Namen, ein Muster und eine Produktion. Muster werden verwendet, um einen Abgleich auf Zeichenebene (reguläre Ausdrücke bei der Eingabe) und einen Abgleich auf Konzeptebene (Prädikate auf Token) durchzuführen. Produktionen sind beliebige Funktionen, die eine Liste von Tokens entgegennehmen und ein neues Token zurückgeben.
Der Korpus (bzw. der negative Korpus) ist eine Liste von Beispielen, die analysiert werden sollten (bzw. nicht analysiert werden sollten). Die Referenzzeit für das Korpus ist Dienstag, 12. Februar 2013, 4:30 Uhr.
Duckling.Debug
bietet einige Debugging-Tools:
$ 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 ist BSD-lizenziert.