티스토리 뷰

이제 대화 중에 숫자를 계산해야 하는 경우를 생각해 보자. CS에서는 두 가지 방식으로 숫자를 계산할 수 있는데 첫째는 수식을 직접 작성하는 방식이고 두 번째는 함수를 이용하는 방식이다. 수식을 직접 작성하여 그 결과값을 변수에 기억시켜 놓고 활용하는 방식은 우리가 수기로 방정식을 작성하는 형식과 유사하다. 예를 들어 사용자와 챗봇이 가격 흥정을 하는 아래와 같은 상황을 가정해 보자.

 

A.     u: (얼마에요) 정가 1만원인데 10%할인해서 9천원에 드릴께요

a: (천원만 더 깎아주세요) 8천원에 달라고요? 저는 남는 게 없어요.

a: (좀 깍아주세요)

 

위의 예제에서 “8천원에 달라고요?” 라고 챗봇이 말하기 위해서는 사용자가 말한 천원이라는 문자숫자를 아라비아 숫자 “1,000”으로 변환하고 이를 내부에서 실시간으로 계산할 수 있어야 가능하다. 이는 3단계로 나눠서 준비할 수 있는데, 3장에서 나이를 설명할 때와 중복되는 부분이 있지만 복습 차원에서 차근차근 따라가 보기로 하자.

1단계는 화폐 단위를 사전(dictionary)에 등록하는 일이다. 여기서는 ~가격 이라는 컨셉으로 만들어 보겠다.(아래의 B 참조) 2단계는 canon 명령문으로 기본형을 지정해 주는 단계이고(아래의 C참조),

 

B.     concept: ~가격 NOUN ( 천원 이천원 삼천원 사천원 오천원 )

C.     canon:

천원 1000

이천원 2000

삼천원 3000

사천원 4000

오천원 5000

 

3단계는 사용자 입력문을 받아 계산하는 단계이다.

 

D.     a: ( _~가격 깍아* ) $price = 9000 - _0 $price원에 달라고요? 저는 남는 게 없어요.

 

D는 다소 낯설어 보이지만 하나씩 읽어 보면 매우 간단하다. 이 룰은 패턴, 계산식, 출력의 세 부분으로 이뤄져 있는데 먼저 패턴을 보면, 사용자의 문자숫자를 입력 받아 임시 저장(언더바 변수)하고 있다. 만약 사용자가 문자숫자나 아라비아숫자를 사용하지 않는다면 이 패턴은 매칭에 실패하고 다른 룰로 넘어갈 것이니 사용자가 숫자를 입력하지 않으면 어쩌나 하는 걱정은 하지 않아도 된다. 계산식 부분에서는 _0를 호출하여 사용자가 입력한 문자숫자를 가져와 9천원에서 뺀다. 9천원은 앞의 대화에서 언급한 금액이다. 그리고 그 뺄셈 결과를 price라는 변수에 저장한다.

 

$price = 9000 - _0

 

이 형태는 우리가 작성하는 수식과 매우 닮았다. 그리고 이 변수를 출력문에 포함시키면 이 변수의 값이 출력되는 것이다.

숫자를 계산하는 두 번째 방식은 함수를 이용하는 방식인데, 위의 룰D에서 계산식 부분을 아래와 같이 ^compute 함수로 작성할 수 있다. ^compute 함수는 ^compute(숫자 연산자 숫자)의 형식이다.

 

E.     a: ( _~number) $price = ^compute(9000 - _0) $price원에 달라고요? 저는 남는 게 없어요.

 

숫자를 계산하는 두 가지 방식의 기능이나 효과는 동일하므로 더 간편한 방식, 더 가독성이 높은 방식을 사용하면 될 것이다.[1]

 



[1] compute 함수의 장점은 plus, add, minus, substaction, multiple 등 사용자가 말로 하는 연산 명령어를 직접 사용할 수 있다는 점이다.


댓글
댓글쓰기 폼