root / neighbors / neartag.py

Revision 129:a87db93d93f6, 1.1 kB (checked in by Tarek Ziad?? <tarek@…>, 14 months ago)

fixed tag calculation

Line 
1import nearest
2
3class NearestByTag(object):
4
5    def __init__(self, tags):
6        self.tags = tags
7        self.db = nearest.DataSet(attrnames=tags, exclude=(-1,),)
8        self.solver = nearest.NearestNeighborLearner()
9        self.solver.train(self.db)
10
11    def add_user(self, name, tags):
12        values = []
13        for tag in self.tags:
14            if tag in tags:
15                values.append('1')
16            else:
17                values.append('0')
18        values.append(name)
19
20        self.db.add_example(values)
21
22    def neighbours(self, name, k=10):
23        distances = []
24
25        # find back the user
26        current = None
27        for user in self.db.examples:
28            user_name = user[-1]
29            if user_name == name:
30                current = user
31
32        if current is None:
33            raise Exception('user %s not found' % name)
34
35        for user in self.db.examples:
36            user_name = user[-1]
37            if user_name == name:
38                continue
39            distances.append((self.solver.distance(user, current), user_name))
40
41        distances.sort()
42        return distances[:k]
43
Note: See TracBrowser for help on using the browser.