Commit 27763f38d96c28cabebccc046208019b940d7b1f
1 parent
4d46623e
Exists in
master
and in
1 other branch
Added configuration file example and fixed config class bugs.
Showing
2 changed files
with
64 additions
and
32 deletions
Show diff stats
src/config.py
@@ -38,9 +38,7 @@ class Config(): | @@ -38,9 +38,7 @@ class Config(): | ||
38 | self.debug = 0 | 38 | self.debug = 0 |
39 | self.verbose = 0 | 39 | self.verbose = 0 |
40 | self.output = "/dev/null" | 40 | self.output = "/dev/null" |
41 | - self.config = None | ||
42 | self.axi = "/var/lib/apt-xapian-index/index" | 41 | self.axi = "/var/lib/apt-xapian-index/index" |
43 | - self.axi_values = "/var/lib/apt-xapian-index/values" | ||
44 | self.popcon_index = os.path.expanduser("~/.app-recommender/popcon_index") | 42 | self.popcon_index = os.path.expanduser("~/.app-recommender/popcon_index") |
45 | self.popcon_dir = os.path.expanduser("~/.app-recommender/popcon_dir") | 43 | self.popcon_dir = os.path.expanduser("~/.app-recommender/popcon_dir") |
46 | self.clusters_dir = os.path.expanduser("~/.app-recommender/clusters_dir") | 44 | self.clusters_dir = os.path.expanduser("~/.app-recommender/clusters_dir") |
@@ -48,6 +46,7 @@ class Config(): | @@ -48,6 +46,7 @@ class Config(): | ||
48 | self.index_mode = "old" | 46 | self.index_mode = "old" |
49 | self.strategy = "cb" | 47 | self.strategy = "cb" |
50 | self.weight = "bm25" | 48 | self.weight = "bm25" |
49 | + self.profile_size = 50 | ||
51 | self.load_options() | 50 | self.load_options() |
52 | self.set_logger() | 51 | self.set_logger() |
53 | 52 | ||
@@ -56,21 +55,23 @@ class Config(): | @@ -56,21 +55,23 @@ class Config(): | ||
56 | Print usage help. | 55 | Print usage help. |
57 | """ | 56 | """ |
58 | print "\n [ general ]" | 57 | print "\n [ general ]" |
59 | - print " -h, --help Print this help" | ||
60 | - print " -d, --debug Set logging level to debug" | ||
61 | - print " -v, --verbose Set logging level to verbose" | ||
62 | - print " -o, --output=PATH Path to file to save output" | ||
63 | - print " -c, --config=PATH Path to configuration file" | 58 | + print " -h, --help Print this help" |
59 | + print " -d, --debug Set logging level to debug" | ||
60 | + print " -v, --verbose Set logging level to verbose" | ||
61 | + print " -o, --output=PATH Path to file to save output" | ||
62 | + print "" | ||
63 | + print " [ data sources ]" | ||
64 | + print " -a, --axi=PATH Path to apt-xapian-index" | ||
65 | + print " -p, --popconindex=PATH Path to popcon index" | ||
66 | + print " -m, --popcondir=PATH Path to popcon submissions dir" | ||
67 | + print " -u, --indexmode= 'old'|'reindex'|'cluster'|'recluster'" | ||
68 | + print " -l, --clustersdir=PATH Path to popcon clusters dir" | ||
69 | + print " -e, --medoids=k Number of medoids for clustering" | ||
64 | print "" | 70 | print "" |
65 | print " [ recommender ]" | 71 | print " [ recommender ]" |
66 | - print " -a, --axi=PATH Path to Apt-xapian-index" | ||
67 | - print " -p, --popconindex=PATH Path to popcon dedicated index" | ||
68 | - print " -m, --popcondir=PATH Path to popcon submissions dir" | ||
69 | - print " -u, --indexmode= old, reindex, cluster, recluster" | ||
70 | - print " -l, --clustersdir=PATH Path to popcon clusters dir" | ||
71 | - print " -e, --medoids=k Number of medoids for clustering" | ||
72 | - print " -w, --weight=OPTION Search weighting scheme" | ||
73 | - print " -s, --strategy=OPTION Recommendation strategy" | 72 | + print " -w, --weight=OPTION Search weighting scheme" |
73 | + print " -s, --strategy=OPTION Recommendation strategy" | ||
74 | + print " -z, --profile_size=SIZE Size of user profile" | ||
74 | print "" | 75 | print "" |
75 | print " [ weight options ] " | 76 | print " [ weight options ] " |
76 | print " trad = traditional probabilistic weighting" | 77 | print " trad = traditional probabilistic weighting" |
@@ -81,8 +82,7 @@ class Config(): | @@ -81,8 +82,7 @@ class Config(): | ||
81 | print " cbt = content-based using only tags as content " | 82 | print " cbt = content-based using only tags as content " |
82 | print " cbd = content-based using only package descriptions as content " | 83 | print " cbd = content-based using only package descriptions as content " |
83 | print " col = collaborative " | 84 | print " col = collaborative " |
84 | - #print " colct = collaborative through tags content " | ||
85 | - #print " colcp = collaborative through package descriptions content " | 85 | + print " colct = collaborative through tags content " |
86 | 86 | ||
87 | def read_option(self, section, option): | 87 | def read_option(self, section, option): |
88 | """ | 88 | """ |
@@ -102,7 +102,8 @@ class Config(): | @@ -102,7 +102,8 @@ class Config(): | ||
102 | try: | 102 | try: |
103 | self.config = ConfigParser() | 103 | self.config = ConfigParser() |
104 | self.config.read(['/etc/apprecommender/recommender.conf', | 104 | self.config.read(['/etc/apprecommender/recommender.conf', |
105 | - os.path.expanduser('~/apprecommender.rc')]) | 105 | + os.path.expanduser('~/.app_recommender.rc'), |
106 | + 'app_recommender.cfg']) | ||
106 | except (MissingSectionHeaderError), err: | 107 | except (MissingSectionHeaderError), err: |
107 | logging.error("Error in config file syntax: %s", str(err)) | 108 | logging.error("Error in config file syntax: %s", str(err)) |
108 | os.abort() | 109 | os.abort() |
@@ -110,21 +111,23 @@ class Config(): | @@ -110,21 +111,23 @@ class Config(): | ||
110 | self.debug = self.read_option('general', 'debug') | 111 | self.debug = self.read_option('general', 'debug') |
111 | self.debug = self.read_option('general', 'verbose') | 112 | self.debug = self.read_option('general', 'verbose') |
112 | self.output_filename = self.read_option('general', 'output') | 113 | self.output_filename = self.read_option('general', 'output') |
113 | - self.config = self.read_option('general', 'config') | ||
114 | - | ||
115 | - self.axi = self.read_option('recommender', 'axi') | ||
116 | - self.popcon_index = self.read_option('recommender', 'popcon_index') | ||
117 | - self.popcon_dir = self.read_option('recommender', 'popcon_dir') | ||
118 | - self.index_mode = self.read_option('recommender', 'index_mode') | ||
119 | - self.clusters_dir = self.read_option('recommender', 'clusters_dir') | ||
120 | - self.k_medoids = self.read_option('recommender', 'k_medoids') | 114 | + |
115 | + self.axi = self.read_option('data_sources', 'axi') | ||
116 | + self.popcon_index = os.path.expanduser(self.read_option('data_sources','popcon_index')) | ||
117 | + self.popcon_dir = os.path.expanduser(self.read_option('data_sources', 'popcon_dir')) | ||
118 | + self.index_mode = self.read_option('data_sources', 'index_mode') | ||
119 | + self.clusters_dir = os.path.expanduser(self.read_option('data_sources', 'clusters_dir')) | ||
120 | + self.k_medoids = self.read_option('data_sources', 'k_medoids') | ||
121 | + | ||
121 | self.weight = self.read_option('recommender', 'weight') | 122 | self.weight = self.read_option('recommender', 'weight') |
122 | self.strategy = self.read_option('recommender', 'strategy') | 123 | self.strategy = self.read_option('recommender', 'strategy') |
124 | + self.profile_size = self.read_option('recommender', 'profile_size') | ||
123 | 125 | ||
124 | - short_options = "hdvo:c:a:p:m:ul:e:w:s:" | ||
125 | - long_options = ["help", "debug", "verbose", "output=", "config=", | 126 | + short_options = "hdvo:a:p:m:ul:e:w:s:z:" |
127 | + long_options = ["help", "debug", "verbose", "output=", | ||
126 | "axi=", "popconindex=", "popcondir=", "indexmode=", | 128 | "axi=", "popconindex=", "popcondir=", "indexmode=", |
127 | - "clustersdir=", "kmedoids=", "weight=", "strategy="] | 129 | + "clustersdir=", "kmedoids=", "weight=", "strategy=", |
130 | + "profile_size="] | ||
128 | try: | 131 | try: |
129 | opts, args = getopt.getopt(sys.argv[1:], short_options, | 132 | opts, args = getopt.getopt(sys.argv[1:], short_options, |
130 | long_options) | 133 | long_options) |
@@ -144,11 +147,8 @@ class Config(): | @@ -144,11 +147,8 @@ class Config(): | ||
144 | self.verbose = 1 | 147 | self.verbose = 1 |
145 | elif o in ("-o", "--output"): | 148 | elif o in ("-o", "--output"): |
146 | self.output = p | 149 | self.output = p |
147 | - elif o in ("-c", "--config"): | ||
148 | - self.config = p | ||
149 | elif o in ("-a", "--axi"): | 150 | elif o in ("-a", "--axi"): |
150 | self.axi = p + "/index" | 151 | self.axi = p + "/index" |
151 | - self.axi_values = p + "/values" | ||
152 | elif o in ("-p", "--popconindex"): | 152 | elif o in ("-p", "--popconindex"): |
153 | self.popcon_index = p | 153 | self.popcon_index = p |
154 | elif o in ("-m", "--popcondir"): | 154 | elif o in ("-m", "--popcondir"): |
@@ -163,6 +163,8 @@ class Config(): | @@ -163,6 +163,8 @@ class Config(): | ||
163 | self.weight = p | 163 | self.weight = p |
164 | elif o in ("-s", "--strategy"): | 164 | elif o in ("-s", "--strategy"): |
165 | self.strategy = p | 165 | self.strategy = p |
166 | + elif o in ("-z", "--profile_size"): | ||
167 | + self.strategy = p | ||
166 | else: | 168 | else: |
167 | assert False, "unhandled option" | 169 | assert False, "unhandled option" |
168 | 170 |
@@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
1 | +# Config file for AppRecommender | ||
2 | + | ||
3 | +[general] | ||
4 | +# logging level | ||
5 | +debug = 0 | ||
6 | +verbose = 0 | ||
7 | +# output file | ||
8 | +output = /dev/null | ||
9 | + | ||
10 | +[data_sources] | ||
11 | +# path to apt-xapian-index | ||
12 | +axi = /var/lib/apt-xapian-index/index | ||
13 | +# old, reindex, cluster, recluster | ||
14 | +index_mode = old | ||
15 | +# path to popcon index | ||
16 | +popcon_index = ~/.app-recommender/popcon_index | ||
17 | +# path to popcon submissions dir | ||
18 | +popcon_dir = ~/.app-recommender/popcon_dir | ||
19 | +# path to popcon clusters dir | ||
20 | +clusters_dir = ~/.app-recommender/clusters_dir | ||
21 | +# number of medoids for clustering | ||
22 | +k_medoids = 100 | ||
23 | + | ||
24 | +[recommender] | ||
25 | +# recommendation strategy | ||
26 | +strategy = cb | ||
27 | +# search weighting scheme ('trad' or 'bm25') | ||
28 | +weight = bm25 | ||
29 | +# user profile size | ||
30 | +profile_size = 50 |