2017.11.20) Konlpy를 활용한 야민정음 해석기 part.3

2017. 11. 20. 23:33프로젝트(완료)/야민정음 해석기

문장을 분석하여 문장 성분들이 제자리에 잘 위치하고 있으면 점수를 부여하는 형식으로

야민정음이 섞인 문장과 섞이지 않은 문장을 구별하는 방법을 취한다


3개의 품사에만 적용시켰다. 

추가 된 것들 : 명사, 형용사, 동사

추가 할 것들 : 관형사, 여러 어미들(선어말어미 등)

나머지는 예외가 너무 많고, 야민정음이 사실상 쓰이지 않기 때문이다.


명사 : 


일반 명사 ->

일반명사가 1자리일때는 야민정음이 강제로 분리된 경우가 다반수 

점수 +1점

2자리 이상일때는

점수 +5점


고유 명사 ->

야민정음이 들어갈 수도 있고, 진짜 이름같은 것이 들어갈 수 있으므로 중간점수

점수 +3점


기타 어미, 조사들이 뒤에 온다(야민정음인 경우 조사 없이 명사 명사 명사 식으로 끊어지기 때문)

점수 +3점


형용사:


뒤에 전성 어미가 붙거나 연결 어미가 올 경우

점수 +2점


동사:


형용사와 같은 용언으로서 연결어미, 전성어미가 올 경우 밑 의존명사(~것)이나 선어말어미가 올 경우

점수 +3점


현재 야민정음과 일반 문장의 점수차가 생각보다 적게 나고 있어

확실한 구분이 가능하게 채점을 강화해야 함.

계속 실험해보며 더 뛰어난 문장 채점 방식으로 개선해나갈 것임


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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import konlpy
def yamin():
    print("입력 : ")
    rtn = []
    __input = "한글과피라는 단어가 머체로 '한국어 과피'익\
익미로 잘㕦 사용되고 있거만, 야민정음익 경윽에는 정말로\
글자에 판련된 문제01므로 '한글과피'에 속한다고 볼 슥 있다."
    rtn.append(__input)
    __input = "한글파괴라는 단어가 대체로 '한국어 파괴'의\
의미로 잘못 사용되고 있지만, 야민정음의 경우에는 정말로\
글자에 관련된 문제이므로 '한글파괴'에 속한다고 볼 수 있다."
    rtn.append(__input)
    return rtn
def nounNext(p0):
    if p0 == 'SC' or \
                    p0 == 'MAJ' or \
                    p0 == 'JKS' or \
                    p0 == 'JKC' or \
                    p0 == 'JKG' or \
                    p0 == 'JKO' or \
                    p0 == 'JKB' or \
                    p0 == 'JKV' or \
                    p0 == 'JKQ' or \
                    p0 == 'JC' or \
                    p0 == 'JX' or \
                    p0 == 'XSN':
        print("+3")
        return 3
    return 0
def adjNext(p0):
    if p0 == 'ETM' or \
                    p0 == 'EP' or \
                    p0 == 'EC':
        print("+2")
        return 2
    return 0
def verbNext(p0):
    if p0 == 'EC' or \
                    p0 == 'EP' or \
                    p0 == 'ETM' or \
                    p0 == 'NNB':
        print("+3")
        return 3
    return 0
_input = yamin()
words = []
score = []
for arr in _input:
    words.append(konlpy.tag.Mecab().pos(arr))
    score.append(0)
for i in range(0,len(words)):
    print("\n"+_input[i])
    for j in range(0len(words[i])):
        for k in words[i][j][1].split('+'):
            if k == 'NNG':
                print('일반 명사 : ' + words[i][j][0])
                score[i] += nounNext(words[i][j+1][1])
                if  len(words[i][j][0]) == 1:
                    score[i] += 1
                    print("+1")
                else:
                    score[i] += 5
                    print("+5")
            if k == 'NNP':
                print('고유 명사 : ' + words[i][j][0])
                score[i] += nounNext(words[i][j + 1][1]) + 3
                print("+1")
            if k == 'NNB':
                print('의존 명사 : ' + words[i][j][0])
                score[i] += nounNext(words[i][j + 1][1])
            if k == 'NR':
                print('수사 : ' + words[i][j][0])
                score[i] += nounNext(words[i][j + 1][1])
            if k == 'NP':
                print('대명사 : ' + words[i][j][0])
                score[i] += nounNext(words[i][j + 1][1])
            if k == 'VV':
                print('동사 : ' + words[i][j][0])
                try:
                    score[i] += verbNext(words[i]\
[j][1].split('+')[1])
                except:
                    print("동사가 결합형이 아님")
                score[i] += verbNext(words[i][j + 1][1])
            if k == 'VA':
                print('형용사 : ' + words[i][j][0])
                score[i] += adjNext(words[i][j + 1][1])
            if k == 'VX':
                print('보조 용언 : ' + words[i][j][0])
            if k == 'VCP':
                print('긍정 지정사 : ' + words[i][j][0])
            if k == 'VCN':
                print('부정 지정사 : ' + words[i][j][0])
            if k == 'MM':
                print('관형사 : ' + words[i][j][0])
            if k == 'MAG':
                print('일반 부사 : ' + words[i][j][0])
            if k == 'MAJ':
                print('접속 부사 : ' + words[i][j][0])
            if k == 'IC':
                print('감탄사 : ' + words[i][j][0])
            if k == 'JKS':
                print('주격 조사 : ' + words[i][j][0])
            if k == 'JKC':
                print('보격 조사 : ' + words[i][j][0])
            if k == 'JKG':
                print('관형격 조사 : ' + words[i][j][0])
            if k == 'JKO':
                print('목적격 조사 : ' + words[i][j][0])
            if k == 'JKB':
                print('부사격 조사 : ' + words[i][j][0])
            if k == 'JKV':
                print('호격 조사 : ' + words[i][j][0])
            if k == 'JKQ':
                print('인용격 조사 : ' + words[i][j][0])
            if k == 'JC':
                print('접속 조사 : ' + words[i][j][0])
            if k == 'JX':
                print('보조사 조사 : ' + words[i][j][0])
            if k == 'EP':
                print('선어말어미 : ' + words[i][j][0])
            if k == 'EF':
                print('종결 어미 : ' + words[i][j][0])
            if k == 'EC':
                print('연결 어미 : ' + words[i][j][0])
            if k == 'ETN':
                print('명사형 전성 어미 : ' + words[i][j][0])
            if k == 'ETM':
                print('관형형 전성 어미 : ' + words[i][j][0])
            if k == 'XPN':
                print('체언 접두사 : ' + words[i][j][0])
            if k == 'XSN':
                print('명사 파생 접미사 : ' + words[i][j][0])
            if k == 'XSV':
                print('동사 파생 접미사 : ' + words[i][j][0])
            if k == 'XSA':
                print('형용사 파생 접미사 : ' + words[i][j][0])
            if k == 'XR':
                print('어근 : ' + words[i][j][0])
            if k == 'SF':
                print('마침표 물음표 느낌표 : ' + words[i]\
[j][0])
            if k == 'SE':
                print('줄임표 ... : ' + words[i][j][0])
            if k == 'SSO':
                print('여는 괄호 : ' + words[i][j][0])
            if k == 'SSC':
                print('닫는 괄호 : ' + words[i][j][0])
            if k == 'SC':
                print('구분자 : ' + words[i][j][0])
            if k == 'SY':
                print('기타 기호 : ' + words[i][j][0])
            if k == 'SH':
                print('한자 : ' + words[i][j][0])
            if k == 'SL':
                print('외국어 : ' + words[i][j][0])
            if k == 'SN':
                print('숫자 : ' + words[i][j][0])
print()
for i in range(0,len(_input)):
    print(_input[i])
    print("점수 : "+str(score[i]))
cs