정규식 입력가이드
    • PDF

    정규식 입력가이드

    • PDF

    기사 요약

    정규식은 다양하게 표현된 문장들을 압축적으로 표기할 수 있는 표기법을 말합니다. 챗봇 빌더에서는 ‘nlu_script’라는 자체 정규 표현식을 사용합니다. 정규식 문법을 잘 활용하면 자연어로 커버하지 못하는 질문을 보완할 수 있습니다.

    nlu_script 기본 설명

    special symbols
    자체 정규식인 nlu_script에서 문법으로 사용되는 특수기호는 다음과 같습니다.

    ( ) { } [ ] < > \: + * ^ ~ = . | & - / `
    

    정규식 문법 기호를 문자 그대로 표현
    문법에 사용되는 특수기호를 정규식 문법이 아닌 문자 그대로 입력해야 할 경우, 특수기호를 쌍따옴표(“ “)로 감싸줍니다. “ “로 감싸진 특수기호는 정규식 문법으로 인식하지 않고 문자로 인식됩니다. 홑따옴표를 잘못 입력하지 않도록 주의해 주십시오.

    잘지내(니|냐)"?"
    -> 잘지내?, 잘지내니?, 잘지내냐?
    

    띄어쓰기
    토큰 사이에 띄어쓰기가 없는 경우, 띄어쓰기가 포함된 토큰은 매칭되지 않으므로 한국어 용례 상 띄어쓰기가 올 수 있는 곳에 최대한 띄어쓰기를 넣는 것을 권장합니다.
    예를 들어, “안녕하세요”라고 입력하면 챗봇은 “안녕하세요”만 인식하지만, “안녕 하세요”라고 입력하면 “안녕하세요”와 “안녕 하세요”를 모두 인식하게 됩니다.

    안녕하세요
    -> 안녕하세요 (O) / 안녕 하세요 (X)
    안녕 하세요
    -> 안녕하세요, 안녕 하세요 (O)
    

    기초 표기법

    필수 발화 표현식 [ ]

    [ ]는 필수 발화를 표현할 때 사용합니다. 주로 반드시 출현해야 하는 품사 표현을 묶는 방식으로 활용하며 중첩해서 사용 가능합니다.
    아래 예시는 필수 발화를 [ ]로 감싸고, [ ] 내에 OR를 의미하는 |를 활용하여 비슷한 단어를 나열한 것입니다. 이렇게 작성된 정규식 문장으로 9개의 문장을 처리할 수 있습니다.

    [주문|배달|배송] [해줘|해주세요|해줘요]
    -> 주문해줘, 배달해줘, 배송해줘, 주문해주세요, 배달해주세요, 배송해주세요, 주문해줘요, 배달해줘요, 배송해줘요
    

    선택 발화 표현식 ( )

    ( )는 선택적으로 출현하는 발화를 표현할 때 사용합니다. 해당 표현은 중첩해서 사용 가능합니다. 주로 긴 질문에서 생략될 가능성이 있는 조사나 수식어를 묶어서 표현하는 방식으로 활용 가능합니다. 우리말에서는 존댓말이나 어미 활용형을 ( )로 묶어서 표현할 수 있습니다.
    예시와 같이, 안녕(하세요|하신가|하냐)로 작성할 경우, ( )는 ‘안녕’에 붙을 수 있는 어미로 선택적으로 출현 가능한 발화이며, ‘|’는 OR의 의미를 나타냅니다. 그래서 안녕(하세요|하신가|하냐)로 한 문장으로 안녕, 안녕하세요, 안녕하신가, 안녕하냐를 모두 처리할 수 있습니다.

    안녕(하세요|하신가|하냐)
    -> 안녕, 안녕하세요, 안녕하신가, 안녕하냐
    

    토큰 간의 연결 표현식 ::

    ::는 토큰 간의 연결을 나타내기 위해 사용하며, 주로 어간::어미변형 연결을 위해 사용됩니다. 해당 표현은 공백 없이 입력해야 합니다

    주[라|세요]
    -> 주라, 주 라, 주세요, 주 세요
    주::[라|세요]
    -> 주라, 주세요
    
    [아버지|어머니]가 방에 들어가신다
    -> 아버지가 방에 들어가신다(O)/ 아버지 가방에 들어가신다(O)
    [아버지|어머니]::가 방에 들어가신다
    -> 아버지가 방에 들어가신다(O)/ 아버지 가방에 들어가신다(X)
    

    OR 논리 기호 표현식 |

    |는 OR 논리 기호를 의미합니다. 주로 보통 필수 발화를 표현하는 대괄호[] 또는 선택 발화를 표현하는 괄호()와 함께 사용합니다.

    [칼로리|열량]알려줘
    -> 칼로리 알려줘, 열량 알려줘
    
    안녕(하세요|하신가|하냐)
    -> 안녕, 안녕하세요, 안녕하신가, 안녕하냐
    

    입력된 토큰을 조합하는 표현식 ~[ ]~

    ~[]~ 는 [] 내에 입력된 토큰들을 조합하기 위해 사용합니다. ~[]~ 내에 입력된 토큰들은 ,(쉼표)로 구분합니다. 토큰을 너무 많이 입력할 경우 후보 패턴이 지나치게 많이 생길 수 있기 때문에(순열; permutation) ~[]~ 내부에 입력하는 토큰 개수를 5개 이하로 제한합니다.
    예시와 같이 ~[계정, 생성]~방법 으로 작성할 경우, ‘계정 생성 방법’과 ‘생성 계정 방법’을 모두 커버할 수 있습니다.

    ~[계정, 생성]~방법
    -> 계정 생성 방법, 생성 계정 방법
    

    입력된 토큰의 반복 조합 표현식 [ ]^

    [ ]^는 [] 내에 입력된 토큰들을 반복 조합하기 위해 사용합니다. 단, 시스템 부하가 발생할 수 있기 때문에 해당 패턴이 사용되는 정규식 질문은 도메인당 100개 이하로 제한합니다.

    • `[k]^(a,b): [] 안에 입력된 토큰 k가 a이상 b 이하의 횟수로 반복됩니다.
    • `[k]^<a: []안에 입력된 토큰 k가 a미만 횟수로 반복됩니다.
    • `[k]^>a: []안에 입력된 토큰 k가 a초과 횟수로 반복됩니다.
    [빨리]^(1,3) 
    -> 빨리, 빨리빨리, 빨리빨리빨리(O) / 빨리빨리빨리빨리(X)
    [빨리]^<3
    -> 빨리, 빨리빨리(O) / 빨리빨리빨리, 빨리빨리빨리빨리(X)
    [빨리]^>2
    -> 빨리빨리빨리, 빨리빨리빨리빨리(O) / 빨리, 빨리빨리(X)
    

    임의의 단어를 매칭하는 표현식 <?>

    는 임의의 단어를 매칭시킬 때 사용하는 와일드 카드입니다. 다만 사이드 이펙트가 발생할 수 있으니 반드시 필요한 경우에만 사용할 것을 권장합니다.
    • : 임의의 1글자 단어를 매칭시킵니다.
    • *?: 임의의 단어를 매칭시킵니다. 임의의 단어가 없는 경우에도 매칭됩니다. 글자 수의 제한은 없습니다.
    • +?: 임의의 단어를 매칭시킵니다. 임의의 단어가 없는 경우에는 매칭되지 않습니다. 글자 수의 제한은 없습니다.
    <?> 길동
    -> 홍길동 (O) / 홍홍길동 (X) 
    [안녕] <?>*?
    -> 안녕 철수야 (O) / 안녕 (O)
    [안녕] <?>+?
    -> 안녕 철수야 (O) / 안녕 (X)
    

    예외 토큰을 지정하는 표현식 \

    \는 매칭되면 안되는 발화 내에 예외 토큰을 지정할 때 사용합니다. 와일드카드 앞 뒤에 예외 토큰에 \를 입력하면 사용자의 다양한 발화에 대한 제한을 둘 수 있습니다.

    • 제외 표현은 와일드 카드의 앞에 위치해야 합니다.
    • 한 개의 정규식 패턴당 2개 이상의 제외 표현을 사용하지 않는 것을 추천합니다.
    \[김철수|홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
    -> 아이유 슬픈 노래 틀어줘 (O) / 아이유나 이지은 슬픈 노래 틀어줘 (O) / 지금 아이유 슬픈 노래 틀어줘 (O)
    -> 아이유나 홍길동 슬픈 노래 틀어줘 (O) / 홍길동이나 아이유 슬픈 노래 틀어줘 (O)
    -> 홍길동 슬픈 노래 틀어줘 (X) / 김철수 슬픈 노래 틀어줘 (X)
    
     \[<?>*? 김철수|<?>*? 홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
    -> 아이유 슬픈 노래 틀어줘 (O) / 아이유나 이지은 슬픈 노래 틀어줘 (O) / 지금 아이유 슬픈 노래 틀어줘 (O)
    -> 아이유나 홍길동 슬픈 노래 틀어줘 (X) / 홍길동이나 아이유 슬픈 노래 틀어줘 (X)
    -> 홍길동 슬픈 노래 틀어줘 (X) / 김철수 슬픈 노래 틀어줘 (X)
    
    **[잘못된 패턴 예시]**
    [\김철수|\홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
    <?>*? [\김철수|\홍길동] [슬픈|좋은|즐거운] 노래 틀어줘
    

    특정 패턴을 지정된 텍스트로 치환하여 저장하는 표현식 :

    특정 패턴을 지정된 텍스트로 normalize하여 저장할 필요가 있을 때 사용합니다. 일반적으로는 normalize된 값으로 엔티티 분석값이 저장되며, 태스크에 한하여 사용자 응답값 그대로 저장할 수 있도록 값 설정을 변경할 수 있습니다.

    • a:b와 같은 형태로 입력하여 사용자가 a를 입력한 경우 b로 치환하여 저장합니다.
    • Normalize 대상은 : 앞의 하나의 토큰에만 적용됩니다.
    1. a1|a2|a3:b
    - 사용자가 a1를 입력한 경우: 해당 패턴에 매칭되며, a1으로 저장됨
    - 사용자가 a2를 입력한 경우: 해당 패턴에 매칭되며, a2으로 저장됨
    - 사용자가 a3를 입력한 경우: 해당 패턴에 매칭되며, a3에서 b로 치환되어 b로 저장됨
    - 사용자가 b를 입력한 경우: 해당 패턴에 매칭되지 않음
    
    2. [a1|a2|a3]:b
    - 사용자가 a1를 입력한 경우: 해당 패턴에 매칭되며, a1에서 b로 치환되어 b로 저장됨
    - 사용자가 a2를 입력한 경우: 해당 패턴에 매칭되며, a2에서 b로 치환되어 b로 저장됨
    - 사용자가 a3를 입력한 경우: 해당 패턴에 매칭되며, a3에서 b로 치환되어 b로 저장됨
    - 사용자가 b를 입력한 경우: 해당 패턴에 매칭되지 않음
    
    3. a1|[a2|a3]:b
    - 사용자가 a1를 입력한 경우: 해당 패턴에 매칭되며, a1으로 저장됨
    - 사용자가 a2를 입력한 경우: 해당 패턴에 매칭되며, a2에서 b로 치환되어 b로 저장됨
    - 사용자가 a3를 입력한 경우: 해당 패턴에 매칭되며, a3에서 b로 치환되어 b로 저장됨
    - 사용자가 b를 입력한 경우: 해당 패턴에 매칭되지 않음
    
    • b의 위치에 영문이 위치하는 경우, 소문자로만 normalize가 지원됩니다.
    1. a:b
    - 사용자가 a를 입력한 경우 : 해당 패턴에 매칭되며, b로 저장됨
    
    2. a:B
    - 사용자가 a를 입력한 경우 : 해당 패턴에 매칭되며, b로 저장됨. B로 저장되지 않음
    
    참고

    해당 표현식은 패턴형 엔티티에서만 활용할 수 있습니다.

    도메인 엔티티, 시스템 엔티티 불러오는 표현식 @{ }, ‘@{ }

    @{ } , `@{ }는 챗봇 빌더에 등록된 도메인 엔티티, 시스템 엔티티, 정규식 변수, 시스템 변수를 입력할 때 사용합니다. @{ }는 도메인 엔티티로 등록한 단어를 불러올 때 사용하고, ‘@{ }는 시스템 엔티티에 등록된 용어를 불러올 때 사용합니다.

    도메인 엔티티 입력 방법

    @메뉴: 치킨, 피자
    
    @{메뉴}[주문|배달]
    -> 치킨 주문, 치킨 배달, 피자 주문, 피자 배달
    

    시스템 엔티티 입력 방법

    `@{TELNUM}
    
    `@{TELNUM}[조회|확인]해줘
    -> 010-0000-0000 조회해줘, 010-1234-5678 조회해줘...
    

    정규식 변수 입력 방법

    @var.숫자: [1|2|3|4|5|6|7|8|9]
    
    @var.{숫자} @var.{숫자} [세|살] (입니다)
    -> 11세 입니다, 23살 입니다 
    

    폼을 불러오는 표현식 #{ }

    #{ }는 폼을 불러올 때 사용합니다. 대화 생성 시 답변에 #{폼이름} 형식으로 입력하면 폼 메뉴에 등록된 주관식 폼 또는 객관식 폼을 불러올 수 있습니다.

    #{게임서비스}
    

    액션 메소드를 불러오는 표현식 ${ }

    ${ }는 액션 메소드를 불러올 때 사용합니다. ${액션메소드} 형식으로 입력하면 등록된 액션 메소드를 불러올 수 있습니다.

    "${membership.name} 고객님의 잔여 포인트는 ${membership.point} 포인트입니다”
    

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.