뮤지컬 추천 사이트6(FINAL_PROJECT)

ppippi·2023년 11월 14일
0
post-thumbnail

문제 발견

문제 : 특정 장르에 치우쳐져 있음


해결 방법

'사랑'을 더 세분화하기

추가한 장르
'사람': 10 '친구': 20 '아이': 48

결과

이렇게 사랑이라는 장르가 더욱 세분화 된것을 확인 할 수 있다.
이에 따른 최종장르 11개는 다음과 같다.
'웃음'(코미디) : 890 '슬픔'(감정) : 315 '사랑'(로맨스): 4 '사람': 10 '친구': 20 '아이': 48 '마법'(판타지): 469 '공포'(스릴러) : 829 '과거'(역사) : 249 '오페라': 964 '예술': 550

더욱 세분화한 장르11개를 가지고 지난시간 실행했던 코드를 세분화한 장르 11개로 다시 실행해준다.
장르가 저장된 파일은 mock_test_csv/mock_type_11.csv에 있으며 해당코드는 branch 0.0.3/work2vec_test → Model_test/Word2Vec_genre_3.ipynb에 있습니다.


c. 줄거리 간 교집합되는 장르들을 위해 각 줄거리의 장르태그를 3개로 세분화

# 장르 할당
for index, row in vector_data.iterrows():
    # 현재 영화의 시놉시스 가져오기
    synopsis = row['synopsis']
    
    # 현재 영화에 할당된 장르를 저장할 세트 초기화 (중복 방지)
    assigned_genres = set()

    # 선택된 장르 리스트를 순회하며 시놉시스에 해당 장르가 있는지 확인
    for genre in selected_genre:
        if not pd.isna(synopsis) and genre in synopsis:
            assigned_genres.add(genre)  # 세트에 장르 추가

    # 할당된 장르가 3개 미만이고 시놉시스가 NaN이 아닌 경우
    if len(assigned_genres) < 3 and not pd.isna(synopsis):
        # 유사한 단어가 있는 장르를 찾기 위한 변수 초기화
        max_similar_genres = set()
        max_similarity = 0

        # 각 장르와 그에 해당하는 유사한 단어를 순회하며 최대 유사도를 찾음
        for genre, similar_words in similar_words_by_genre.items():
            # 이미 할당된 장르가 아닌 경우에만 처리
            if genre not in assigned_genres:
                for word, similarity in similar_words:
                    # 시놉시스에 해당 단어가 있고, 유사도가 현재 최대 유사도보다 큰 경우
                    if word in synopsis and similarity > max_similarity:
                        max_similar_genres = {genre}
                        max_similarity = similarity

        # 최대 유사도를 가진 장르를 할당된 장르에 추가
        assigned_genres.update(max_similar_genres)

    # 최대 3개까지만 저장
    assigned_genres = list(assigned_genres)[:3]

    # 할당된 장르를 해당하는 열에 저장
    for i, genre in enumerate(assigned_genres):
        vector_data.at[index, f'tag{i + 1}'] = genre

    # 할당된 장르가 2개 미만인 경우 tag2를 NaN으로 설정
    if len(assigned_genres) < 2:
        vector_data.at[index, 'tag2'] = 'NaN'
    
    # 할당된 장르가 3개 미만인 경우 tag3를 NaN으로 설정
    if len(assigned_genres) < 3:
        vector_data.at[index, 'tag3'] = 'NaN'

# 결과 확인
print(vector_data[['title', 'synopsis', 'tag1', 'tag2', 'tag3']])


결과를 보면 정상적으로 0번 인덱스의 행의 줄거리와 유사한 단어가 있는 장르가 교집합에 의해 tag 3개가 모두 채워진 것을 볼 수 있으며 그에 비해 인덱스 1번은 장르와 교집한인 것이 2개이므로 tag3은 NaN으로 채워진 것을 볼 수 있다.


branch: 0.0.3/work2vec에 내용에 해당하는 코드파일이 포함되어있으니 참고바랍니다.


tmi: branch명을 word2vec로 한다는걸 너무 자연스럼게 work2vec로 하고 너무 많은일들을 해서 그냥..흐린눈하기로 했다..^^ 다음부터는 정신차리고 제대로 생성하기!!


프로젝트 관련 코드는 아래의 주소에서 확인할 수 있습니다
i-Five

1개의 댓글

comment-user-thumbnail
2023년 11월 14일

정보 감사합니다.

답글 달기