정보공간_1

[2기 강남 권도일]자모음 분리 및 영문 텍스트 분리를 통한 텍스트 분석기 개발 본문

IT 놀이터/Elite Member Tech & Talk

[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의 한글 여부 체크

들어온 (CharacterUnicode - 한글 시작 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와 마찬가지로 테스트 데이터로 이용한 한국 소설에서 뽑혀 나온 빈도수는 평균적으로 자음은 , , , , 이고 모음은 , , , , , 인 것으로 비교 분석 되었습니다.   

간단한 원리를 통하여 이렇게 테스트 분석 프로그램을 만들어 보는 것도 좋은 것 같습니다. 부족하지만 저의 데이터 시트 및 분석기 모듈 개발 방법이 많은 도움이 되었으면 하는 바람입니다. 감사합니다.