티스토리 뷰

 

CS에서 제공하는 함수는 10개 분류 약 170여 개에 이른다. 이 중에서 아래의 4개 함수는 대화를 전개해 나가는데 매우 유용한 함수이니 그 용도와 사용법을 꼭 익혀 두도록 하자.

 

A.     ^refine()

사용자의 질문이나 답변 내용이 3~5개 정도의 선택폭을 가지고 있다고 생각될 경우, 일단 하나의 룰로 사용자의 응답을 캐치한 후 그 세부 내용에 따라 챗봇의 답변을 출력하도록 2단계로 룰을 작성할 수 있다. 이때 사용하는 함수가 refine함수이며, refine 함수는 뒤따라오는 예상응답과 매칭을 검토하라는 명령어이다. 예를 들면,

 

u: ( _~가수 좋아* ) ^refine()

a: (_0?~투애니원) 노래 정말 잘하지요.

a: (_0?~티아라) 히트곡이 많은 걸그룹이지요.

a: (_0?~마마무) 요즘 인기가 많은 신인 걸그룹 이지요.

a: (*) 저는 잘 모르는 가수에요. 좀 더 얘기해 주세요

 

위의 예는 사용자가 먼저 말하는 상황이다. 사용자는 운동, 여행, 독서, 와인 등 다양한 화제를 꺼낼 수 있는데 만약 걸그룹 이름이 나오게 되면 가수, K-POP 또는 음악 등의 키워드를 가진 토픽이 활성화 될 것이고 누구누구를 좋아한다라는 룰에 사용자 입력문이 매칭될 수 있을 것이다. 위의 룰은 일단 사용자 입력문을 캐치해 온 다음에 그 내용을 분석해서 적합한 출력문을 내는 2단계 방식을 취하고 있는데, 이때 사용하는 함수가 refine() 함수이다.

위의 구조는 34절에서 설명한 예상응답의 구조와 흡사하다.

 

t: 좋아하는 걸그룹이 있어요?

a: (~투애니원) 노래 정말 잘하지요.

a: (~티아라) 히트곡이 많은 걸그룹이지요.

……

 

차이점은 챗봇의 열린질문에 대한 사용자의 예상응답이냐, 아니면 사용자의 일반진술을 세부적으로 분석한 예상응답이냐의 차이이다.

 

 

B.     ^respond(~topicName )

여러 곳에서 반복적으로 사용될 룰을 하나의 topic에 모은 후, topic을 호출하여 사용할 수 있는데 이때 사용하는 함수가 Respond 함수이다. Respond 함수는, 호출된 토픽에서 사용자 입력문과 일치하는 패턴이 있는지 조사하여 매칭된 룰의 출력문을 출력한다. 예를 들면 위의 예제는 아래와 같이 작성할 수 있다.

 

topic: ~FaveSinger [ KPOP ~투애니원 ~티아라 ~마마무]

u: (~투애니원) 노래 정말 잘하지요.

u: (~티아라) 히트곡이 많은 걸그룹이지요.

u: (~마마무) 요즘 인기가 많은 신인 걸그룹 이지요.

u: (*) 저는 잘 모르는 가수에요. 좀 더 얘기해 주세요

 

FaveSinger라는 이름으로 토픽을 작성하여 다른 곳에서도 사용할 수 있도록 한 후,

 

u: ( ~가수) ^respond(~FaveSinger)

 

와 같이 호출하는 것이다. Respond함수는 FaveSinger라는 토픽을 찾아서 그 토픽에 소속된 룰들의 패턴을 사용자 입력문과 비교하여 매칭여부를 조사한다. 반복해서 사용해야 할 룰은 별도의 토픽으로 작성하여 respod함수로 호출하여 사용하는 것이 코드의 중복성을 제거하고 코드를 더 읽기 쉽도록 해 준다. 향후 수정, 보완할 때도 이 한 곳만 수정, 보완하면 되기 때문에 관리에도 더 용이하다고 할 수 있다.

 

C.     ^reuse(ruleName)

Reuse 함수는 호출된 룰의 출력문을 재사용하는 함수이다. 이때 호출된 룰에 패턴이 포함되어 있더라도 패턴의 매칭여부는 따지지 않는다. 오직 호출된 룰의 출력문을 재사용하는 함수라고 기억해 두면 되겠다.

 

t: SMan ( ) 저는 삼성전자에 다녀요

u: (어느 회사에 다녀요) ^reuse(SMan)

 

재사용하는 룰이 같은 토픽에 있지 않아도 된다. 즉 다른 토픽에 있는 룰을 사용해도 된다. 예를 들면,

 

?: (<< 친구 이름 >>) ^reuse(~SARAH.NAME)

 

위의 룰은 토픽 ~SARAH에 있는 NAME이라는 룰을 재사용하라는 뜻이다.

 

D.    ^join( 인수들 )

인수로 주어진 단어들을 빈칸없이 하나의 단어로 합하는 함수이다. 출력문을 좀 더 읽기 쉬운 형태로 만드는데 사용할 수 있다. 예를 들면

 

t: 지금 시각은 ^join(%hour ) ^join(%minute ) 이에요.

지금 시각은 1415분 이에요.

 

인수는 몇 개여도 상관없으며 만약 첫번째 인수로 “AUTOSPACE”를 지정하면 단어들을 합할 때 각 단어와 단어 사이에 빈칸을 하나씩 둔다.

 

댓글
댓글쓰기 폼