Skip to content

Commit

Permalink
Merge branch 'master' of github.com:X-XG/WebInfo
Browse files Browse the repository at this point in the history
  • Loading branch information
ljy0ustc committed Jan 21, 2022
2 parents 1f8d36b + 45d0199 commit cf301bf
Show file tree
Hide file tree
Showing 7 changed files with 23,748 additions and 27 deletions.
40 changes: 16 additions & 24 deletions exp3/src/MusicBase/MatSim.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from math import sqrt
import numpy as np

MusicNum = 21602
Expand All @@ -6,26 +7,19 @@
output_path = '../../output/'


def JaccobiSim(list1:list, list2:list):
def JaccobiSim(list1:list, list2:list, mode = 1):
intersection = len(set(list1).intersection(set(list2)))
union = len(list1) + len(list2) - intersection
return intersection/union
# intersection = 0
# i = 0
# j = 0
# while i < len(list1) and j < len(list2):
# if list1[i] == list2[j]:
# intersection += 1
# i += 1
# j += 1
# elif list1[i] < list2[j]:
# i += 1
# else:
# j += 1
# union = len(list1) + len(list2) - intersection
# return intersection/union

def MatSimGen():
if mode == 0:
return intersection
elif mode == 0.5:
return intersection/sqrt(union)
elif mode == 1:
return intersection/union
else:
exit(-1)

def MatSimGen(mode = 1):
MapMusicID = {}
MatSim = np.zeros((MusicNum, MusicNum))

Expand All @@ -49,8 +43,8 @@ def MatSimGen():
if num %10 == 0:
print(num)
for Music2 in MapMusicID:
MatSim[Music1][Music2] = JaccobiSim(MapMusicID[Music1], MapMusicID[Music2])
np.save('MatJaccobiSim.npy', MatSim)
MatSim[Music1][Music2] = JaccobiSim(MapMusicID[Music1], MapMusicID[Music2], mode)
np.save('MatJaccobiSim'+str(mode) +'.npy', MatSim)

def MatDiagMinimize():
MatSim = np.load('MatJaccobiSim.npy')
Expand All @@ -59,7 +53,5 @@ def MatDiagMinimize():
np.save('MatJaccobiSim_DiagMinimized.npy', MatSim)

if __name__ == '__main__':
MatDiagMinimize()
# MatSimGen()


# MatDiagMinimize()
MatSimGen(mode = 1)
8 changes: 5 additions & 3 deletions exp3/src/MusicBase/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import numpy as np

MatSimPath = 'MatJaccobiSim_DiagMinimized.npy'
MatSimPath = 'MatJaccobiSim1.npy'
data_path = '../../data/DoubanMusic.txt'
result_path = 'MusicBase.txt'
result_path = 'MusicBaseMode1.txt'
MusicNum = 21602

def main(CarryOn = False):
Expand Down Expand Up @@ -37,6 +37,8 @@ def main(CarryOn = False):
continue
predict_list = []
for MusicID in range(MusicNum):
if MusicID in UserMap[UserID]:
continue
predict = 0
for UserMusic in UserMap[UserID]:
predict += MatSim[UserMusic][MusicID]
Expand All @@ -54,4 +56,4 @@ def main(CarryOn = False):
print(count)

if __name__ == '__main__':
main(CarryOn=True)
main(CarryOn=False)
27 changes: 27 additions & 0 deletions exp3/src/UserBase/MatSim.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import sys
sys.path.append('..')
from utils.getMaps import getUserMap
from utils.JacoobiSim import JaccobiSim
sys.path.append('UserBase')
import numpy as np

UserNum = 23599
data_path = '../../data/DoubanMusic.txt'
output_path = '../../output/'

def MatSimGen(mode = 1):
UserMap = getUserMap()

MatSim = np.zeros((UserNum, UserNum))

num = 0
for User1 in UserMap:
num += 1
if num %10 == 0:
print(num)
for User2 in UserMap:
MatSim[User1][User2] = JaccobiSim(UserMap[User1], UserMap[User2], mode)
np.save('MatJaccobiSim'+str(mode) +'.npy', MatSim)

if __name__ == '__main__':
MatSimGen(mode = 1)
53 changes: 53 additions & 0 deletions exp3/src/UserBase/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import sys
sys.path.append('..')
from utils.getMaps import getUserMap, getMusicMap
sys.path.append('UserBase')
import numpy as np

MatSimPath = 'MatJaccobiSim1.npy'
data_path = '../../data/DoubanMusic.txt'
result_path = 'UserBaseMode1.txt'
MusicNum = 21602
UserNum = 23599

def main(CarryOn = False):
MatSim = np.load(MatSimPath)

UserMap = getUserMap()

MusicMap = getMusicMap()

if CarryOn:
f = open(result_path, 'r')
count = len(f.readlines())
f.close()
f = open(result_path, 'a')
else:
f = open(result_path, 'w')
count = 0

for UserID in UserMap:
if UserID < count:
continue
predict_list = []
for MusicID in range(MusicNum):
if MusicID in UserMap[UserID]:
continue
predict = 0
for OtherUser in MusicMap[MusicID]:
predict += MatSim[UserID][OtherUser]
predict_list.append((predict,MusicID))
predict_list.sort(reverse=True)
f.write(str(UserID))
f.write('\t')
f.write(str(predict_list[0][1]))
for i in range(1,100):
f.write(',')
f.write(str(predict_list[i][1]))
f.write('\n')
count += 1
if count % 1 == 0:
print(count)

if __name__ == '__main__':
main(CarryOn=True)
13 changes: 13 additions & 0 deletions exp3/src/utils/JacoobiSim.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from math import sqrt

def JaccobiSim(list1:list, list2:list, mode = 1):
intersection = len(set(list1).intersection(set(list2)))
union = len(list1) + len(list2) - intersection
if mode == 0:
return intersection
elif mode == 0.5:
return intersection/sqrt(union)
elif mode == 1:
return intersection/union
else:
exit(-1)
35 changes: 35 additions & 0 deletions exp3/src/utils/getMaps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
def getUserMap(data_path = '../../data/DoubanMusic.txt'):
UserMap = {}

f = open(data_path, 'r')
lines = f.readlines()
f.close()

for line in lines:
temp = line.split()
UserID = int(temp[0])
for pair in temp[1:]:
MusicID = int(pair.split(',')[0])
if UserID not in UserMap:
UserMap[UserID] = [MusicID]
else:
UserMap[UserID].append(MusicID)
return UserMap

def getMusicMap(data_path = '../../data/DoubanMusic.txt'):
MapMusicID = {}

f = open(data_path, 'r')
lines = f.readlines()
f.close()

for line in lines:
temp = line.split()
UserID = int(temp[0])
for pair in temp[1:]:
MusicID = int(pair.split(',')[0])
if MusicID not in MapMusicID:
MapMusicID[MusicID] = [UserID]
else:
MapMusicID[MusicID].append(UserID)
return MapMusicID
Loading

0 comments on commit cf301bf

Please sign in to comment.