Menu

Tree [36066e] master /
 History

HTTPS access


File Date Author Commit
 config.php 2012-11-09 Seval Seval [36066e] Initial commit
 functions.php 2012-11-09 Seval Seval [36066e] Initial commit
 index.php 2012-11-09 Seval Seval [36066e] Initial commit
 readme.txt 2012-11-09 Seval Seval [36066e] Initial commit
 recommendation.php 2012-11-09 Seval Seval [36066e] Initial commit
 test.sql 2012-11-09 Seval Seval [36066e] Initial commit
 words-en_US.php 2012-11-09 Seval Seval [36066e] Initial commit

Read Me

******************************************************************************
* OpenSource RECOMMENDATION ENGINE
* Date: 22.10.2012
* Developer: Seval Unver sevalunver@gmail.com
* 
* This project is used by anyone who wants to implement recommendation for his website content.
* Actually this project is written for an upload site. Also user will see the recommended uploads
* based on its title, description and tags. For example, if it is a video upload site,
* users will see the related(recommended) videos next to a video.
* Project is working on console, because we thought this script works periodically like
* one time per day. So if you want to use it like a webservice, you can modify it easily.
* The main sql algorithm is taken from Wordpress YARPP.
* 
******************************************************************************

HOW TO RUN:

1. Create a database on mysql and import test.sql into that database.

2. Put 'recommendation' folder in your host. Open config.php
--> Change your database configurations. Default values:
	DB_SERVER:localhost
	DB_USERNAME:root
	DB_PASSWORD:1234
	DB_DATABASE:test
	STORE_SESSIONS:mysql

--> You can change weight of each parameter for recommodation algorithm.
Default weights:
- title keywords        : 5
- description keywords  : 3
- Tags 			: 2

--> Also you can determine a threshold for score of related videos.
Default threshold:
- threshold : 0

3. Open console and go to your folder. Here are example commands:
$ php index.php -q all
$ php index.php -q 1
$ php index.php -j 1
$ php index.php -h

You can use these arguments:
	-q <upload_id> : to refresh cache for one upload.
	-q all         : to refresh cache for all uploads.
	-j <upload id> : to get the json obj of recommendations.
	-h             : to see the help


******************************************************************************

ADD SQL INTO DATABASE:

CREATE TABLE IF NOT EXISTS `user_uploads` (
  `upload_id` int(11) NOT NULL AUTO_INCREMENT,
  `def_title` VARCHAR(100) NOT NULL,
  `def_description` VARCHAR(400) NOT NULL,
  `def_tags` VARCHAR(400) NOT NULL,
  `deleted` int(11) NOT NULL DEFAULT '0',
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`upload_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ALTER TABLE  `user_uploads` ADD FULLTEXT  `def_title` (
`def_title`
);
ALTER TABLE  `user_uploads` ADD FULLTEXT  `def_description` (
`def_description`
);
ALTER TABLE  `user_uploads` ADD FULLTEXT  `def_tags` (
`def_tags`
);

CREATE TABLE IF NOT EXISTS `recommendation_cache` (
  `reference_id` int(11) NOT NULL,
  `upload_id` int(11) NOT NULL,
  `score` float(10,2) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY `reference_id` (`reference_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

******************************************************************************

RECOMMODATION ALGORITHM FOR user_uploads

<--- Algorithm in example --->

SELECT 6 as reference_id, upload_id, ROUND(0 
+ (MATCH (def_description) AGAINST ('test soap opera hospital')) * 3.2 
+ (MATCH (def_title) AGAINST ('General ABC')) * 2.7
+ (MATCH (def_tags) AGAINST ('capture')) * 1, 1) as score
FROM user_uploads
WHERE approval_state = 1 and deleted = 0 and upload_id != 6
group by upload_id having score >= 1 and upload_id != 0
order by score desc limit 5;


<--- Example From Wordpress YARPP: --->

SELECT 4024 as reference_id, ID,
	ROUND(0 
	+ (MATCH (post_content) AGAINST ('abshshhshshhs')) * 1 
	+ (MATCH (post_title) AGAINST ('halloween')) * 1 
	+ count(distinct if( terms.term_taxonomy_id in (598,447), terms.term_taxonomy_id, null)) *1
	+ count(distinct if( terms.term_taxonomy_id in (649,47,808,861,824), terms.term_taxonomy_id, null )) * 1,1
	) as score
FROM wp_posts
	left join wp_term_relationships as terms on ( terms.object_id - wp_posts.ID )
WHERE post_status in ( 'publish', 'static') and
	ID != '4024' and
	post_date <- '2010-10-29 16:22:51' and
	post_password - '' and
	post_type - 'post'
group by ID
having score >- 5.00 and
	bit_or(terms.term_taxonomy_id in (601)) - 0
order by score desc limit 5

*****************************************************************************
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.