<jupyter_start><jupyter_text>We all love movies! Uma tarefa comum que usa do poder da clustetização é encotrar a similaridade de filmes, músicas, séries, etc... Muitos sistemas de recomendação (Oi Spotify e Netflix) se aproveitam dessas técnicas para oferecer uma melhor experiência para seus usuários...    Considere os filmes abaixo: São eles similares ou não, afinal? Let's find out! ^^<jupyter_code># Começamos pelo básico, importando bibliotecas e olhando para nossos dados

import numpy as np
import pandas as pd
import nltk
import matplotlib.pyplot as plt

movies = pd.read_csv('datasets/movies.csv')

movies.head()<jupyter_output><empty_output><jupyter_text>Juntando as sinopses da Wikipedia e do IMDVeja o exemplo da nossa primeira linha: The Godfather* Wikipedia: "On the day of his only daughter's wedding, <NAME>"* IMDb: "In late summer 1945, guests are gathered for the wedding reception of <NAME>'s daughter Connie"Ambas mostram informações relevates do filme, vamos então juntar elas e criar nossa feature "sinopse"<jupyter_code>movies['sinopse'] = movies['wiki_plot'].astype(str) + "\n" + movies['imdb_plot'].astype(str)<jupyter_output><empty_output><jupyter_text>Tf-idf and document similarity(https://janav.wordpress.com/2013/10/27/tf-idf-and-cosine-similarity/)<jupyter_code>from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
     'This is the first document.',
     'This document is the second document.',
     'And this is the third one.',
     'Is this the first document?'
        ]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
vectorizer.get_feature_names()
X.shape
# Criando um especifico, que leve em conta "Stop-Words"

tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                                   min_df=0.2, stop_words='english')


# load nltk's English stopwords as variable called 'stopwords'
stopwords = nltk.corpus.stopwords.words('english')
stopwords

stopwords
# Aplicando o 'vetorizador' para nossas sinopses

tfidf_matrix = tfidf_vectorizer.fit_transform([x for x in movies["sinopse"]]) 
tfidf_matrix.shape
# Clusterização

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 4, init='k-means++', random_state=1)
kmeans.fit(tfidf_matrix);
# Criando uma coluna do nosso dataset chamada cluster, com a classificação do nosso modelo
clusters = kmeans.labels_.tolist()
movies["cluster"] = clusters

# Verificando o número de filmes por cluster
movies['cluster'].value_counts() 
movies[['title', 'cluster']].head()<jupyter_output><empty_output><jupyter_text>Similaridade de textos(https://en.wikipedia.org/wiki/Cosine_similarity)<jupyter_code>from sklearn.metrics.pairwise import cosine_similarity

teste = (
    "Macbook Pro - Nvidia GPU",
    "Macbook GPU",
    "Esse texto não tem nada com nada",
    "Oi! Eu sou o Goku!",
    "texto teste"
)

vetorizador_teste = TfidfVectorizer()
matrix_vetores_teste = tfidf_vectorizer.fit_transform(teste)

cosine_similarity(matrix_vetores_teste)
# Calculate the similarity distance
similarity_distance = 1 - cosine_similarity(tfidf_matrix)

import seaborn as sns

plt.figure(figsize=(12,8))
sns.heatmap(similarity_distance, cmap='inferno');
# Criando uma hierarquia
from scipy.cluster.hierarchy import linkage, dendrogram
mergings = linkage(similarity_distance, method='complete')
# Plot the dendrogram
dendrogram_ = dendrogram(mergings,
               labels=[x for x in movies["title"]],
               leaf_rotation=90,
               leaf_font_size=16,
)

# Adjust the plot
fig = plt.gcf()
_ = [lbl.set_color('r') for lbl in plt.gca().get_xmajorticklabels()]
fig.set_size_inches(108, 21)

# Show the plotted dendrogram
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09948910997579995, 'fraction_numerical': 0.009948910997579994, 'mean_word_length': 5.169154228855722, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '319732', 'license': 'MIT', 'n_tokens_mistral': 1363, 'n_tokens_neox': 1295, 'n_words': 338, 'path': 'curso/Projects/Projeto_filmes/Find Movie Similarity from Plot Summaries/Movie_project.ipynb', 'repo_name': 'MatheusCbrl/Machine-Learning', 'size': '3737'}