...
[iramuteq] / OptionAlceste.py
1 # -*- coding: utf-8 -*-
2 #Author: Pierre Ratinaud
3 #Copyright (c) 2008-2009 Pierre Ratinaud
4 #Lisense: GNU/GPL
5
6 import wx
7 import shutil
8 from KeyFrame import AlcOptFrame
9 from chemins import ConstructConfigPath
10 from functions import DoConf
11
12
13
14 class OptionAlc(wx.Dialog):
15     def __init__(self, parent, parametres, *args, **kwds):
16         kwds['style'] = wx.DEFAULT_DIALOG_STYLE
17         wx.Dialog.__init__(self, parent, *args, **kwds)
18         self.parent = parent
19         self.parametres = parametres
20         self.DictPath = parametres['pathout']
21         self.AlcesteConf = parametres
22         self.choose = False
23         
24         #self.label_1 = wx.StaticText(self, -1, u"Lemmatisation")
25         #self.radio_1 = wx.RadioBox(self, -1, u"", choices=['oui', 'non'], majorDimension=0, style=wx.RA_SPECIFY_ROWS)
26
27         self.label_12 = wx.StaticText(self, -1, u"Classification")
28         self.radio_box_2 = wx.RadioBox(self, -1, u"", choices=[u"double sur UC", u"simple sur UCE", u"simple sur UCI"], majorDimension=0, style=wx.RA_SPECIFY_ROWS) #, u"simple sur UCE (non implemente)"
29         self.label_2 = wx.StaticText(self, -1, u"taille uc 1")
30         self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "formes actives",size = (100,30), min=0, max=100)
31         self.label_3 = wx.StaticText(self, -1, u"taille uc 2")
32         self.spin_ctrl_2 = wx.SpinCtrl(self, -1, "",size = (100,30), min=0, max=100)
33         self.lab_nbcl = wx.StaticText(self, -1, u"nombre de classes terminales de la phase 1")
34         self.spin_nbcl = wx.SpinCtrl(self, -1, "",size = (100,30), min=2, max=100)
35         txt = """Nombre minimum d'uce par classe
36 (0 = automatique)"""
37         self.label_7 = wx.StaticText(self, -1, txt)
38         self.spin_ctrl_4 = wx.SpinCtrl(self, -1, "",size = (100,30), min=0, max=1000)       
39         txt = u"""Fréquence minimum d'une forme
40 analysée (2 = automatique)"""
41         self.label_8 = wx.StaticText(self, -1, txt)
42         self.spin_ctrl_5 = wx.SpinCtrl(self, -1, "",size = (100,30), min=2, max=1000)
43         self.label_max_actives =  wx.StaticText(self, -1, u"Nombre maximum de formes analysées")
44         self.spin_max_actives = wx.SpinCtrl(self, -1, "",size = (100,30), min=20, max=10000)
45         #self.label_4 = wx.StaticText(self, -1, u"Configuration \ndes clés d'analyse")
46         #self.button_5 = wx.Button(self, wx.ID_PREFERENCES, "")
47         self.button_1 = wx.Button(self, wx.ID_CANCEL, "")
48         self.button_2 = wx.Button(self, wx.ID_DEFAULT, u"Valeurs par défaut")
49         self.button_4 = wx.Button(self, wx.ID_OK, "")
50         self.static_line_1 = wx.StaticLine(self, -1)
51
52         self.__set_properties()
53         self.__do_layout()
54
55         #self.Bind(wx.EVT_BUTTON, self.OnKeyPref, self.button_5)
56         self.Bind(wx.EVT_BUTTON, self.OnDef, self.button_2)
57         
58     def __set_properties(self):
59         self.SetTitle("Options")
60         #lang = self.AlcesteConf.get('ALCESTE', 'lang')
61         #self.choice_dict.SetSelection(self.langues.index(lang))
62         #DefaultLem = self.parametres['lem']
63         #if DefaultLem :
64         #    self.radio_1.SetSelection(0)
65         #else:
66         #    self.radio_1.SetSelection(1)
67         self.radio_box_2.SetSelection(int(self.parametres['classif_mode']))
68         self.spin_ctrl_1.SetValue(int(self.parametres['tailleuc1']))
69         self.spin_ctrl_2.SetValue(int(self.parametres['tailleuc2']))
70         self.spin_ctrl_4.SetValue(int(self.parametres['mincl']))
71         self.spin_ctrl_5.SetValue(int(self.parametres['minforme']))
72         self.spin_ctrl_5.Disable()
73         self.spin_max_actives.SetValue(int(self.parametres['max_actives']))
74         self.spin_nbcl.SetValue(int(self.parametres['nbcl_p1']))
75
76     def __do_layout(self):
77         sizer_1 = wx.BoxSizer(wx.VERTICAL)
78         sizer_2 = wx.BoxSizer(wx.VERTICAL)
79         grid_sizer2 = wx.FlexGridSizer(0, 2, 0, 0)
80         grid_button = wx.FlexGridSizer(1, 3, 0, 0)
81         
82         #grid_sizer2.Add(self.label_dict, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
83         #grid_sizer2.Add(self.choice_dict, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
84
85         #grid_sizer2.Add(self.label_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
86         #grid_sizer2.Add(self.radio_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
87         #grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
88         #grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
89
90         grid_sizer2.Add(self.label_12, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
91         grid_sizer2.Add(self.radio_box_2, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
92         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
93         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
94
95         grid_sizer2.Add(self.label_2, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
96         grid_sizer2.Add(self.spin_ctrl_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
97         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
98         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
99
100         grid_sizer2.Add(self.label_3, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
101         grid_sizer2.Add(self.spin_ctrl_2, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
102         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
103         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
104
105         grid_sizer2.Add(self.lab_nbcl, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
106         grid_sizer2.Add(self.spin_nbcl, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
107         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
108         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
109
110         grid_sizer2.Add(self.label_7, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
111         grid_sizer2.Add(self.spin_ctrl_4, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
112         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
113         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
114
115         grid_sizer2.Add(self.label_8, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
116         grid_sizer2.Add(self.spin_ctrl_5, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
117         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
118         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
119
120         grid_sizer2.Add(self.label_max_actives, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
121         grid_sizer2.Add(self.spin_max_actives, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
122         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
123         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
124        
125         #grid_sizer2.Add(self.label_4, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
126         #grid_sizer2.Add(self.button_5, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
127         #grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
128         #grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
129         
130         grid_button.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
131         grid_button.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
132         grid_button.Add(self.button_4, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
133         sizer_2.Add(grid_sizer2, 3, wx.EXPAND, 0)
134         sizer_2.Add(grid_button, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
135         sizer_1.Add(sizer_2, 0, wx.EXPAND, 0)
136         self.SetSizer(sizer_1)
137         sizer_1.Fit(self)
138         self.Layout()
139
140     def OnKeyPref(self, event): 
141         self.choose = True
142         dial = AlcOptFrame(self.parent, self)
143         dial.CenterOnParent()
144         val = dial.ShowModal()
145     
146     def OnDef(self, event):
147         ConfOri = ConstructConfigPath(self.parent.AppliPath, user=False)
148         ConfUser = ConstructConfigPath(self.parent.UserConfigPath)
149         shutil.copyfile(ConfOri['alceste'], ConfUser['alceste'])
150         corpus = self.parametres['corpus']
151         pathout = self.parametres['pathout']
152         self.parametres = DoConf(self.parent.ConfigPath['alceste']).getoptions('ALCESTE')
153         self.parametres['corpus'] = corpus
154         self.parametres['pathout'] = pathout
155         self.__set_properties()
156         
157 ###################################################################################@
158
159 class OptionPam(wx.Dialog):
160     def __init__(self, parent, *args, **kwds):
161         kwds['style'] = wx.DEFAULT_DIALOG_STYLE
162         wx.Dialog.__init__(self, *args, **kwds)
163         self.parent = parent
164         self.DictPath = parent.DictPath
165         self.pamconf = parent.pamconf
166         self.type = parent.type
167         self.choose = False
168         
169         self.label_1 = wx.StaticText(self, -1, u"Lemmatisation")
170         self.radio_1 = wx.RadioBox(self, -1, u"", choices=['oui', 'non'], majorDimension=0, style=wx.RA_SPECIFY_ROWS)
171         #self.label_exp = wx.StaticText(self, -1, u"Utiliser le dict. des expressions")
172         #self.radio_exp =  wx.RadioBox(self, -1, u"", choices=['oui', 'non'], majorDimension=0, style=wx.RA_SPECIFY_ROWS)
173         txt = u"""Methode de construction
174 de la matrice des distances"""
175         self.label_12 = wx.StaticText(self, -1, txt)
176         self.distance = [u"binary", u"euclidean", u"maximum", u'manhattan', u'canberra', u'minkowski']
177         self.choice_1 =  wx.Choice(self, -1, (100,50), choices=self.distance)
178         self.label_13 = wx.StaticText(self, -1, u'Analyse')
179         self.cltype = [u'k-means (pam)', u'fuzzy (fanny)']
180         self.radio_box_3 = wx.RadioBox(self, -1, u"", choices=self.cltype, majorDimension=0, style=wx.RA_SPECIFY_ROWS)
181         self.label_classif = wx.StaticText(self, -1, u"Classification")
182         self.radio_box_classif = wx.RadioBox(self, -1, u"", choices=[u"sur UCE", u"sur UCI"], majorDimension=0, style=wx.RA_SPECIFY_ROWS) 
183         #self.label_2 = wx.StaticText(self, -1, "taille uc")
184         #self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "formes actives", min=0, max=100)
185         self.label_max_actives =  wx.StaticText(self, -1, u"Nombre maximum de formes analysées")
186         self.spin_max_actives = wx.SpinCtrl(self, -1, "",size = (100,30), min=20, max=10000)
187         txt = """Nombre de formes par uce
188 (0 = automatique)"""
189         self.label_6 = wx.StaticText(self, -1, txt)
190         self.spin_ctrl_3 = wx.SpinCtrl(self, -1, "", size = (100,30), min=0, max=100000)
191         txt = "Nombre de classes"
192         self.label_7 = wx.StaticText(self, -1, txt)
193         self.spin_ctrl_4 = wx.SpinCtrl(self, -1, "", size = (100,30), min=0, max=1000)        
194         self.label_4 = wx.StaticText(self, -1, u"Configuration \ndes clés d'analyse")
195         self.button_5 = wx.Button(self, wx.ID_PREFERENCES, "")
196         self.button_1 = wx.Button(self, wx.ID_CANCEL, "")
197         self.button_2 = wx.Button(self, wx.ID_DEFAULT, u"Valeurs par défaut")
198         self.button_4 = wx.Button(self, wx.ID_OK, "")
199         self.static_line_1 = wx.StaticLine(self, -1)
200
201         self.__set_properties()
202         self.__do_layout()
203
204         self.Bind(wx.EVT_BUTTON, self.OnKeyPref, self.button_5)
205         self.Bind(wx.EVT_BUTTON, self.OnDef, self.button_2)
206
207     def __set_properties(self):
208         self.SetTitle("Options")
209         DefaultLem = self.pamconf.getboolean('pam', 'lem')
210         if DefaultLem :
211             self.radio_1.SetSelection(0)
212         else:
213             self.radio_1.SetSelection(1)
214         expressions = self.pamconf.getboolean('pam', 'expressions')
215         #if expressions :
216         #    self.radio_exp.SetSelection(0)
217         #else :
218         #    self.radio_exp.SetSelection(1)
219         self.choice_1.SetSelection(self.distance.index(self.pamconf.get('pam', 'method')))
220         if self.pamconf.get('pam', 'cluster_type') == u'pam' :
221             self.radio_box_3.SetSelection(0)
222         else :
223             self.radio_box_3.SetSelection(1)
224         self.radio_box_classif.SetSelection(int(self.pamconf.get('pam','type')))
225         self.spin_max_actives.SetValue(int(self.pamconf.get('pam','max_actives')))
226         self.spin_ctrl_3.SetValue(int(self.pamconf.get('pam', 'nbforme_uce')))
227         cle = 'nbcl'
228         self.spin_ctrl_4.SetValue(int(self.pamconf.get('pam', cle)))
229
230     def __do_layout(self):
231         sizer_1 = wx.BoxSizer(wx.VERTICAL)
232         sizer_2 = wx.BoxSizer(wx.VERTICAL)
233         grid_sizer2 = wx.FlexGridSizer(11, 2, 2, 2)
234         grid_button = wx.FlexGridSizer(1, 3, 1, 1)
235         grid_sizer2.Add(self.label_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
236         grid_sizer2.Add(self.radio_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
237         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
238         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
239        
240         grid_sizer2.Add(self.label_exp, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
241         grid_sizer2.Add(self.radio_exp, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
242         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
243         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
244
245         grid_sizer2.Add(self.label_12, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
246         grid_sizer2.Add(self.choice_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
247         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
248         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
249
250         grid_sizer2.Add(self.label_13, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
251         grid_sizer2.Add(self.radio_box_3, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
252         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
253         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
254
255         grid_sizer2.Add(self.label_classif, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
256         grid_sizer2.Add(self.radio_box_classif, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
257         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
258         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
259         
260         #grid_sizer2.Add(self.label_2, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
261         #grid_sizer2.Add(self.spin_ctrl_1, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
262         #grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
263         #grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
264         
265         grid_sizer2.Add(self.label_max_actives, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
266         grid_sizer2.Add(self.spin_max_actives, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0) 
267         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
268         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
269
270         grid_sizer2.Add(self.label_6, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
271         grid_sizer2.Add(self.spin_ctrl_3, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0) 
272         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
273         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
274         
275         grid_sizer2.Add(self.label_7, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
276         grid_sizer2.Add(self.spin_ctrl_4, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
277         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
278         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
279         
280         grid_sizer2.Add(self.label_4, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
281         grid_sizer2.Add(self.button_5, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 0)
282         grid_sizer2.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 1)
283         grid_sizer2.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 1)
284         
285         grid_button.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
286         grid_button.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
287         grid_button.Add(self.button_4, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
288         sizer_2.Add(grid_sizer2, 3, wx.EXPAND, 0)
289         sizer_2.Add(grid_button, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
290         sizer_1.Add(sizer_2, 0, wx.EXPAND, 0)
291         self.SetSizer(sizer_1)
292         sizer_1.Fit(self)
293         self.Layout()
294
295     def OnKeyPref(self, event):
296         self.choose = True
297         dial = AlcOptFrame(self.parent, self)
298         dial.CenterOnParent()
299         val = dial.ShowModal()
300     
301     def OnDef(self, event):
302         ConfOri = ConstructConfigPath(self.parent.parent.AppliPath, user=False)
303         ConfUser = ConstructConfigPath(self.parent.parent.UserConfigPath)
304         shutil.copyfile(ConfOri['pam'], ConfUser['pam'])
305         self.parent.pamconf.read(self.parent.ConfigPath['pam'])
306         self.__set_properties()