Duckling은 텍스트를 구조화된 데이터로 구문 분석하는 Haskell 라이브러리입니다.
" the first Tuesday of October "
= > { " value " : " 2017-10-03T00:00:00.000-07:00 " , " grain " : " day " }
하스켈 환경이 필요합니다. 스택을 사용하는 것이 좋습니다.
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 | "[email protected]" | {"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 라이센스를 받았습니다.