2017.11.17) Konlpy를 활용한 야민정음 해석기 part.1

2017. 11. 17. 18:25프로젝트(완료)/야민정음 해석기

필자는 2017 15인치 맥북 터치바, 

(

i7 - 7700hq

radeon pro 555

LPDDR3 16gb

APPLE SSD 256gb

)

파이참, 

파이썬 3.6 환경에서 구동하였다.


konlpy 공식 사이트의 코드를 활용한 문장 분석

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
import konlpy
import nltk
 
= u'아버지가 방에 들어가신다'
= u'며용'
 
kkma_words_1 = konlpy.tag.Kkma().pos(a)
kkma_words_2 = konlpy.tag.Kkma().pos(b)
 
Twitter_words_1 = konlpy.tag.Twitter().pos(a)
Twitter_words_2 = konlpy.tag.Twitter().pos(b)
 
grammar = """
NP: {<N.*>*<Suffix>?}   
VP: {<V.*>*}            
AP: {<A.*>*}           
"""
parser = nltk.RegexpParser(grammar)
 
print("kkma 비교")
print(parser.parse(kkma_words_1).pprint())
print(parser.parse(kkma_words_2).pprint())
 
print("\nTwitter 비교")
print(parser.parse(Twitter_words_1).pprint())
print(parser.parse(Twitter_words_2).pprint())
 
cs



문장 자동 생성

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
import bisect
import itertools
import random
 
import nltk
from konlpy.corpus import kolaw
from konlpy.tag import Mecab
 
 
def generate_sentence(cfdist, word, num=15):
    sentence = []
 
    while word!='.':
        sentence.append(word)
 
        choices, weights = zip(*cfdist[word].items())
        cumdist = list(itertools.accumulate(weights))
        x = random.random() * cumdist[-1]
        word = choices[bisect.bisect(cumdist, x)]
 
    return ' '.join(sentence)
 
 
def calc_cfd(doc):
    words = [w for w, t in Mecab().pos(doc)]
    bigrams = nltk.bigrams(words)
    return nltk.ConditionalFreqDist(bigrams)
 
 
if __name__=='__main__':
    nsents = 5
    initstr = u'정치'
 
    doc = kolaw.open('constitution.txt').read()
    cfd = calc_cfd(doc)
 
    for i in range(nsents):
        print('%d. %s' % (i, generate_sentence(cfd, initstr)))
 
cs