[자연어처리] ... 문제

유가연·2022년 2월 11일
0

TIL

목록 보기
25/32

문제1.

지시사항

IMDB dataset이 들어 있는 text.txt 파일을 확인해 봅니다. 파일 내 각 줄은 하나의 리뷰에 해당합니다.

텍스트 데이터를 불러오면서 단어가 key, 빈도수가 value로 구성된 딕셔너리 변수인 word_counter를 만드세요.

파일 내 각 줄 끝에는 새로운 줄을 의미하는 특수기호(\n)가 추가되어 있습니다. rstrip() 함수를 이용하여 각 줄 맨 끝에 있는 특수기호를 제거하세요.
split() 함수를 사용하면 각 줄을 공백 기준으로 분리하여 단어를 추출할 수 있습니다.
word_counter를 활용하여, text.txt에 들어 있는 모든 단어의 빈도수 총합을 total 변수에 저장하세요.

word_counter를 활용하여, text.txt 내 100회 이상 발생하는 단어를 up_five 리스트에 저장하세요.

word_counter = dict()

# 단어가 key, 빈도수가 value로 구성된 딕셔너리 변수를 만드세요.
with open('text.txt', 'r') as f:
    for line in f:
        for word in line.rstrip().split() : 
            if word not in word_counter :
                word_counter[word] = 1
            else :
                word_counter[word] += 1

print(word_counter)


# 텍스트 파일에 내 모든 단어의 총 빈도수를 구해보세요.
total = 0

# 텍스트 파일 내 100회 이상 발생하는 단어를 리스트 형태로 저장하세요.
up_five = list()


for word, freq in word_counter.items() :
    total += freq
    total_word = []
    if freq >= 100 :
        up_five.append(word)


print(total)
print(up_five)

문제2.

import pandas as pd
from gensim.models import Word2Vec

def load_data(filepath):
    data = pd.read_csv(filepath, delimiter=';', header=None, names=['sentence','emotion'])
    data = data['sentence']

    gensim_input = []
    for text in data:
        gensim_input.append(text.rstrip().split())
    return gensim_input

input_data = load_data("emotions_train.txt")

# word2vec 모델을 학습하세요.

## 학습을 위해서는 import한 Word2Vec에서 클래스 객체를 만들어 줘야함.
## vector_size는 신경망의 히든노드의 개수. 그리고 실제 임베딩 벡터의 차원수가 됨.
w2v_model = Word2Vec(window = 2, vector_size = 300)

## input_data로 주는 각 단어들을 정수형 인덱스 부여
w2v_model.build_vocab(input_data)

w2v_model.train(input_data, total_examples = w2v_model.corpus_count, epochs = 10)

## 모델 학습 끝

# happy와 유사한 단어를 확인하세요.
similar_happy = w2v_model.wv.most_similar('happy')
print(similar_happy)


## 만약 출력되는 유사한 단어의 개수를 조정하고 싶다면?
## similar_happy = w2v_model.wv.most_similar('happy')[:5]


# sad와 유사한 단어를 확인하세요.
similar_sad = w2v_model.wv.most_similar('sad')
print(similar_sad)

## 여기서 말하는 유사도는 코사인 유사도를 의미. 따라서 0과 1 사이로 점수화.
# 단어 good과 bad의 임베딩 벡터 간 유사도를 확인하세요.
similar_good_bad = w2v_model.wv.similarity('good', 'bad')

print(similar_good_bad)

# 단어 sad과 lonely의 임베딩 벡터 간 유사도를 확인하세요.
similar_sad_lonely = w2v_model.wv.similarity('sad', 'lonely')

print(similar_sad_lonely)

# happy의 임베딩 벡터를 확인하세요.
wv_happy = w2v_model.wv['happy']

print(wv_happy)

profile
유가연

0개의 댓글