앎을 경계하기

DAFIT/904 - 한국어 데이터 Tokenizer

<DAFIT> 04 한국어 데이터 Tokenizer 02 - 형태소 분석기 라이브러리

양갱맨 2019. 11. 11. 00:12

데이터는 dafit에서 제공하는 html파일에서 다운로드 받을 수 있다.

링크를 들어가면 날짜별로 kowiki dump file을 다운로드 받을 수 있다.

 

문장 형태의 데이터가 있어야 형태소 분석을 했을 때 만족스러운 결과가 나타날 것이라고 생각했다.

그래서 아래 abstract가 있는 xml파일을 사용하기로 함.

(파일을 빨리 열어서 구조를 봐야하기 때문에 사이즈가 좀 작은 파일을 선택한 것도 이유 중 하나)

 

뭐 이런식으로 생겼다.

abstract 태그 데이터만 추출해서 형태소 분석을 하자.

from konlpy.tag import Kkma
import xml.etree.ElementTree as elemTree

사용할 라이브러리를 임포트한다.

xml을 다뤄야하기 때문에 python 표준 라이브러리인 xml.etree.ElementTree를 사용하고

형태소 분석 라이브러리인 konlpy를 사용한다.

tree = elemTree.parse('./kowiki-20190620-abstract.xml') ##읽을 xml file
root = tree.getroot()  ## root tag를 찾고
list_ab = []
## 파일 내 abstract라는 태그를 찾아서 내용을 list_ab에 저장한다.

for abstract in root.iter("abstract"):
    list_ab.append(abstract.text)
    if len(list_ab) == 100:
        break

elemTree.parse()는 xml 파일을 파싱한다.

abstract 태그로 쌓인 텍스트 데이터를 list_ab에 저장한 결과를 보면 아래와 같이 잘 파싱이 된 것을 볼 수 있다.

* 참고로 수행이 오래걸리는 탓에 100개만 분석에 사용하겠다.

 

kkma = Kkma()  #object 생성

with open("./DF904_02_ㅁㅁㅁ.txt", mode='wb') as output:
    for content in list_ab:
        for morph in kkma.pos(content): ## 튜플 형태로 나타남(단어,POStag)
            ## 텍스트 파일 쓰기
            data = morph[0]+'/'+morph[1]+' '
            data = data.encode("utf-8")
            output.write(data)
        output.write('\n'.encode("utf-8"))

처음에 encoding 지정없이 했다가 CP949 encoding error가 나서 utf-8로 지정해줬다.

결과

abstract 태그에 있는 데이터들이 전부 형태소 분석 메소드를 거쳐 문제에서 원하는 형태로 txt를 저장했음을 확인할 수 있다.

 

 

http://www.dafit.me/

 

다핏, 데이터사이언스 연습문제

내 손으로 연습하며 실력쌓기

www.dafit.me