-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.py
More file actions
166 lines (124 loc) · 5.33 KB
/
server.py
File metadata and controls
166 lines (124 loc) · 5.33 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# -*- coding: UTF-8 -*-
# Setting path variables
import sys
import pandas as pd
from configs import *
import generateWordcloud
from PreProcessing import utils
sys.path.append(PROJECT_PATH)
# Importing required libraries
from flask import Flask, render_template, request
from cfaGenerator.generator import RecommendationGenerator
VERSION = "2.0.0 Release 22031"
features, data = RecommendationGenerator.load_data(RecommendationGenerator, datapath=DATA_PATH)
users = data['userID'].unique()
app = Flask(__name__)
# HomePage
@app.route("/")
def home():
return render_template("index.html", version=VERSION, max=users.shape[0])
# ResultPage
@app.route("/result", methods=["GET", "POST"])
def result():
if request.method == "POST":
# Collecting the form responses
userdata = request.form
# Extracting the values for UserIndex and No. of recommendations
user = int(userdata.get("index"))
N = int(userdata.get("N"))
# Getting the userID from the user Index
users = data['userID'].unique()
userID = int(users[user])
# Running the model, generating recommendations and passing the list to the HTML page
model = RecommendationGenerator(userID, N)
recomm = model.generate_recommendations(features, data)
fcm = open("tmp/tmp_cossim_mat.txt", "r")
scm = fcm.read()
lcm = scm.split(',')
lcm = lcm[0:253]
fcm.close()
fri = open("tmp/tmp_recomm_indices.txt", "r")
sri = fri.read()
lri = sri.split('\n')
fri.close()
return render_template("result.html", userID=userID - 1, rec_list=recomm, cm_list=lcm, ri_list=lri)
else:
return "Sorry, there was an error."
# SearchPage
@app.route("/search")
def search():
return render_template("search.html", max=users.shape[0])
# SearchResultPage
@app.route("/searchresult", methods=["GET", "POST"])
def searchresult():
if request.method == "POST":
# Collecting the form responses
userdata = request.form
print(userdata)
if list(userdata)[0] == 'manufacturer':
course = userdata.get("manufacturer")
data = pd.read_csv(DATA_PATH, usecols=['courseID', 'userID'])
studentSearchResult = data[data['courseID'] == course]
print(studentSearchResult)
return render_template("searchresult.html", ID=course, rec_list=studentSearchResult['userID'].to_list())
else:
# Extracting the values for UserIndex and No. of recommendations
user = int(userdata.get("index"))
# Loading courseID and userID data and converting userID from type object to numeric
# 加载 courseID 和 userID 数据并将 userID 从类型对象转换为数字
data = pd.read_csv(DATA_PATH, usecols=['courseID', 'userID'])
# cols = data.columns.drop('userID')
data['userID'] = data['userID'].apply(pd.to_numeric, errors='coerce')
data = data.fillna(0)
courseSearchResult = data[data['userID'] == user]
# searchResult = searchResult.columns.drop('userID')
print(courseSearchResult)
return render_template("searchresult.html", ID=user, rec_list=courseSearchResult['courseID'].to_list())
else:
return "Sorry, there was an error in searchResult."
# SearchPortraitPage
@app.route("/searchportrait")
def searchportrait():
return render_template("/searchportrait.html", max=users.shape[0])
# UserPortraitPage
@app.route("/userportrait", methods=["GET", "POST"])
def userportrait():
if request.method == "POST":
# Collecting the form responses
userdata = request.form
# Extracting the values for UserIndex and No. of recommendations
user = int(userdata.get("index"))
# Loading courseID and userID data and converting userID from type object to numeric
# 加载 courseID 和 userID 数据并将 userID 从类型对象转换为数字
data = pd.read_csv(DATA_PATH, usecols=['courseID', 'userID', 'courseFeature'])
# cols = data.columns.drop('userID')
data['userID'] = data['userID'].apply(pd.to_numeric, errors='coerce')
# data = data.fillna(0)
data.dropna(axis=0, how='any', inplace=True)
userportrait = data[data['userID'] == user]
# userportrait = userportrait.columns.drop('userID')
print(userportrait)
featureList = userportrait['courseFeature'].to_list()
# 写入课程 features 以生成画像
f = open("features.txt", "a")
f.truncate(0)
for i in featureList:
c = i.split(',')
for ci in c:
print(ci)
f.write(ci + "\n")
f.close()
freq = {}
try:
wc = generateWordcloud.WC()
freq = wc.draw_wordcloud()
except ValueError:
print(ValueError)
return render_template("userportrait.html", userID=user, rec_list=["⚠", ValueError, "WordCould ValueError"],
freq_dict=["⚠", ValueError, "WordCould ValueError"])
# print(freq)
return render_template("userportrait.html", userID=user, rec_list=featureList, freq_dict=freq)
else:
return "Sorry, there was an error in user portrait web app."
if __name__ == "__main__":
app.run(debug=True)