티스토리 뷰


예제 대화문


챗봇의 질문에 사용자가 늘 기대한 형식대로 답변을 하는 것은 아니다. 예를 들어 좋아하는 가수 있어요?”라고 물었을 때 사용자의 답변은 크게 아래와 같이 두 가지가 가능하다.

 

A.     저는 2NE1을 좋아해요

B.     저는 2NE1을 안 좋아해요

 

위 답변의 어려운 점은 구문 형식은 흡사한데 뜻은 정반대라는 점이다. 우선 예제 A를 위한 패턴을 작성해 보자.

 

C.     u: ( ~2NE1 좋아* )

 

이 패턴은 저는 2NE1을 좋아해요”, “저는 2NE1이 좋아요등의 입력문과 매칭될 수 있다. 이제 사용자가 무척 좋아해요”, “아주 많이 좋아해요등의 강조형으로 입력할 경우를 대비하여 패턴을 수정하면,

 

D.     u: ( ~2NE1 *~2 좋아* )

 

 그런데 이 패턴은 예제 B와도 매칭이 된다는 점이 문제이다. 이런 경우는 24절에서 설명했던 제외 명령어 ! (느낌표)를 사용하여 처리할 수 있다.

 

A.     u: ( !~2NE1 *~2 좋아* )

 

언뜻 보면 다소 복잡해 보이지만 하나씩 차근히 살펴보면 매우 단순한 규칙이다.

    !: 사용자 입력문에 이라는 단어가 나타나면 매칭을 중단하고 다른 룰을 검토한다. 따라서 “2NE1을 좋아해“2NE1을 안 좋아해를 구별할 수 있게 된다.

    ~2NE1 : 컨셉 ~2NE1에 포함된 어떤 단어라도 사용자 입력문에 나타나면 매칭된다. 사용자가 2NE1을 영어로 표기하든 한글로 표기하든 다 알아들을 수 있다. 컨셉 ~2NE1에 한글표기, 영어표기, 오탈자 표기 등을 모두 포함시키면 된다.

    *~2 : “2NE1”좋아사이에 아무런 단어가 없어도 되고, 한 개의 단어가 있어도 되고 두 개의 단어가 있어도 된다는 뜻이다. 2개까지 허용한다는 명령어이다. 이로써 “2NE1을 좋아해요”, “2NE1을 무척 좋아해요”, “2NE1을 아주 많이 좋아해요등과 매칭될 수 있다. 단어를 제한하지 않을 경우, 다소 극단적인 예이기는 하지만, “2NE1을 예전에 좋아했었는데 지금은 악동 뮤지션을 더 좋아해요와도 매칭이 될 수 있기 때문이다.

    좋아* : “좋아의 여러 활용형을 매칭할 수 있도록 부분 와일드 카드를 썼다. 좋아, 좋아해, 좋아해요, 좋습니다 등과 매칭된다.

 

제외 명령어는 한 패턴에서 여러 번 나올 수도 있고 아래와 같이 선택 연산자([ ] 꺽은 괄호)와 함께 쓰일 수도 있다.

 

B.     u: ( !!파랑

C.     u: ( ![안 파랑]

 

F는 사용자 입력문에 파랑이라는 단어가 동시에 나와서는 안된다는 뜻이며 룰H는 사용자 입력문에 또는 파랑둘 중의 어느 하나라도 나와서는 안된다는 뜻이다.

 

예제 대화를 위한 스크립트


댓글
댓글쓰기 폼