본문 바로가기

개발새발 개발하기

[졸업 프로젝트] 챗봇을 위한 형태소 분석 1

이전에 쓰던 네이버 블로그에 졸업 프로젝트 때 했던 코드들이 있길래 여기로 옮겨오는 작업을 하려고 한다.

기억은 잘 안나지만.. 한번 써봐야지

 

졸업 프로젝트는 챗봇을 활용하여 강아지 질병 관리를 해주는 서비스였다.

챗봇을 사용할 때 가장 중요한 건, 마치 사람과 대화하는 것처럼 문장이 매끄러워야 한다는 것이다.

이를 구현하기 위해 형태소 분석이 필요했다!

구글링을 통해 여러 가지의 한국어 형태소 분석기를 발견했다.

파이썬을 활용한 Konlpy, Soynlp, 오픈 소스 형태소 분석 엔진인 Mecab 등을 찾았는데, 우리는 Visual Studio와 C#을 활용해 .NET 환경에서 쉽게 사용할 수 있는 '트위터 형태소 분석기(TwitterKoreanProcessorCS)'를 택했다.

 

처음 사용할 때 이 포스팅을 참고했다.

 

사용법을 익히기 위해 엄청 간단한 예제를 입력해봤다.

데이터는 '내 강아지를 위한 질병 사전'을 크롤링했다.

 

사용자가 입력하는 증상에서 주요 증상을 빼내기 위해 토큰화를 사용했다.

"토하려는 기색이 있고, 입을 핥거나 침을 흘린다." 라는 증상이 입력으로 들어오면, 토큰화하여 증상을 빼내는 방식이다.

 

토큰화 코드를 사용해 문장을 토큰화했다.

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Moda.Korean.TwitterKoreanProcessorCS; 


namespace TwitterKorean 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            StringBuilder result = new StringBuilder(); 
            
            var tokens = TwitterKoreanProcessorCS.Tokenize("토하려는 기색이 있고, 입을 핥거나 침을 흘린다."); // 토큰화 
            var results = TwitterKoreanProcessorCS.TokensToStrings(tokens); // 토큰을 문자열화

            // 토큰 하나씩 접근 

            IEnumerator<string> e = results.GetEnumerator(); 
            while (e.MoveNext()) 
            { 
                Console.WriteLine(e.Current); 

                if ((e.Current).Equals("다")) 
                { 
                    Console.Write("===!"); 
                } 
            } 
            
            // 문장을 토큰화한 후 문자열화 하여 출력
            Console.WriteLine(string.Join(" / ", results)); 
        } 
    } 
}

 

결과는 아래와 같이 나왔다.

 

다시 보니까 엄청 간단하네..