재난 뉴스 형태소 분석해서 Map Reduce WordCount 해보기

~일간~ 두더지 탈출기 (부제. 삽질 멈춰!…)
Seoul Emergency 프로젝트를 진행하며 발생한 에러를 정리합니다.

재난뉴스 형태소 분석하기

파이썬 형태소 분석기 라이브러리 설치

그냥 기사 원문 긁어와서 txt 파일로 만들고 맵리듀스 돌리니 띄어쓰기로만 구분이 되어서… 어구과 명사로 구분할 수 있는 파이썬 형태소 분석기 라이브러리를 사용했다.

Open Korean Text 형태소 분석기를 사용했으며 문장을 정규화하거나, 어구, 형태소, 명사 등을 파싱할 수 있다.

형태소 분석기, Okt(Open Korean Text) (구)트위터 형태소분석기

위 라이브러리를 쓰려면 리눅스 서버에 anaconda로 파이썬 가상환경 만들어주고 가상환경에서 KoNLPy 패키지 설치해줘야 한다.

[Ubuntu 18.04] KoNLPy, mecab 패키지 설치하기

OKT 라이브러리를 이용해 뉴스 형태소 분석

  1. Okt 패키지 import
from konlpy.tag import Okt
okt = Okt()
  1. 어구 분석

뉴스 원문 텍스트파일을 한 라인씩 읽어온 뒤 Okt 패키지의 어구 분석 함수인 phrases() 함수에 대입한다. 뉴스 라인별 어구가 파싱되어 문자열 배열 형태로 반환됨!

이후 산출물 파일에 각 문자열을 콤마로 구분하여 저장한다.

def parseNewsPhrases() :
	read_file = open('../data/test-news-1.txt', mode='r')
	write_file = open('../data/test-news-1-phrases.txt', mode='w')
	
	lines =  read_file.readlines()
	
	for line in lines :
		# print(okt.phrases(line), end='')
		if (line == '\n') :
			continue
		
		parsed_phrases = okt.phrases(line)
		# parsed_nouns = okt.nouns(line)          nouns() 함수는 명사 기준 파싱
		
		for phrase in parsed_phrases :
			write_file.write(phrase + ",")
			
		write_file.write('\n')
		
	read_file.close()
	write_file.close()
  • before : 뉴스 원문

Ubuntu 64-bit - VMware Workstation 16 Player (Non-commercial use only) 2022-03-13 오전 1_40_11.png

  • after : 어구 분석

Ubuntu 64-bit - VMware Workstation 16 Player (Non-commercial use only) 2022-03-13 오전 1_39_55.png

  • after : 명사 분석

Ubuntu 64-bit - VMware Workstation 16 Player (Non-commercial use only) 2022-03-13 오전 1_41_31.png

형태소 분석 결과 WordCount 맵리듀스 적용하기

WordCount Sort 예제에 재난 뉴스 형태소 분석 결과 파일을 적용하여 맵 리듀스를 돌려보자!

재난 뉴스 형태소 분석 결과 파일을 하둡 경로에 넣어주고 하둡 공식 적용하면 다음과 같은 결과가 나온다.

  • 어구 분석 word count

Ubuntu 64-bit - VMware Workstation 16 Player (Non-commercial use only) 2022-03-13 오전 1_46_46.png

  • 명사 분석 word count

Ubuntu 64-bit - VMware Workstation 16 Player (Non-commercial use only) 2022-03-13 오전 1_43_23.png

해피 ~~!