-
Notifications
You must be signed in to change notification settings - Fork 11
/
main.go
97 lines (80 loc) · 2.24 KB
/
main.go
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
package main
import (
"fmt"
"os"
"strconv"
"github.com/RedisLabs/redis-recommend/redrec"
"github.com/docopt/docopt-go"
)
var rr *redrec.Redrec
var err error
func main() {
usage := `
Usage:
redis-recommend rate <user> <item> <score>
redis-recommend suggest <user> [--results=<n>]
redis-recommend get-probability <user> <item>
redis-recommend batch-update [--results=<n>]
redis-recommend -h | --help
redis-recommend --version
Options:
-h --help Show this screen.
--version Show version.
--results=<n> Num of suggestions to get [default: 100]`
arguments, _ := docopt.Parse(usage, nil, true, "redis-recommend", false)
rr, err = redrec.New("redis://localhost:6379")
chekErrorAndExit(err)
if arguments["rate"].(bool) {
user := arguments["<user>"].(string)
item := arguments["<item>"].(string)
score, err := strconv.ParseFloat(arguments["<score>"].(string), 64)
chekErrorAndExit(err)
rate(user, item, score)
}
if arguments["get-probability"].(bool) {
user := arguments["<user>"].(string)
item := arguments["<item>"].(string)
getProbability(user, item)
}
if arguments["suggest"].(bool) {
user := arguments["<user>"].(string)
results, err := strconv.Atoi(arguments["--results"].(string))
chekErrorAndExit(err)
suggest(user, results)
}
if arguments["batch-update"].(bool) {
results, err := strconv.Atoi(arguments["--results"].(string))
chekErrorAndExit(err)
update(results)
}
}
func chekErrorAndExit(err error) {
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
rr.CloseConn()
os.Exit(1)
}
}
func rate(user string, item string, score float64) {
fmt.Printf("User %s ranked item %s with %.2f\n", user, item, score)
err := rr.Rate(item, user, score)
chekErrorAndExit(err)
}
func getProbability(user string, item string) {
score, err := rr.CalcItemProbability(item, user)
chekErrorAndExit(err)
fmt.Printf("%s %s %.2f\n", user, item, score)
}
func suggest(user string, max int) {
fmt.Printf("Getting %d results for user %s\n", max, user)
rr.UpdateSuggestedItems(user, max)
s, err := rr.GetUserSuggestions(user, max)
chekErrorAndExit(err)
fmt.Println("results:")
fmt.Println(s)
}
func update(max int) {
fmt.Printf("Updating DB\n")
err := rr.BatchUpdateSimilarUsers(max)
chekErrorAndExit(err)
}