CoolFace
Apppublic

RaviRaj988/Entertainment_Engine_Content_based_recommender_system

sourceHugging Faceapache-2.0updated 4y agoView on Hugging Face
0likes
app.py290 linesDownload Raw Back to root
1import re2import pandas as pd3import streamlit as st4import requests5import random6import nltk7nltk.download('all') 8from nltk.corpus import stopwords9import cloudpickle10import pickle11from urllib.request import urlopen12 13 14final_df = pd.read_csv('final_df.csv')15global similarity_bert16global similarity_bag_of_Words17global similarity_with_tf_idf_word_2_vec18global similarity_with_word_2_vec19global tf_idf_similarities20similarity = {'similarity_bert':'',21              'similarity_bag_of_Words':'',22              'tf_idf_similarities':'',23              'similarity_with_word_2_vec':'',24              'similarity_with_tf_idf_word_2_vec':''}25 26model_sentiment = pickle.load(open('model_sentiment.pkl','rb'))27tf_idf_vectorizer = pickle.load(open('tf_idf_vectorizer.pkl','rb'))28 29 30def find_closest(text):31    text = text.strip()32    new_text = text.split(' ')33    for word in new_text[:]:34        if word in stopwords.words('english'):35            new_text.remove(word)36    index = random.randint(0,len(new_text)-1)37    text = new_text[index]38    spliteer = final_df['title_y'].str.split(' ')39    i = 040    for val in spliteer.to_list():41        if text in val:42            break43        i+=144    return i45    46def recommend(movie,model):47    result = []48    movie = movie.lower()49    titles = final_df['title_y'].str.lower().to_list()50 51    if movie in titles:52        index = final_df.loc[final_df['title_y'].str.lower() == movie].index[0]53    else:54        index = find_closest(movie)55    if index==4800:56        raise ValueError('Please Enter a correct movie name so that we can recommend properly Please recheck')57    if(model == 'bert'):58        similarity_bert = similarity['similarity_bert']59        distances = sorted(list(enumerate(similarity_bert[index])),reverse=True,key = lambda x: x[1])60    61    elif(model=='bag_of_words'):62        st.write(similarity['similarity_bag_of_Words'])63        similarity_bag_of_Words = similarity['similarity_bag_of_Words']64        distances = sorted(list(enumerate(similarity_bag_of_Words[index])), reverse=True,key = lambda x: x[1])65    66    elif(model=='tf-idf'):67        tf_idf_similarities = similarity['tf_idf_similarities']68        distances = sorted(list(enumerate(tf_idf_similarities[index])), reverse=True,key = lambda x: x[1])69    70    elif(model=='word2vec'):71        similarity_with_word_2_vec = similarity['similarity_with_word_2_vec']72        distances = sorted(list(enumerate(similarity_with_word_2_vec[index])), reverse=True,key = lambda x: x[1])73    74    elif(model=='tf-idf+word2vec'):75        similarity_with_tf_idf_word_2_vec = similarity['similarity_with_tf_idf_word_2_vec']76        distances = sorted(list(enumerate(similarity_with_tf_idf_word_2_vec[index])), reverse=True,key = lambda x: x[1])77 78    for i in distances[0:6]:79        result.append([final_df.iloc[i[0]].id, final_df.iloc[i[0]].title_y])80    return result81 82def main():83    st.set_page_config(layout="wide")84    html_footer = """85    <style>86    .footer {87        position: fixed;88        bottom: 0%;89        left: 0%;90        margin: 0px, 0px, 0px, 0px;91        text-align: center;92        width: 99%;93    }94    </style>95    <div class = 'footer'>96    <p>Copyright(c)Tushar Nautiyal 2022</p>97    </div>98    99    """100    st.markdown(html_footer,unsafe_allow_html=True)101    hide_footer_style = """102    <style>103    .css-2ykyy6 { 104        visibility: hidden;105    }106    </style> 107    """108    st.markdown(hide_footer_style, unsafe_allow_html=True)109    110    #We will use session states. This will help in saving models once loaded so that for one instance you don't have to do downloads again. 111        112        113    with st.form("my_form"):114        st.title('Movie Recommeder System')115        st.text('You Can Switch Between models to see the performance of recommendation')116        st.markdown('We have used Bag of Words ,**BERT** specifically **(multi-qa-MiniLM-L6-cos-v1)** , **TF-IDF**, and implemented **TF-IDF + Word2Vec** Model Check repo to understand better. By Default the Flow is in BERT if you want to swith select a model from below. This recommender system is a content base recommendation system.')117        model = st.selectbox('Select A Model Procedure',('Bert', 'Bag of Words','TF-IDF','Word2Vec','TF-IDF + Word2Vec'))118        query = st.text_input('Enter Any Movie Name or something related to that movie')119        submitted = st.form_submit_button("RECOMMEND")120        121        if st.session_state.get('button') != True:122             st.session_state['button'] = submitted # Saved the state123 124        125    if st.session_state['button'] == True:126        if(model=='Bert'):127            model= 'bert'128            if 'similarity_bert' not in st.session_state:129                with st.spinner('Wait Model is Loading.....Till Then How much you like movies'):130                    st.session_state.similarity_bert = ''131                    similarity['similarity_bert'] = cloudpickle.load(urlopen('https://drive.google.com/uc?export=download&id=131DguHzk9ZF6AGNozHRawwdFupgycqUT'))132                    st.session_state.similarity_bert = similarity['similarity_bert']133            else:134                similarity['similarity_bert'] = st.session_state['similarity_bert']135            st.success(f'Done!')136            137 138        elif(model == 'Bag of Words'):139            model = 'bag_of_words'140            141            if 'similarity_bag_of_Words' not in st.session_state:142                with st.spinner('Wait Model is Loading.....Till Then How much you like movies'):143                    st.session_state.similarity_bag_of_Words = ''144                    similarity['similarity_bag_of_Words'] = cloudpickle.load(urlopen('https://drive.google.com/uc?export=download&id=1o7pWZfaku_43do0beNfOI6Pz9JeAM6n3&confirm=t&uuid=ccc39f37-f727-49fb-8a30-c9214b30e5f3'))145                    st.session_state['similarity_bag_of_Words'] = similarity['similarity_bag_of_Words']146            else:147               similarity['similarity_bag_of_Words'] = st.session_state['similarity_bag_of_Words']148            st.success(f'Done!')149 150                    151        elif(model == 'TF-IDF'):152            model = 'tf-idf'153            154            if 'tf_idf_similarities' not in st.session_state:155                with st.spinner('Wait Model is Loading.....Till Then How much you like movies'):156                    st.session_state.tf_idf_similarities = ''157                    similarity['tf_idf_similarities'] = cloudpickle.load(urlopen("https://drive.google.com/uc?export=download&id=1ZcL60svASwVrLoAgBnj43tM8i9IkES_E&confirm=t&uuid=e38591c2-777b-490e-a574-700b33ea642e"))158                    st.session_state.tf_idf_similarities = similarity['tf_idf_similarities']159            else:160                similarity['tf_idf_similarities'] = st.session_state.tf_idf_similarities161            st.success(f'Done!')162 163        elif(model == 'TF-IDF + Word2Vec'):164            model = 'tf-idf+word2vec'165            if 'similarity_with_tf_idf_word_2_vec' not in st.session_state:166                with st.spinner('Wait Model is Loading.....Till Then How much you like movies?'):167                    st.session_state.similarity_with_tf_idf_word_2_vec = ''168                    similarity['similarity_with_tf_idf_word_2_vec'] = cloudpickle.load(urlopen("https://drive.google.com/uc?export=download&id=1Ykoqty6n9uXn1oBXRCjuFr6mnqUuIVq6&confirm=t&uuid=12d331b1-5ff7-4c7b-92eb-884dfd7525ab"))169                    st.session_state.similarity_with_tf_idf_word_2_vec = similarity['similarity_with_tf_idf_word_2_vec']170            else:171                similarity['similarity_with_tf_idf_word_2_vec'] = st.session_state.similarity_with_tf_idf_word_2_vec172            st.success(f'Done!')173 174                175        elif(model == 'Word2Vec'):176            model = 'word2vec'177            if 'similarity_with_word_2_vec' not in st.session_state:178                with st.spinner('Wait Model is Loading.....Till Then How much you like movies'):179                    st.session_state.similarity_with_word_2_vec = ''180                    similarity['similarity_with_word_2_vec'] = cloudpickle.load(urlopen("https://drive.google.com/uc?export=download&id=1dpWQotH3TEPVyJTaBonwTILY3DCtTodb"))181                    st.session_state.similarity_with_word_2_vec = similarity['similarity_with_word_2_vec']182            else:183                similarity['similarity_with_word_2_vec'] = st.session_state.similarity_with_word_2_vec184            st.success(f'Done!')185 186        output_images = []187        output_names = []188        if query!=None:189            res = recommend(query,model)190        if len(res)<=1:191            raise TypeError("Hi Looks Like The Query You have entered iam not able to find Please Try Again dont add spaces during the start of the text or Don't Add special characters like @ - # etc")192        for ele in res:193            image = requests.get(f'https://api.themoviedb.org/3/movie/{ele[0]}/images?api_key=81428e7817728a742c8e842120989817')194            data = image.json()195            data = data['backdrops'][0]['file_path']196            output_images.append('http://image.tmdb.org/t/p/w500/'+data)197            output_names.append(ele[1])198        199        col1, col2, col3 = st.columns(3)200        with col1:201           st.image(output_images[0])202           st.markdown(output_names[0].upper())203           review = st.text_input(f"How much you liked the movie {output_names[0]}",key='review1')204           btn0 = st.button('submit',key = 'btn0')205           if btn0:206                review = re.sub('[^a-zA-Z0-9 ]','',review)207                review = tf_idf_vectorizer.transform([review])208                ans = model_sentiment.predict(review)209                if  ans == 0:210                    review = 'Thanks for your positive review'211                else:212                    review = 'Sorry for your negative review'213                st.write(review)214        with col2:215           st.image(output_images[1])216           st.markdown(output_names[1].upper())217           review = st.text_input(f"How much you liked the movie {output_names[1]}",key='review2')218           btn1 = st.button('submit',key = 'btn1')219           if btn1:220                review = re.sub('[^a-zA-Z0-9 ]','',review)221                review = tf_idf_vectorizer.transform([review])222                ans = model_sentiment.predict(review)223                if  ans == 0:224                    review = 'Thanks for your positive review'225                else:226                    review = 'Sorry for your negative review'227                st.write(review)228        229        with col3:230           st.image(output_images[2])231           st.markdown(output_names[2].upper())232           review = st.text_input(f"How much you liked the movie {output_names[2]}",key='review3')233           btn2 = st.button('submit',key = 'btn2')234           if btn2:235                review = re.sub('[^a-zA-Z0-9 ]','',review)236                review = tf_idf_vectorizer.transform([review])237                ans = model_sentiment.predict(review)238                if  ans == 0:239                    review = 'Thanks for your positive review'240                else:241                    review = 'Sorry for your negative review'242                st.write(review)243        244        col4, col5, col6 = st.columns(3)245        246        with col4:247           st.image(output_images[3])248           st.markdown(output_names[3].upper())249           review = st.text_input(f"How much you liked the movie {output_names[3]}",key='review4')250           if st.button('submit',key='btn3'):251                review = re.sub('[^a-zA-Z0-9 ]','',review)252                review = tf_idf_vectorizer.transform([review])253                ans = model_sentiment.predict(review)254                if  ans == 0:255                    review = 'Thanks for your positive review'256                else:257                    review = 'Sorry for your negative review'258                st.write(review)259        260        with col5:261           st.image(output_images[4])262           st.markdown(output_names[4].upper())263           review = st.text_input(f"How much you liked the movie {output_names[4]}",key='review5')264           if st.button('submit',key='btn4'):265                review = re.sub('[^a-zA-Z0-9 ]','',review)266                review = tf_idf_vectorizer.transform([review])267                ans = model_sentiment.predict(review)268                if  ans == 0:269                    review = 'Thanks for your positive review'270                else:271                    review = 'Sorry for your negative review'272                st.write(review)273        274        with col6:275           st.image(output_images[5])276           st.markdown(output_names[5].upper())277           review = st.text_input(f"How much you liked the movie {output_names[5]}",key='review6')278           if st.button('submit',key = 'btn5'):279                review = re.sub('[^a-zA-Z0-9 ]','',review)280                review = tf_idf_vectorizer.transform([review])281                ans = model_sentiment.predict(review)282                if  ans == 0:283                    review = 'Thanks for your positive review'284                else:285                    review = 'Sorry for your negative review'286                st.write(review)287        288 289if __name__ == '__main__':290    main()