명사 추출 - 네이버 영화리뷰
이번 글에서는 네이버 영화리뷰 데이터에서 실제 리뷰 문장을 읽어 명사만 추출하고자 한다.
형태소 분석기는 Mecab 형태소 분석기를 활용할 것이다.
실행환경은 윈도우즈10에서 파이참을 사용한다.
윈도우즈에서 Mecab을 사용하기 위한 방법은
https://joyhong.tistory.com/127
윈도우 환경에서 mecab 설치 후 파이참(PyCharm) 에서 사용하기
윈도우에서 파이참을 사용하여 개발할 때 형태소 분석기 중 하나인 mecab을 사용하려면 몇가지 설치와 실행을 통해서 가능하다. 먼저 다운 받아야 할 것은 1. mecab-ko-msvc 2. mecab-ko-dic-msvc.zip 이렇게
joyhong.tistory.com
에서 설명한 적이 있다.
명사를 추출할 대상이 되는 파일은 이전 글에서 생성한 데이터를 활용할 것이다.
코드
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '1'
from konlpy.tag import Mecab
from tqdm import tqdm
from pykospacing import spacing
def tokenize(corpus_fname, output_fname, space=False):
tokenizer = Mecab(dicpath='C:/mecab/mecab-ko-dic')
toatal_lines = sum(1 for line in open(corpus_fname, 'r', encoding='utf-8'))
# tqdm에 입력할 total 값을 구하기 위해 사용,
with open(corpus_fname, 'r', encoding='utf-8') as f1, \
open(output_fname, 'w', encoding='utf-8') as f2:
for _, line in tqdm(enumerate(f1), total=toatal_lines):
sentence = line.replace('\n', '').strip()
if space:
sentence = spacing(line.replace('\n', '').strip())
# 띄어쓰기 교정을 수행.. 단, 시간이 오래 걸림
tokenized_sent = ' '.join(tokenizer.nouns(sentence))
f2.writelines(tokenized_sent + '\n')
tokenize('D:/Data/embedding/data/processed/processed_ratings.txt', 'D:/Data/embedding/data/tokenized/ratings_mecab.txt')
실행화면
위 코드를 실행하면 원 텍스트에서 명사를 추출하고
명사 목록을 띄어쓰기로 구분하여 나열한 결과를 확인할 수 있다.
형태소 분석기로 Mecab을 사용했는데 위의 결과는 mecab의 사용자 사전 구성에 따라 달라질 수 있으며,
위의 결과는 기본 사전만을 사용한 결과이며,
형태소 분석을 하기 전에 띄어쓰기 교정을 수행 후 분석을 한 결과이다.
참고:
위에서 사용한 코드는 https://github.com/ratsgo/embedding/blob/master/preprocess/supervised_nlputils.py 에서 가져와 일부 수정하여 사용하였습니다.