ML&DL

명사 추출 - 네이버 영화리뷰

joyHong 2020. 8. 11. 23:36

이번 글에서는 네이버 영화리뷰 데이터에서 실제 리뷰 문장을 읽어 명사만 추출하고자 한다.

형태소 분석기는 Mecab 형태소 분석기를 활용할 것이다.

실행환경은 윈도우즈10에서 파이참을 사용한다.

윈도우즈에서 Mecab을 사용하기 위한 방법은 

https://joyhong.tistory.com/127

 

윈도우 환경에서 mecab 설치 후 파이참(PyCharm) 에서 사용하기

윈도우에서 파이참을 사용하여 개발할 때 형태소 분석기 중 하나인 mecab을 사용하려면 몇가지 설치와 실행을 통해서 가능하다. 먼저 다운 받아야 할 것은 1. mecab-ko-msvc 2. mecab-ko-dic-msvc.zip 이렇게

joyhong.tistory.com

에서 설명한 적이 있다.

 

명사를 추출할 대상이 되는 파일은 이전 글에서 생성한 데이터를 활용할 것이다.

 

processed_ratings.txt  파일의 일부

 

코드

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')

실행화면

위 코드를 실행하면 원 텍스트에서 명사를 추출하고

명사 목록을 띄어쓰기로 구분하여 나열한 결과를 확인할 수 있다.

ratings_mecab.txt

형태소 분석기로 Mecab을 사용했는데 위의 결과는 mecab의 사용자 사전 구성에 따라 달라질 수 있으며,

위의 결과는 기본 사전만을 사용한 결과이며, 

형태소 분석을 하기 전에 띄어쓰기 교정을 수행 후 분석을 한 결과이다.

 


참고:

위에서 사용한 코드는 https://github.com/ratsgo/embedding/blob/master/preprocess/supervised_nlputils.py 에서 가져와 일부 수정하여 사용하였습니다.