예제 #1
0
def get_images_collaborative(user, key_words, pictograms):
	def callback(images_used):
		return images_used.user

	recommended_images = pictograms
	images = Image.query(ndb.OR(Image.keyWords.keyWord.IN(key_words), Image.tags.tag.IN(key_words))).fetch(keys_only=True)

	if len(images) > 0:
		query = ImageUsed.query(ImageUsed.image.IN(images))
		if query.count() > 0:
			users = query.map(callback)
			query = RelatedUsers.query(ndb.OR(RelatedUsers.user1 == user, RelatedUsers.user2 == user)).filter(
										ndb.OR(RelatedUsers.user1.IN(users), RelatedUsers.user2.IN(users))).order(-
										RelatedUsers.relation)

			related = query.fetch(LIMIT_OF_RUSERS)
			for ru in related:
				if ru.relation > MINIMUM_RELATION:
					related_user = ru.get_related_user(user)
					images_used = ImageUsed.query(ImageUsed.user == related_user, ImageUsed.image.IN(images)).order(ImageUsed.count)
					for image_used in images_used:
						image = image_used.image
						if not (image.id() in recommended_images):
							recommended_images.append({tfg_server.BLOB: image.id(), tfg_server.LINK: image.get().link})
							break
					if len(recommended_images) > IMAGES_COLLABORATIVE:
						break

				else:
					break
	return recommended_images
예제 #2
0
def update_images_used(image, user):
	images_used = ImageUsed.get_by_id(image.id() + user.id())

	if images_used is not None:
		images_used.count += 1
	else:
		images_used = ImageUsed(image=image, user=user, count=1, id=image.id() + user.id())
		update_related_users(user, image)

	images_used.put()
예제 #3
0
def update_images_used(image, user):
    images_used = ImageUsed.get_by_id(image.id() + user.id())

    if images_used is not None:
        images_used.count += 1
    else:
        images_used = ImageUsed(image=image,
                                user=user,
                                count=1,
                                id=image.id() + user.id())
        update_related_users(user, image)

    images_used.put()
예제 #4
0
def update_related_users(user1, image):
	images_used = ImageUsed.query(ImageUsed.image == image)
	for imgUsed in images_used:
		user2 = imgUsed.user
		r_user = RelatedUsers.query(RelatedUsers.user1.IN([user1, user2]),
		                            RelatedUsers.user2.IN([user1, user2])).get()
		if r_user is not None:
			r_user.relation += 1
		else:
			r_user = RelatedUsers(user1=user1, user2=user2, relation=1)
		r_user.put()
예제 #5
0
def update_related_users(user1, image):
    images_used = ImageUsed.query(ImageUsed.image == image)
    for imgUsed in images_used:
        user2 = imgUsed.user
        r_user = RelatedUsers.query(RelatedUsers.user1.IN([user1, user2]),
                                    RelatedUsers.user2.IN([user1,
                                                           user2])).get()
        if r_user is not None:
            r_user.relation += 1
        else:
            r_user = RelatedUsers(user1=user1, user2=user2, relation=1)
        r_user.put()
예제 #6
0
def get_images_content(user):
	favorite_sites = []
	sites = {}
	images_used = ImageUsed.query(ImageUsed.user == user)
	for image_used in images_used:
		image = image_used.image.get()
		try:
			sites[image.siteLink] += math.log(image_used.count)
		except KeyError:
			sites[image.siteLink] = math.log(image_used.count)

	if len(sites) > 0:
		median = int(numpy.median(sites.values()))

		sorted_sites = sorted(sites, key=sites.__getitem__, reverse=True)

		for i in range(IMAGES_CONTENT):
			if i < len(sorted_sites) and sites[sorted_sites[i]] > 2 * median:
				favorite_sites.append(sorted_sites[i])
			else:
				break
	return favorite_sites