user.py
2.27 KB
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
#!/usr/bin/python
# AppRecommender - A GNU/Linux application recommender
#
# Copyright (C) 2010 Tassia Camoes <tassia@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import commands
import xapian
class FilterTag(xapian.ExpandDecider):
def __call__(self, term):
"""
Return true if the term is a tag, else false
"""
return term[:2] == "XT"
class User:
""" """
def __init__(self,item_score,user_id=0,demo_profile=0):
""" """
self.id = user_id
self.item_score = item_score
self.demo_profile = demo_profile
def items(self):
return self.item_score.keys()
def axi_tag_profile(self,xapian_db,profile_size):
terms = []
for item in self.items():
terms.append("XP"+item)
query = xapian.Query(xapian.Query.OP_OR, terms)
enquire = xapian.Enquire(xapian_db)
enquire.set_query(query)
rset = xapian.RSet()
for m in enquire.get_mset(0,30000): #consider all matches
rset.add_document(m.docid)
eset = enquire.get_eset(profile_size, rset, FilterTag())
profile = []
for res in eset:
profile.append(res.term)
#print "%.2f %s" % (res.weight,res.term[2:])
return profile
def debtags_tag_profile(self,debtags_db,profile_size):
return debtags_db.get_relevant_tags(self.items(),profile_size)
class LocalSystem(User):
""" """
def __init__(self):
item_score = {}
dpkg_output = commands.getoutput('/usr/bin/dpkg --get-selections')
for p in dpkg_output.replace('install','\t').split():
item_score[p] = 1
User.__init__(self,item_score)