반응형

/*******************************************************************************************************************
-- Title : [Py3.5] Korean POS Tagging w/ KLT
-- Key word : klt korean language technology korean pos_tag korean pos tagging 품사 태깅 한글 
*******************************************************************************************************************/

■ Scripts(KLT.py)

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
#-*- coding:utf8 -*-
 
import os, re, codecs, sys
 
# =======================================
# -- KLT 호출(.exe 파일 이용)
# =======================================
def pos(_corpus, _infile='sample.in', _outfile='sample.out', _option='tip1+sw'):
    # -- 문장 토큰 처리 후 공백이 100이하인 것만 사용(?)
    corpus = [sent for sent in _corpus.split('.'if len(sent.split(' ')) < 100]
    corpus = '.\n'.join(corpus)
 
    # -- 파일 쓰기
    ifile = codecs.open(_infile, 'w+', encoding='cp949')
    ifile.write(corpus)
    ifile.close()
 
    # KLT 실행(read from ifile, write into ofile)
    os.system( "kma.exe -"+' '.join([_option, _infile, _outfile]) )
 
    # -- 파일 읽기
    ofile = codecs.open(_outfile, encoding='KSC5601')
    tagged_token = ofile.read()
    ofile.close()
 
    # -- 파일 삭제
    os.remove(_infile)
    os.remove(_outfile)
 
    # -- 괄호() 내용을 추출하여 리스트로 전환
    lst_token = re.findall(pattern='\([\w ]+\)', string=tagged_token)
 
    # -- word와 tag의 분리
    tokens = []
    for ele in lst_token:
        ele = ele.replace(' '"','")
        ele = ele.replace('('"('")
        ele = ele.replace(')'"')")
        ele = eval(ele)
        ele = (ele[1], ele[0])
        tokens.append(ele)
    return tokens
 
 
# =======================================
# -- 명사만 추출
# =======================================
def nouns(s):
    tokens = pos(s)
    return [token for token, tag in tokens if tag == 'N']
 
 
if __name__ == '__main__':
    s = codecs.open('klt_sample.txt', encoding='cp949').read()
 
    print('*'*100)
    tagged_tokens = pos(s)
    print(tagged_tokens)
 
    noun_tokens = nouns(s)
    print(noun_tokens)
 
cs


■ Scripts(Main.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-*-coding:utf-8-*-
 
import KLT
 
source = "간단히 설명하면, 본 발명은 풀크럼축 및 편심 크랭크핀에 대하여 작동하는 진동링크를 포함한 슬라이더 " \
         "링크 프레스에 관한 것이다. 연결 링크는 상기 진동 링크를 슬라이드에 연결시킨다. 상기 진동 링크 및 " \
         "풀크럼축은 압축 토크를 증가시키고 하향 압축 속도를 감소시키는 반면 상향 압축 속도는 증가시키도록 " \
         "작동된다. 상기 편심 크랭크축은 상기 진동 링크를 작동시키고, 토크의 증가를 도우며, 왕복 운동성을 상기 " \
         "슬라이드에 제공하고 있다. 슬라이드는 선회가능한 슬라이드 지브들을 포함하는데, 선회가능한 슬라이드 " \
         "지브들은 왕복 고정 지브에 연결되어 평행한 면접촉을 유지하고 상기 슬라이드 및 프레스상에 가해지는 " \
         "편심 하중을 흡수하고 제거한다. 스테이들 stay  및 스페이서 spacer  는 프레스의 측면을 정렬시키고 " \
         "하중하에서의 굽힘을 제거하는 한편 편심 변형 압력을 흡수하고 분산시킨다. "
 
if __name__ == '__main__':
    # -- PoS tagging
    print(KLT.pos(source))
    
    # -- Noun Words
    print(KLT.nouns(source))
 
cs


■ Files
KLT.zip(+부끄럽게 웃기)

KLT.zip
다운로드
klt_sample.txt
다운로드

 

반응형

+ Recent posts