File size: 3,953 Bytes
5c47ffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
574130f
5c47ffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# -*- coding: utf-8 -*-
"""Blog Title Recommendation System.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1uW25ri8AzKp9Y_YrzXbxMb2Vmi8Guel4

### Hello There!
#### Welcome to my project :)
# Blog Title Recommendation System

This model lets you feed your blog post into the system and it recommends a suitable title, subtitle, and keywords for you.

Also, You can regenerate recommendations if the first suggestions are not really to your fancy :)

So let's get started!
"""

# pip install tensorflow streamlit

# Import necessary libraries
import tensorflow as tf
import pandas as pd
import numpy as np
import streamlit as st
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import load_model

# Load data
blog_content_df = pd.read_csv('blog_content.csv')
blog_metadata_df = pd.read_csv('blog_metadata.csv')

# Merge data
blog_df = pd.merge(blog_content_df, blog_metadata_df, on='blog_id')

# Tokenize text data
tokenizer = Tokenizer(num_words=10000, oov_token='<OOV>')
tokenizer.fit_on_texts(blog_df['blog_body'])
sequences = tokenizer.texts_to_sequences(blog_df['blog_body'])
padded_sequences = pad_sequences(sequences, maxlen=200)

# Create a dictionary to map category names to category IDs
category_mapping = {'Medium Partner Program': 0, 'Artificial Intelligence': 1, 'Deep Learning': 2}  # Add more categories as needed
blog_df['category_id'] = blog_df['blog_category'].map(category_mapping)

# Define your model architecture (a simple example)
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(input_dim=10000, output_dim=128, input_length=200),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(5, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Train the model (you may need more advanced architectures and hyperparameter tuning)
model.fit(padded_sequences, blog_df['category_id'], epochs=5, validation_split=0.2)

# Save the trained model to a file
model.save('blogsalot.h5')

# Load the trained model
model = load_model('blogsalot.h5')

# Streamlit app
st.title("Blog Recommendation System")

# User input
user_input = st.text_area("Enter your blog content:")
user_category = st.selectbox("Select the main category:", ['Food', 'Science', 'Finance'])

# Recommendation options
recommendation_type = st.radio("Choose a recommendation type:", ['Title', 'Subtitle', 'Keyword Tags'])

if st.button("Generate Recommendation"):
    # Preprocess user input
    user_input_sequence = tokenizer.texts_to_sequences([user_input])
    user_input_padded = pad_sequences(user_input_sequence, maxlen=200)

    # Make a prediction
    prediction = model.predict(user_input_padded)

    if recommendation_type == 'Title':
        # Select the recommended title based on the predicted category
        recommended_title = blog_metadata_df[blog_metadata_df['category'] == user_category]['title'].iloc[0]
        st.success(f"Recommended Title: {recommended_title}")

    elif recommendation_type == 'Subtitle':
        # Select the recommended subtitle based on the predicted category
        recommended_subtitle = blog_metadata_df[blog_metadata_df['category'] == user_category]['subtitle'].iloc[0]
        st.success(f"Recommended Subtitle: {recommended_subtitle}")

    elif recommendation_type == 'Keyword Tags':
        # Select the recommended keyword tags based on the predicted category
        recommended_keywords = blog_metadata_df[blog_metadata_df['category'] == user_category][
            ['blog_keyword1', 'blog_keyword2', 'blog_keyword3', 'blog_keyword4', 'blog_keyword5']
        ].iloc[0]
        st.success(f"Recommended Keyword Tags: {', '.join(recommended_keywords)}")