일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SSM
- NarwalFreo
- 물걸레로봇청소기추천
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레자동세척로봇청소기
- 빅데이터
- 삼성
- 증강현실
- 구글 앱 엔진
- 패턴 인식
- hopfield network
- 신경망
- 파이썬
- Bidirectional Associative Memory
- BAM
- 인공지능
- Neural Network
- 패턴인식
- Friendship
- 신경회로망
- 갤럭시탭S8울트라
- 동아리
- Google App Engine
- 멤버십
- 가상화
- 고려대학교
- Python
- 하이퍼바이저
- 삼성소프트웨어멤버십
- 나르왈프레오
- Today
- Total
정보공간_1
[2기 강남 권도일]자모음 분리 및 영문 텍스트 분리를 통한 텍스트 분석기 개발 본문
[2기 강남 권도일]자모음 분리 및 영문 텍스트 분리를 통한 텍스트 분석기 개발
알 수 없는 사용자 2012. 11. 24. 17:00안녕하세요 강남 21-1기 권도일입니다. 이번 Post는 제가 연구소에서 간단하게 만들어보았던 Text분석기에 대한 소개를 해보고자 합니다. 가제는 "문자분석기" 이구요.
목차를 소개하도록 하겠습니다.
문자분석기 개발 목적
자판을 설계하는 데 가장 기본적인 원칙은 세벌식이어야 한다는 원칙입니다. 잘 설계된 세벌식은 위에 열거된 두벌식의 모든 단점을 없애줄 뿐 아니라 무엇보다도 두벌식에서 많이 발생하는 연타를 줄일 수 있어서 손가락의 피로도와 오타 발생률을 줄일 수 있습니다.
두번째 원칙은 무엇보다도 컴퓨터 자판을 중심으로 하여야 합니다. 최근 에는 수동식 타자기가 거의 사라졌으며 전동식 타자기나 전자식, 아 니면 컴퓨터 프린터를 이용하여 문서를 작성하는 것이 보통이고 따 라서 가장 대중적으로 쓰이는 컴퓨터를 중심으로 자판을 설계하는 것이 바람직합니다.
위와 같은 최적화된 성능을 위한 자판을 만들기 위해서는 기존의 자료와 더불어 비교할 수 있는 자소 빈도수 자료가 필요한데요.
따라서 형태소 분석기를 활용하여 단어를 분리하고 사용자 입장에서 Character의 빈도수를 체크하고 기존의 데이터와 비교를 함을 목적으로 하고 있습니다.
개발 구조도나 플로우 차트에 대한 소개는 굳이 할 필요가 없을 것 같아서 넘기도록 하구요.
이 프로그램에서 사용했던 초성 중성 종성 나누는 법에 대한 소개를 하도록 하겠습니다.
문자분석기 Program 초성, 중성, 종성 나누는 방법
초성, 중성, 종성 별로 각각의 Table 생성
[초성 리스트]
public static readonly string HTable_ChoSung = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃ ㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
[중성 리스트]
public static readonly string HTable_JungSung = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗ ㅘㅙㅚㅛㅜㅟㅞㅟㅠㅡㅢㅣ";
[종성 리스트]
public static readonly string HTable_JongSung = "ㄱㄲㄱㅅㄴㄵㄶㄷㄹ ㄺㄻㄼㄽㅀㅁㅂㅄㅅㅄㅊㅋㅌㅍㅎ";
[단일한글 리스트]
public static readonly string HTable_Mono_JaEum = "ㄱㄲㄱㅅㄴㄵㄶㄷ ㄹㄺㄻㄼㄽㅀㅁㅂㅄㅅㅄㅊㅋㅌㅍㅎ";
public static readonly string HTable_Mono_MoEum = "ㅏㅐㅑㅒㅓㅔㅕ ㅖㅗㅘㅙㅚㅛㅜㅟㅞㅟㅠㅡㅢㅣ";
Input String의 한글 여부 체크
들어온 (Character의 Unicode - 한글 시작 Unicode)값 추출(int 형)
아래의 공식을 적용하여 각 Table에서 맞는 Index 생성할 수 있습니다.
int nUniCode = temp - n_UniCodeHangulBase;
ChoSung = nUniCode / (21*28);
nUniCode = nUniCode / (21*28);
JungSung = nUniCode / 28;
nUniCode = nUniCode % 28;
JongSung = nUniCode;
다음은 제가 이번 분석기에 적용한 자모음, 영문 리스트에 대한 정의 표입니다.
문자분석기 Program 영문 리스트 정의
- TextAnalyzer Program 대문자 리스트 정의
NO. | Char | NO. | Char | NO. | Char |
1 | A | 11 | K | 21 | U |
2 | B | 12 | L | 22 | V |
3 | C | 13 | M | 23 | W |
4 | D | 14 | N | 24 | X |
5 | E | 15 | O | 25 | Y |
6 | F | 16 | P | 26 | Z |
7 | G | 17 | Q |
|
|
8 | H | 18 | R |
|
|
9 | I | 19 | S |
|
|
10 | J | 20 | T |
|
|
- TextAnalyzer Program 소문자 리스트 정의
NO. | Char | NO. | Char | NO. | Char |
1 | a | 11 | k | 21 | u |
2 | b | 12 | l | 22 | v |
3 | c | 13 | m | 23 | w |
4 | d | 14 | n | 24 | x |
5 | e | 15 | o | 25 | y |
6 | f | 16 | p | 26 | z |
7 | g | 17 | q |
|
|
8 | h | 18 | r |
|
|
9 | i | 19 | s |
|
|
10 | j | 20 | t |
|
|
문자분석기 Program 한글 리스트 정의
- TextAnalyzer Program 자음 리스트 정의
NO. | Char | NO. | Char | NO. | Char |
1 | ㄱ | 11 | ㄻ | 21 | ㅅ |
2 | ㄲ | 12 | ㄼ | 22 | ㅆ |
3 | ㄳ | 13 | ㄽ | 23 | ㅇ |
4 | ㄴ | 14 | ㄾ | 24 | ㅈ |
5 | ㄵ | 15 | ㄿ | 25 | ㅉ |
6 | ㄶ | 16 | ㅀ | 26 | ㅊ |
7 | ㄷ | 17 | ㅁ | 27 | ㅋ |
8 | ㄸ | 18 | ㅂ | 28 | ㅌ |
9 | ㄹ | 19 | ㅃ | 29 | ㅍ |
10 | ㄺ | 20 | ㅄ | 30 | ㅎ |
- TextAnalyzer Program 모음 리스트 정의
NO. | Char | NO. | Char | NO. | Char |
1 | ㅏ | 11 | ㅙ | 21 | ㅣ |
2 | ㅐ | 12 | ㅚ |
|
|
3 | ㅑ | 13 | ㅛ |
|
|
4 | ㅒ | 14 | ㅜ |
|
|
5 | ㅓ | 15 | ㅝ |
|
|
6 | ㅔ | 16 | ㅞ |
|
|
7 | ㅕ | 17 | ㅟ |
|
|
8 | ㅖ | 18 | ㅠ |
|
|
9 | ㅗ | 19 | ㅡ |
|
|
10 | ㅘ | 20 | ㅢ |
|
|
지금까지 분석에 필요한 데이터시트에 및 데이터 시트 분석 모듈에 대한 정의였구요 테스트에 사용한 입력 데이터에 대한 소개 및 입력 데이터 선정 기준을 말씀드리겠습니다.
한글 데이터의 경우 소설을 기준으로 하였으며 그 중에서 가장 사람들 에게 널리 알려져 있는 한글 대표 소설 37선중 12개를 선정하여 Input Data로 활용하였습니다. - 감자(1925 김동인), 금수회의록(1908 안국선), 김 강사와T교수(1935 유 진오), 날개(1936 이상), 메밀꽃 필 무렵(1936 이효석), 배따라기(1921 김동인), 사랑방손님과 어머니(1935 주요섭), 삼대(염상섭), 오발탄(1959 이범선), 우상의 눈물(1980 전상국), 운수 좋은 날(1924 현진건)
- 영문 데이터의 경우 소설을 기준으로 하였으며 단편 영문 소설 3편을 선정하여 Input Data로 활용하였습니다.
- Algemeene Geschiedenis in Verhalen(H. Solger), Mary Ware In Texas(Annie F. Johnston), The Story Of Animal(Kennie. J Gutenberg)
이 프로그램의 UI는 간단하게 이렇게 구성해 보았습니다. 숫자별로 각 버튼의 기능에 대하여 정의해 보았습니다.
(1) Open 버튼 - 기존의 Text File의 경로를 가져 와서 불러 오는 경우 에 사용함.
(2) OK 버튼 - 직접 입력한 Text를 분석 자료로 이용할 경우에 사용 함.
(3) Start 버튼 - 입력할 Text를 선택하고 카운팅 속도를 선택한 후 분 석기를 실행할 경우에 사용함.
(4) Exit 버튼 - Words Analyzer 프로그램의 전체종료 시에 사용함.
(5) Speed 버튼 - 카운팅 속도를 조절 시에 사용함. 카운팅 속도는 전 체 카운팅 되는 속도가 아닌 하나 하나의 요소의 개 수가 카운팅 되는 속도를 의미 함. Speed 버튼 선택 없을 시에 기본 선택되는 속도는 0.1sec로 정해 놓음.
위의 그림은 실제 실행해 보았을 때 카운트 되는 각 요소들의 모습입니다. 각 요소별로 실시간으로 읽어들이는 텍스트를 반영하여 카운트 되며 마지막에 최종 결과물이 보여지도록 프로그래밍 하였습니다.
위 프로그램을 통하여 분석한 결과를 기존의 데이터와 비교한 표를 보여드리겠습니다.
문자분석기 Program Data 빈도수 표
- 소설 1: 감자 - 소설 2: 삼대 - 기존 : 중고교 국어 교과서에서의 자소 빈도수
번호 | 자음 | 기존 빈도수(%) | 소설1 빈도수(%) | 소설2 빈도수(%) |
1 | ㅇ | 12.25 | 21.3 | 19.89 |
2 | ㄱ | 7.34 | 10.85 | 11.94 |
3 | ㄷ | 4.34 | 7.37 | 7.01 |
4 | ㅅ | 5.97 | 6.16 | 6.86 |
5 | ㅈ | 3.18 | 4.29 | 4.81 |
6 | ㄹ | 6.78 | 10.89 | 11.30 |
7 | ㅎ | 3.09 | 3.01 | 4.41 |
8 | ㄴ | 8.70 | 16.73 | 15.96 |
9 | ㅁ | 3.17 | 5.49 | 5.93 |
10 | ㅂ | 2.07 | 5.06 | 3.57 |
11 | ㅊ | 0.71 | 1.31 | 1.37 |
12 | ㅌ | 0.50 | 0.59 | 0.75 |
13 | ㅍ | 0.42 | 0.72 | 0.74 |
14 | ㅋ | 0.14 | 0.20 | 0.26 |
번호 | 모음 | 기존 빈도수(%) | 소설1 빈도수(%) | 소설2 빈도수(%) |
1 | ㅏ | 9.65 | 24.87 | 24.23 |
2 | ㅣ | 7.06 | 13.98 | 15.36 |
3 | ㅡ | 6.23 | 14.54 | 13.31 |
4 | ㅗ | 4.88 | 10.29 | 10.15 |
5 | ㅓ | 4.40 | 11.53 | 12.33 |
6 | ㅜ | 2.88 | 5.64 | 6.23 |
7 | ㅕ | 1.71 | 5.47 | 4.95 |
8 | ㅔ | 1.62 | 4.32 | 4.30 |
9 | ㅐ | 1.57 | 2.64 | 3.63 |
10 | ㅛ | 0.78 | 0.41 | 0.83 |
11 | ㅑ | 0.30 | 0.40 | 0.70 |
12 | ㅠ | 0.15 | 0.17 | 0.15 |
13 | ㅖ | 0.15 | 0.22 | 0.22 |
14 | ㅒ | 0.04 | 0.02 | 0.01 |
- 소설 1: Algemeene Geschiedenis in Verhalen - 소설 2: Mary Ware In Texas
- 기존 : http://www.cryptograms.org 참조
번호 | Character | 기존 빈도수(%) | 소설1 빈도수(%) | 소설2 빈도수(%) |
1 | e | 12.70 | 19.76 | 13.29 |
2 | n | 6.74 | 10.7 | 6.94 |
3 | a | 8.16 | 7.2 | 8.54 |
4 | r | 5.98 | 7.12 | 6.19 |
5 | o | 7.50 | 6.67 | 8.01 |
6 | d | 4.25 | 6.54 | 4.57 |
7 | i | 6.96 | 6.47 | 6.42 |
8 | t | 9.05 | 6.39 | 9.81 |
9 | s | 6.32 | 4.23 | 6.39 |
10 | l | 4.02 | 3.71 | 4.51 |
11 | h | 6.09 | 3.45 | 7.00 |
12 | g | 2.01 | 3.22 | 2.32 |
13 | m | 2.40 | 1.96 | 2.36 |
14 | u | 2.75 | 0.01 | 0.01 |
15 | c | 2.78 | 1.84 | 2.52 |
16 | w | 2.36 | 0.01 | 0.01 |
17 | y | 1.97 | 0.01 | 0.01 |
18 | p | 1.92 | 1.29 | 1.61 |
19 | f | 2.22 | 0.69 | 2.19 |
위와 같은 결과를 통하여 비교 분석해본 결과 영문 소설의 경우 가장 많은 빈도수는 e이고 평균적으로 e, t, n, a, o, r, s 가 높은 빈도수를 기록하였고 기존의 Data와 마찬가지로 테스트 데이터로 이용한 한국 소설에서 뽑혀 나온 빈도수는 평균적으로 자음은 ㅇ, ㄴ, ㄱ, ㄹ, ㅅ이고 모음은 ㅏ, ㅡ, ㅓ, ㅗ, ㅕ, ㅜ인 것으로 비교 분석 되었습니다.
간단한 원리를 통하여 이렇게 테스트 분석 프로그램을 만들어 보는 것도 좋은 것 같습니다. 부족하지만 저의 데이터 시트 및 분석기 모듈 개발 방법이 많은 도움이 되었으면 하는 바람입니다. 감사합니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 대구 김길종] Unity3D 기초 (3) (0) | 2012.11.24 |
---|---|
[2기 전주 박준형] OpenMP 병렬 영역, 작업 분할 지시어 (0) | 2012.11.24 |
[2기 대구 이현복] Data Structure - Tree (0) | 2012.11.24 |
[2기 대구 최진원] Function & Pointer (0) | 2012.11.24 |
[2기 강남 이광수] Micom Programming 의 세계 (4부) (0) | 2012.11.23 |