형관봇
[C#] 트위터 형태소 분석기(Twitter-Korean) #1 본문
한국어 형태소 분석기의 종류는 KoNLP, 꼬꼬마, 트위터 등.. 몇가지의 형태소 분석기가 존재합니다.
그중 .NET 환경에서 쉽게 사용할 수 있는 트위터 형태소 분석기가 있습니다.
[ TwitterKoreanProcessorCS ]
이번장에서는 트위터 형태소 분석기를 이용하여, 간단하게 형태소만 분리 해보도록 하겠습니다.
GitHub에 예제 및 설명이 있습니다.
https://github.com/modamoda/TwitterKoreanProcessorCS
https://github.com/twitter/twitter-korean-text
위 링크에 들어가서 확인을 하시면 충분히 구현할 수 있습니다.
1. Nuget을 이용한 트위터 형태소 분석기 다운로드 및 설치
korean으로 검색하시면, 첫번째 Moda.Korean.TwitterKoreanProcessorCS를 선택 후, 설치를 눌러줍니다.
저는 이미 설치가 되어있어서 제거버튼이 활성화 되어있네요
2. 4가지 기능 및 예제
· 정규화(normalization)
- 한국어를 처리하는 예시입니닼ㅋㅋㅋ -> 한국어를 처리하는 예시입니다ㅋㅋ
· 토큰화(tokenization)
- 한국어를 처리하는 예시입니다ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하는Verb, 예시Noun, 입Adjective, 니다Eomi, ㅋㅋKoreanParticle
· 어근화(stemming)
- 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하다Verb, 예시Noun, 이다Adjective, ㅋㅋKoreanParticle
· 어구추출(phrase extraction)
- 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어, 처리, 예시, 처리하는 예시
아래 코드는 제공해 주는 함수 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | public string NormalizeSample() { string result = TwitterKoreanProcessorCS.Normalize("정규화(Normalize) 예제입니당~"); //Normalize) 예제입니다~" return result; } public string TokenizeSample1() { StringBuilder result = new StringBuilder(); var tokens = TwitterKoreanProcessorCS.Tokenize("토큰화를 처리하는 예제입니다"); foreach (var token in tokens) { result.AppendFormat(format: "{0}({1}) [{2},{3}] / ", args: new object[] { token.Text, token.Pos.ToString(), token.Offset, token.Length }); } // 토큰(ProperNoun) [0,2] / 화(Suffix) [2,1] / 를(Josa) [3,1] / ... / 입니(Adjective) [12,2] / 다(Eomi) [14,1] / return result.ToString(); } public string TokensToStringsSample1() { var tokens = TwitterKoreanProcessorCS.Tokenize("토큰화를 처리하는 예제입니다. 문자열화는 덤"); var results = TwitterKoreanProcessorCS.TokensToStrings(tokens); // 토큰 / 화 / 를 / 처리 / 하는 / 예제 / 입니 / 다 / . / 문자열 / 화 / 는 / 덤 return string.Join(" / ", results); } public string StemSample1() { StringBuilder result = new StringBuilder(); var tokens = TwitterKoreanProcessorCS.Tokenize("토큰화 이후 어근화를 처리하는 예제입니다"); var stemmedTokens = TwitterKoreanProcessorCS.Stem(tokens); foreach (var stemmedToken in stemmedTokens) { result.AppendFormat(format: "{0}({1}) [{2},{3}] / ", args: new object[] { stemmedToken.Text, stemmedToken.Pos.ToString(), stemmedToken.Offset, stemmedToken.Length }); } // 토큰(ProperNoun) [0,2] / 화(Suffix) [2,1] / (Space) [3,1] / 이후(Noun) [4,2] / ... / 예제(Noun) [17,2] / 이다(Adjective) [19,3] / return result.ToString(); } public string ExtractPhraseSample1() { StringBuilder result = new StringBuilder(); var tokens = TwitterKoreanProcessorCS.Tokenize("토큰화 처리 이후 어구를 추출하는 예제입니당ㅇㅇㅇ"); var phrases = TwitterKoreanProcessorCS.ExtractPhrases(tokens); foreach (var phrase in phrases) { result.AppendLine("---------"); result.AppendFormat("{0} | ", phrase.Pos.ToString()); foreach (var token in phrase.Tokens) { result.AppendFormat(format: "{0}({1}) [{2},{3}] / ", args: new object[] { token.Text, token.Pos.ToString(), token.Offset, token.Length }); } result.AppendLine(); } // Noun | 토큰(ProperNoun) [0,2] / // Noun | 처리(Noun) [4,2] / // ... // Noun | 어구(Noun) [10,2] / return result.ToString(); } | cs |
위 예제를 바탕으로 간단한 추출예제를 작성해 보았습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public string StemSample1() { StringBuilder result = new StringBuilder(); var tokens = TwitterKoreanProcessorCS.Tokenize( TwitterKoreanProcessorCS.Normalize("한국어를 처리하는 예시입니닼ㅋㅋ")); var stemmedTokens = TwitterKoreanProcessorCS.Stem(tokens); foreach (var stemmedToken in stemmedTokens) { result.AppendFormat(format: "{0}({1}) [{2},{3}] / ", args: new object[] { stemmedToken.Text, stemmedToken.Pos.ToString(), stemmedToken.Offset, stemmedToken.Length }); } return result.ToString(); } | cs |
[ 결과 ]
형태소 분석을 전처리로 하여,
다음장에서는 챗봇을 구성하는 작업을 해보겠습니다.
'C#.NET' 카테고리의 다른 글
[C#] API 사용시 강제 이벤트 전송 (0) | 2017.04.26 |
---|