Skip to content

Commit

Permalink
First commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Sherryyy00 committed Oct 3, 2024
1 parent 52c8a91 commit 20e7f0d
Show file tree
Hide file tree
Showing 212 changed files with 117,605 additions and 0 deletions.
75 changes: 75 additions & 0 deletions app1/Recommendation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import warnings
warnings.filterwarnings('ignore')

import re
import numpy as np
import pandas as pd
from heapq import nsmallest
from nltk.corpus import stopwords
from sklearn.cluster import KMeans
from nltk.tokenize import word_tokenize
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

df = pd.read_csv('Dataset/20k_data.csv',
usecols=['Title', 'University Name', 'Link', 'Details'])

# Drop null values
df = df.dropna()
df = df.reset_index(drop=True)

def Clean(text):
# Convert to lowercase
text = text.lower()

# Remove all characters which are not alphabetical or numerical
text = re.sub(r'[\W_]', ' ', text)

# Tokenization
text = word_tokenize(text)

# Filter out stop words
text = [w for w in text if not w in set(stopwords.words('english'))]

return text

def word_embeddings():
embeddings = {}
with open("glove.6B.50d.txt", 'r', encoding="utf-8") as f:
for line in f:
values = line.split()
word = values[0]
vector = np.asarray(values[1:], "float32")
embeddings[word] = vector
return embeddings

def Vectorize(text, embeddings):
# Generate vector representation
vec = np.zeros(50)
count = 0
for i in text:
try:
vec += embeddings[i]
count += 1
except:
pass
return vec/count

centroids = np.load('cluster_centers.npy', allow_pickle=True)

def recommend(text, embeddings, centroids, n):
temp = Clean(text)
temp = Vectorize(temp, embeddings)
diff = centroids - temp
dist = list(np.sum(diff**2, axis=-1) ** 0.5)
idx = [i for i in map(dist.index, nsmallest(n, dist))]

return idx

embeddings = word_embeddings()
result = recommend( my_personal_statement ,embeddings, centroids,)
idx = np.unique(result)

for i in range(len(idx)):
print('University:', df['University Name'][idx[i]])
print('Scholarship:', df['Title'][idx[i]])
print('Link to scholarship:', df['Link'][idx[i]], end='\n\n')
Empty file added app1/__init__.py
Empty file.
14 changes: 14 additions & 0 deletions app1/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.contrib import admin
from .models import *


admin.site.register(Scholarship)
admin.site.register(Profile)
admin.site.register(FieldOfInterest)
admin.site.register(Feedback)
admin.site.register(Institute)
admin.site.register(Program)
admin.site.register(TypeOfDegree)
admin.site.register(History)
admin.site.register(Country)

9 changes: 9 additions & 0 deletions app1/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.apps import AppConfig


class App1Config(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app1'

def ready(self):
import app1.signals
30 changes: 30 additions & 0 deletions app1/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from cProfile import Profile
# from curses import meta
from dataclasses import fields
from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField, PasswordChangeForm, PasswordResetForm, SetPasswordForm
from django.contrib.auth.models import User
from django.utils.translation import gettext, gettext_lazy as _
from django.contrib.auth import password_validation
from .models import *

class RegistrationForm(UserCreationForm):
password2: forms.CharField(label='Confirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email']
labels ={'email':'Email'}


class UserUpdateForm(forms.ModelForm):
email=forms.EmailField()

class Meta:
model=User
fields=['username','email','password']


class ProfileUpdateForm(forms.ModelForm):
class Meta:
model=Profile
fields=['age','dob', 'highest_qualification', 'cgpa']
Binary file not shown.
14 changes: 14 additions & 0 deletions app1/management/commands/updatemodel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.core.management.base import BaseCommand
import pandas as pd
from app1.models import Scholarship
class Command(BaseCommand):
help = 'import booms'

def add_arguments(self, parser):
pass

def handle(self, *args, **options):
df=pd.read_csv('studyportal1.csv')
for TITLE,LINKS,COUNTRY,DEGREE,APPLYDATE,DESCRIPTION in zip(df.Title,df.Links,df.Country,df.degree,df.apply_date,df.scholarship_details):
models=Scholarship(title=TITLE,link=LINKS,country=COUNTRY,degree=DEGREE,apply_date=APPLYDATE,scholarship_details=DESCRIPTION)
models.save()
124 changes: 124 additions & 0 deletions app1/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
from django.db import models
from django.contrib.auth.models import User
from PIL import Image

# history,program,typeofdegree

class Profile(models.Model):
age=models.IntegerField(null=True,blank=True)
dob=models.DateField(null=True,blank=True)
highest_qualification=models.CharField(max_length=75,null=True,blank=True) #1
cgpa=models.FloatField(null=True,blank=True,default=0.1)
nationality = models.CharField(max_length=100,null=True,blank=True)
photo = models.ImageField(default="default.jpg",upload_to="profile_pics")
user = models.OneToOneField(User,on_delete=models.CASCADE,null=True,blank=True)
email_token=models.CharField(max_length=200, null= True)
is_verified=models.BooleanField(default=False)


def __str__(self):
return f"{self.user.username}'s profile"

def save(self,*args,**kwargs):
super().save(*args,**kwargs)

img=Image.open(self.photo.path)

if img.height > 300 or img.width > 300:
remain_size=(300,300)
img.thumbnail(remain_size)
img.save(self.photo.path)



class History(models.Model):
personal_statement = models.TextField(null=True,blank=True)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)

def __str__(self):
return self.personal_statement[0:50]


class Country(models.Model):
name = models.CharField(max_length=100)

def __str__(self) -> str:
return self.name

class Scholarship(models.Model):
link=models.CharField(max_length=225, null = True,blank=True)
title=models.CharField(max_length=200, null = True,blank=True)
image_link=models.CharField( max_length=200, null = True,blank=True)
tution_structure=models.CharField(max_length=30, null=True,blank=True)
university_name=models.CharField(max_length=200, null = True,blank=True)
degree=models.CharField(max_length=30, null = True,blank=True)
subject=models.CharField(max_length=30, null = True,blank=True)
eligibility=models.CharField(max_length=30, null = True,blank=True)
country=models.CharField(max_length=30, null = True,blank=True)
apply_date=models.CharField(max_length=200,null = True,blank=True)
scholarship_details= models.TextField(null = True,blank=True)
history = models.ManyToManyField(History,blank=True)

def __str__(self) -> str:
return self.title



class Program(models.Model):
name=models.CharField(max_length=300,null=True,blank=True)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)
timestamp = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.name


class TypeOfDegree(models.Model):
name=models.CharField(max_length=300,null=True,blank=True)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)

def __str__(self):
return self.name



class FieldOfInterest(models.Model):
name=models.CharField(max_length=300)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)

def __str__(self):
return self.name


class Feedback(models.Model):
content=models.CharField(max_length=500,null=True,blank=True)
emoji = models.CharField(max_length=100,null=True,blank=True)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)
created = models.DateTimeField(null=True,blank=True,auto_now_add=True)

def __str__(self):
return self.content

class Meta:
ordering = ("-created",)


class Institute(models.Model):
name=models.CharField(max_length=300,null=True,blank=True)
city=models.CharField(max_length=30,null=True,blank=True)
state=models.CharField(max_length=30,null=True,blank=True)
profile=models.ForeignKey(Profile, on_delete=models.CASCADE,null=True,blank=True)

def __str__(self):
return self.name











14 changes: 14 additions & 0 deletions app1/signals.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile

@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
if created :
Profile.objects.create(user=instance)


@receiver(post_save,sender=User)
def save_profile(sender,instance,**kwargs):
instance.profile.save()
Loading

0 comments on commit 20e7f0d

Please sign in to comment.