1 # -*- coding: utf-8 -*-
3 #----------------------------------------------------------------------------
5 # Author: Pierre Ratinaud
8 #comes from ListCtrl.py from the demo tool of wxPython:
9 # Author: Robin Dunn & Gary Dumer
12 # Copyright: (c) 1998 by Total Control Software
13 # Licence: wxWindows license
14 #----------------------------------------------------------------------------
19 import wx.lib.mixins.listctrl as listmix
20 #from tabsimi import DoSimi
21 from listlex import ListForSpec
22 from chemins import ConstructPathOut, ffr
23 from dialog import PrefExport, PrefUCECarac, SearchDial, message
24 from tableau import Tableau
25 from search_tools import SearchFrame
30 from functions import exec_rcode, MessageImage, progressbar, treat_var_mod
31 from PrintRScript import barplot
32 from textclassechd import ClasseCHD
33 from shutil import copyfile
35 #---------------------------------------------------------------------------
36 class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
37 def __init__(self, parent, gparent, profclasse, Alceste=False, cl=0):
38 wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
41 self.Alceste = Alceste
46 line1 = profclasse.pop(0)
47 classen = [line for line in profclasse if line[0] != '*' and line[0] != '*****']
49 self.lenact = profclasse.index([u'*****', u'*', u'*', u'*', u'*', u'*', '', ''])
50 profclasse.pop(self.lenact)
53 self.lenact = profclasse.index([u'*', u'*', u'*', u'*', u'*', u'*', '', ''])
54 profclasse.pop(self.lenact)
56 self.lenact = len(profclasse)
58 self.lensup = profclasse.index([u'*', u'*', u'*', u'*', u'*', u'*', '', ''])
59 self.lensup = self.lensup - self.lenact
60 profclasse.pop(self.lensup)
62 self.lensup = len(profclasse) - self.lenact
63 self.lenet = len(profclasse) - (self.lenact + self.lensup)
64 # print self.lenact, self.lensup, self.lenet
65 for i, line in enumerate(classen) :
67 dictdata = dict(zip([i for i in range(0,len(classen))], classen))
70 self.la = [dictdata[i][6] for i in range(0, self.lenact)]
71 self.lchi = [dictdata[i][4] for i in range(0, self.lenact)]
72 self.lfreq = [dictdata[i][1] for i in range(0, self.lenact)]
80 self.il = wx.ImageList(16, 16)
81 a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"}
83 s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
85 self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
87 #adding some attributes (colourful background for each item rows)
88 self.attr1 = wx.ListItemAttr()
89 self.attr1.SetBackgroundColour((220, 220, 220))
90 self.attrsg = wx.ListItemAttr()
91 self.attrsg.SetBackgroundColour((230, 230, 230))
92 self.attr2 = wx.ListItemAttr()
93 self.attr2.SetBackgroundColour((190, 249, 236))
94 self.attr2s = wx.ListItemAttr()
95 self.attr2s.SetBackgroundColour((211, 252, 244))
96 self.attr3 = wx.ListItemAttr()
97 self.attr3.SetBackgroundColour((245, 180, 180))
98 self.attr3s = wx.ListItemAttr()
99 self.attr3s.SetBackgroundColour((245, 190, 190))
102 self.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
103 self.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
104 self.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
105 self.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
106 self.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
107 self.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
108 self.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
109 self.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
112 self.SetColumnWidth(0, 60)
113 self.SetColumnWidth(1, 70)
114 self.SetColumnWidth(2, 80)
115 self.SetColumnWidth(3, 100)
116 self.SetColumnWidth(4, 70)
117 self.SetColumnWidth(5, 60)
118 self.SetColumnWidth(6, 140)
119 self.SetColumnWidth(7, wx.LIST_AUTOSIZE)
121 #These two should probably be passed to init more cleanly
122 #setting the numbers of items = number of elements in the dictionary
123 self.itemDataMap = dictdata
124 self.itemIndexMap = dictdata.keys()
125 self.SetItemCount(len(dictdata))
128 listmix.ListCtrlAutoWidthMixin.__init__(self)
129 listmix.ColumnSorterMixin.__init__(self, len(classen[0]))
131 #sort by genre (column 2), A->Z ascending order (1)
132 self.SortListItems(0, 1)
135 #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
136 #self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
137 #self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
138 self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
141 self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
144 self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
147 search_id = wx.NewId()
148 searchall_id = wx.NewId()
149 self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
150 self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
151 self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
152 (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
153 self.SetAcceleratorTable(self.accel_tbl)
157 def OnColClick(self,event):
160 def OnItemSelected(self, event):
161 self.currentItem = event.m_itemIndex
163 def OnItemActivated(self, event):
164 self.currentItem = event.m_itemIndex
166 def getColumnText(self, index, col):
167 item = self.GetItem(index, col)
168 return item.GetText()
170 def OnItemDeselected(self, evt):
172 #---------------------------------------------------
173 # These methods are callbacks for implementing the
174 # "virtualness" of the list...
176 def OnGetItemText(self, item, col):
177 index=self.itemIndexMap[item]
178 s = self.itemDataMap[index][col]
181 def OnGetItemImage(self, item):
182 index=self.itemIndexMap[item]
183 genre=self.itemDataMap[index][2]
189 elif genre=="New Age":
194 def OnGetItemAttr(self, item):
195 index=self.itemIndexMap[item]
196 if index < self.lenact :
201 elif index >= self.lenact and index < (self.lenact + self.lensup) :
206 elif index >= (self.lenact + self.lensup) :
214 #---------------------------------------------------
216 # Here's a better SortItems() method --
217 # the ColumnSorterMixin.__ColumnSorter() method already handles the ascending/descending,
218 # and it knows to sort on another column if the chosen columns have the same value.
220 def SortItems(self,sorter=cmp):
221 items = list(self.itemDataMap.keys())
223 self.itemIndexMap = items
228 # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
229 def GetListCtrl(self):
232 # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
233 def GetSortImages(self):
234 return (self.sm_dn, self.sm_up)
236 def onsearch(self, evt) :
237 self.dial = SearchDial(self, self, 6, True)
238 self.dial.CenterOnParent()
239 self.dial.ShowModal()
242 def onsearchall(self, evt) :
243 if 'FrameSearch' not in dir(self.Source) :
244 self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
245 self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
246 self.dial.CenterOnParent()
247 self.dial.ShowModal()
250 def OnRightClick(self, event):
252 # only do this part the first time so the events are only bound once
254 if not hasattr(self, "popupID1"):
255 self.popupID1 = wx.NewId()
256 self.popupID2 = wx.NewId()
257 self.popupID3 = wx.NewId()
258 self.popupID4 = wx.NewId()
259 self.popupID5 = wx.NewId()
260 self.popupID6 = wx.NewId()
261 self.popupID7 = wx.NewId()
262 self.popupID8 = wx.NewId()
263 self.popupID9 = wx.NewId()
264 #self.popupID10 = wx.NewId()
265 self.popupIDgraph = wx.NewId()
266 self.idseg = wx.NewId()
267 self.iducecarac = wx.NewId()
268 self.idtablex = wx.NewId()
269 self.idchimod = wx.NewId()
270 self.idwordgraph = wx.NewId()
271 self.popup_proxe = wx.NewId()
272 self.idlexdendro = wx.NewId()
273 self.idexport = wx.NewId()
274 # self.export_classes = wx.NewId()
276 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
277 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
278 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
279 self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
280 self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
281 self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
282 self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
283 self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
284 self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
285 #self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
286 self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
287 self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
288 self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
289 self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
290 self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
291 self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
292 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
293 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
294 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
295 # self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
296 # self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
300 menu.Append(self.popupID1, u"Formes associées")
301 menu.Append(self.idtablex, u"Chi2 par classe")
302 menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
303 menu.Append(self.idchimod, u"Chi2 modalités de la variable")
304 menu.Append(self.idwordgraph, u"Graphe du mot")
305 #menu.Append(self.export_classes, u"Exporter le corpus...")
307 #menu.Append(self.popupID10, u"Spécificités")
309 menu_conc = wx.Menu()
310 menu_conc.Append(self.popupID2, u"dans les uce de la classe")
311 menu_conc.Append(self.popupID3, u"dans les uce classées")
312 menu_conc.Append(self.popupID4, u"dans toutes les uce")
313 menu.AppendMenu(-1, u"Concordancier", menu_conc)
314 menu_cnrtl = wx.Menu()
315 menu_cnrtl.Append(self.popupID5, u"Définition")
316 menu_cnrtl.Append(self.popupID6, u"Etymologie")
317 menu_cnrtl.Append(self.popupID7, u"Synonymie")
318 menu_cnrtl.Append(self.popupID8, u"Antonymie")
319 menu_cnrtl.Append(self.popupID9, u"Morphologie")
320 menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
321 menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
322 menu.AppendSeparator()
323 menu.Append(self.popupIDgraph, u"Graphe de la classe")
324 menu.Append(self.idseg, u"Segments répétés")
325 menu.Append(self.iducecarac, u"UCE caractéristiques")
326 menu.Append(self.idexport, 'Partitionner...')
327 #menu.Append(self.popupID2, u"Concordancier")
328 # menu.Append(self.popupID3, "recharger")
332 elif 'tableau' in dir(self.Source) :
333 if not hasattr(self, "pop1"):
334 self.pop1 = wx.NewId()
335 self.pop2 = wx.NewId()
336 self.pop3 = wx.NewId()
337 self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
338 self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
339 self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
342 menu.Append(self.pop2, u"Chi2 par classe")
343 menu.Append(self.pop3, u"Chi2 modalités de la variable")
344 menu.AppendSeparator()
345 menu.Append(self.pop1, u"Graph de la classe")
349 def onexport(self, evt) :
350 if 'corpus' in dir(self.Source):
351 corpus = self.Source.corpus
352 ClasseCHD(self.parent, corpus, self.cl)
354 def getselectedwords(self) :
355 words = [self.getColumnText(self.GetFirstSelected(), 6)]
356 last = self.GetFirstSelected()
357 while self.GetNextSelected(last) != -1:
358 last = self.GetNextSelected(last)
359 words.append(self.getColumnText(last, 6))
362 def quest_var_mod(self, evt) :
363 if 'corpus' in dir(self.Source):
364 corpus = self.Source.corpus
365 if self.var_mod == {} :
366 self.var_mod = self.Source.corpus.make_etoiles_dict()
368 corpus = self.Source.tableau
369 if self.var_mod == {} :
370 self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
371 with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
372 chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
376 vchistable = [line[1:] for line in chistable]
377 fchistable = [line[0] for line in chistable]
378 word = self.getselectedwords()[0]
380 if len(word.split('_')) > 1 :
381 var = word.split('_')
382 #words = ['_'.join([var[0],word]) for word in self.var_mod[var[0]]]
383 words = [word for word in self.var_mod[var[0]]]
389 if word in fchistable :
390 tableout.append(vchistable[fchistable.index(word)])
392 tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
394 txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
395 tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
396 file = open(tmpscript,'w')
399 exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
400 win = MessageImage(self,u"Graphique", size=(700, 500))
401 win.addsaveimage(tmpgraph)
402 txt = "<img src='%s'>" % tmpgraph
403 win.HtmlPage.SetPage(txt)
406 dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
407 dial.CenterOnParent()
411 def quest_simi(self, evt) :
412 tableau = self.Source.tableau
413 tab = tableau.make_table_from_classe(self.cl, self.la)
414 pathout = ConstructPathOut(os.path.join(self.Source.pathout.dirout, 'simi_classe_%i' %self.cl), 'simi_classe_%i' %self.cl)
415 self.filename = os.path.join(pathout,'mat01.csv')
416 tableau.printtable(self.filename, tab)
418 paramsimi = {'coeff' : 0,
441 'cola' : (200,200,200),
452 # self.tableau.actives = {}
453 # self.tableau.lchi = self.lchi
454 # self.tableau.chi = {}
455 # for i, val in enumerate(self.la) :
456 # self.tableau.actives[val] = [self.lfreq[i]]
457 # self.tableau.chi[val] = [self.lchi[i]]
461 tableau.lchi = self.lchi
462 tableau.parametre['fromprof'] = True
463 for i, val in enumerate(self.la) :
464 act[val] = [self.lfreq[i]]
465 tableau.chi[val] = [self.lchi[i]]
466 self.parent.SimiCluster(parametres = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act, tableau = tableau)
468 def onwordgraph(self, evt):
469 word = self.getColumnText(self.GetFirstSelected(), 6)
470 if self.tmpchi is None :
471 self.tmpchi = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
472 with open(self.tmpchi, 'w') as f:
473 f.write('\n'.join([str(val) for val in self.lchi]))
474 index = self.la.index(word)
475 parametres = {'type' : 'clustersimitxt',
476 'pathout' : self.Source.parametres['pathout'],
478 'lem' : self.Source.parametres['lem'],
479 'tmpchi' : self.tmpchi}
481 self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.cl - 1, parametres = parametres, dlg = progressbar(self, 4))
485 def on_graph(self, evt):
486 if self.tmpchi is None :
487 self.tmpchi = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
488 with open(self.tmpchi, 'w') as f:
489 f.write('\n'.join([str(val) for val in self.lchi]))
490 parametres = {'type' : 'clustersimitxt',
491 'pathout' : self.Source.parametres['pathout'],
492 'lem' : self.Source.parametres['lem'],
493 'tmpchi' : self.tmpchi}
495 self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.cl - 1, parametres = parametres, dlg = progressbar(self, 4))
496 #dlg = progressbar(self, 2)
497 #corpus = self.Source.corpus
498 #uces = corpus.lc[self.cl-1]
499 #dlg.Update(1, u'Tableau...')
500 ##tab = corpus.make_table_with_classe(uces, self.la)
501 #pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
502 #self.filename = os.path.join(pathout,'mat01.csv')
503 #dlg.Update(2, u'Ecriture...')
504 ##corpus.write_tab(tab, self.filename)
506 #corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
508 #paramsimi = {'coeff' : 0,
519 # 'coeff_temax' : 10,
526 # 'cexfromchi' : True,
530 # 'cols' : (255,0,0),
531 # 'cola' : (200,200,200),
535 # 'keep_coord' : True,
539 #self.tableau = Tableau(self.parent, '')
540 #self.tableau.listactives = self.la
541 #self.tableau.actives = {}
542 #self.tableau.lchi = self.lchi
543 #self.tableau.chi = {}
544 #self.tableau.parametre['fromprof'] = True
545 #for i, val in enumerate(self.la) :
546 # self.tableau.actives[val] = [self.lfreq[i]]
547 # self.tableau.chi[val] = [self.lchi[i]]
548 #DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
550 def on_segments(self,evt) :
551 dlg = progressbar(self, 2)
552 corpus = self.Source.corpus
553 uces = corpus.lc[self.cl-1]
555 dlg.Update(1, u'Segments...')
556 for i in range(2,10) :
557 li = corpus.find_segments_in_classe(uces, i, 1000)
562 l.sort(reverse = True)
564 dlg.Update(2, 'Tri...')
565 for i, line in enumerate(l) :
566 d[i] = [line[1],line[0], line[2]]
568 para={'dico': d,'fline':first}
570 win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
573 def on_uce_carac(self,evt) :
574 dial = PrefUCECarac(self, self.parent)
575 dial.CenterOnParent()
576 if dial.ShowModal() == wx.ID_OK :
577 limite = dial.spin_eff.GetValue()
578 atype = dial.radio_type.GetSelection()
579 dlg = progressbar(self,maxi = 4)
580 corpus = self.Source.corpus
581 uces = corpus.lc[self.cl-1]
582 tab = corpus.make_table_with_classe(uces, self.la)
584 dlg.Update(2, u'score...')
586 ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
588 ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
589 ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
591 ntab2.sort(reverse = True)
592 ntab2 = ntab2[:limite]
593 nuces = [val[1] for val in ntab2]
594 dlg.Update(3, u'concordancier...')
595 #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
596 ucestxt1 = [row for row in corpus.getconcorde(nuces)]
599 for uce in ucestxt1 :
600 ucetxt = ' '+uce[1]+' '
601 ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
603 listmot = corpus.getlems()[lem].formes
605 forme = corpus.getforme(id).forme
606 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
607 ucestxt.append(ucetxt)
608 #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
609 dlg.Update(4, u'texte...')
610 #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
611 win = message(self, u"UCE caractéristiques - Classe %i" % self.cl, (750, 600))
612 win.html = '<html>\n' + '<br><br>'.join(['<br>'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
613 win.HtmlPage.SetPage(win.html)
617 def on_tablex(self, evt):
618 if 'corpus' in dir(self.Source):
619 corpus = self.Source.corpus
621 corpus = self.Source.tableau
622 with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
623 chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
627 vchistable = [line[1:] for line in chistable]
628 fchistable = [line[0] for line in chistable]
629 words = self.getselectedwords()
630 tableout = [vchistable[fchistable.index(word)] for word in words]
631 tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
634 txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
635 tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
636 file = open(tmpscript,'w')
639 exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
640 w = 100 + (20 * nbwords) + (100 * nbcl)
641 h = 100 + (nbwords * 15)
642 if w > 1100 : w = 1100
645 win = MessageImage(self, u"Graphique", size=(w, h))
646 win.addsaveimage(tmpgraph)
647 txt = "<img src='%s'>" % tmpgraph
648 win.HtmlPage.SetPage(txt)
651 def onlexdendro(self, evt):
652 if 'corpus' in dir(self.Source):
653 corpus = self.Source.corpus
655 corpus = self.Source.tableau
656 with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
657 chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
661 vchistable = [line[1:] for line in chistable]
662 fchistable = [line[0] for line in chistable]
663 words = self.getselectedwords()
664 tableout = [vchistable[fchistable.index(word)] for word in words]
665 tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
666 txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
667 rownames = 'c("' + '","'.join(words) + '")'
668 colnames = 'c("' + '","'.join(title) + '")'
673 di <- matrix(data=%s, nrow=%i, byrow = TRUE)
678 height <- (30*ncol(di)) + (15*nrow(di))
679 height <- ifelse(height <= 400, 400, height)
681 open_file_graph("%s", width=width, height=height)
682 plot.dendro.lex(tree.cut1$tree.cl, di)
683 """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
684 tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
685 file = open(tmpscript,'w')
688 exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
689 win = MessageImage(self, u"Graphique", size=(700, 500))
690 win.addsaveimage(tmpgraph)
691 txt = "<img src='%s'>" % tmpgraph
692 win.HtmlPage.SetPage(txt)
696 def make_concord(self, uces, title, color = 'red') :
697 corpus = self.Source.corpus
698 ListWord = [self.getColumnText(self.GetFirstSelected(), 6)]
699 last = self.GetFirstSelected()
700 while self.GetNextSelected(last) != -1:
701 last = self.GetNextSelected(last)
702 ListWord.append(self.getColumnText(last, 6))
703 listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
704 win = message(self, title, size=(750, 600))
705 toshow = ['<html>\n<H1>Concordancier</H1>\n']
706 toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
709 for word in ListWord :
710 ucef += list(set(corpus.getlemuces(word)).intersection(uces))
711 ucef = list(set(ucef))
713 res = corpus.getconcorde(ucef)
714 txt = '<br>'.join(toshow) +'<br><br>'
716 ucetxt = ' '+uce[1]+' '
717 txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
718 for forme in listmot:
719 forme = corpus.getforme(forme).forme
720 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
721 txt += ucetxt + '<br><br>'
722 win.HtmlPage.SetPage(txt)
725 def OnPopupTwo(self, event):
726 corpus = self.Source.corpus
727 uces = corpus.lc[self.cl-1]
728 win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
731 def OnPopupThree(self, event):
732 corpus = self.Source.corpus
733 uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
734 win = self.make_concord(uces, "Concordancier - UCE classées")
737 def OnPopupFour(self, event):
738 corpus = self.Source.corpus
739 uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
740 win = self.make_concord(uces, "Concordancier - Toutes les UCE")
743 def OnPopupFive(self, event):
744 word = self.getColumnText(self.GetFirstSelected(), 6)
745 lk = "http://www.cnrtl.fr/definition/" + word
748 def OnPopupSix(self, event):
749 word = self.getColumnText(self.GetFirstSelected(), 6)
750 lk = "http://www.cnrtl.fr/etymologie/" + word
753 def OnPopupSeven(self, event):
754 word = self.getColumnText(self.GetFirstSelected(), 6)
755 lk = "http://www.cnrtl.fr/synonymie/" + word
758 def OnPopupHeight(self, event):
759 word = self.getColumnText(self.GetFirstSelected(), 6)
760 lk = "http://www.cnrtl.fr/antonymie/" + word
763 def OnPopupNine(self, event):
764 word = self.getColumnText(self.GetFirstSelected(), 6)
765 lk = "http://www.cnrtl.fr/morphologie/" + word
768 def onproxe(self, evt) :
769 word = self.getColumnText(self.GetFirstSelected(), 6)
770 lk = "http://www.cnrtl.fr/proxemie/" + word
774 #---------------------------------------------------------------------------
775 #class ProfListctrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
776 # def __init__(self, parent, ID, pos=wx.DefaultPosition,
777 # size=wx.DefaultSize, style=0):
778 # wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
779 # listmix.ListCtrlAutoWidthMixin.__init__(self)
782 #class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
783 # def __init__(self, parent, gparent, ProfClasse, Alceste=False, cl=0):
784 # self.parent = parent
785 # classe = ProfClasse
787 # self.Source = gparent
788 # if 'tableau' in dir(self.Source):
789 # self.tableau = self.Source.tableau
790 # self.Alceste = Alceste
794 # wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
796 # search_id = wx.NewId()
797 # searchall_id = wx.NewId()
798 # self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
799 # self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
800 # self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
801 # (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
802 # self.SetAcceleratorTable(self.accel_tbl)
804 # self.il = wx.ImageList(16, 16)
805 ## self.idx1 = self.il.Add(images.getSmilesBitmap())
806 # self.sm_up = self.il.Add(getSmallUpArrowBitmap())
807 # self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
810 # self.list = ProfListctrl(self, tID,
813 # | wx.LC_EDIT_LABELS
814 # | wx.LC_SORT_ASCENDING
816 # line1 = classe.pop(0)
821 # classen = [line for line in classe if line[0] != '*' and line[0] != '*****']
822 # if len(classen) == 0 :
827 # lenact = [i for i,b in enumerate(classe) if b[0] == '*****']
830 # lenact = [i for i,b in enumerate(classe) if b[0] == '*']
832 # lenact = len(classen)
836 # lenet = len(classen)
839 # lensup = [i for i,b in enumerate(classe[1:]) if b[0] == '*']
841 # lensup = lensup[0] - lenact
842 # lenet = len(classen) - lensup
845 # lenet = len(classen)
848 # self.lenact = lenact
850 # debet = lenact + lensup
851 # dictdata = dict(zip([i for i in range(0,len(classen))], classen))
852 # self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
854 # self.PopulateList(dictdata, debet, debsup, Alceste)
856 # self.Bind(wx.EVT_SIZE, self.OnSize)
857 # self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
858 # self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
861 # self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
864 # self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
865 # self.itemDataMap = dictdata
866 # listmix.ColumnSorterMixin.__init__(self, 8)
868 ##-----------------------------------------------------------------------------------------
870 # def PopulateList(self, dictdata, limit, limitsup, Alceste):
873 # # for normal, simple columns, you can add them like this:
874 # self.list.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
875 # self.list.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
876 # self.list.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
877 # self.list.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
878 # self.list.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
879 # self.list.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
880 # self.list.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
881 # self.list.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
883 # for key in dictdata : #.iteritems():
884 # index = self.list.InsertStringItem(sys.maxint, '%4i' % key)
886 # for val in dictdata[key][1:]:
887 # self.list.SetStringItem(index, i, str(dictdata[key][i]))
889 # self.list.SetItemData(index, key)
891 # self.list.SetColumnWidth(0, 60)
892 # self.list.SetColumnWidth(1, 70)
893 # self.list.SetColumnWidth(2, 80)
894 # self.list.SetColumnWidth(3, 100)
895 # self.list.SetColumnWidth(4, 70)
896 # self.list.SetColumnWidth(5, wx.LIST_AUTOSIZE)
897 # self.list.SetColumnWidth(6, wx.LIST_AUTOSIZE)
898 # self.list.SetColumnWidth(7, wx.LIST_AUTOSIZE)
900 # # show how to change the colour of a couple items
901 # for i in range(limitsup, limit):
902 # item = self.list.GetItem(i)
903 # item.SetTextColour(wx.RED)
904 # self.list.SetItem(item)
906 # for i in range(limit, len(dictdata)):
907 # item = self.list.GetItem(i)
908 # item.SetTextColour(wx.BLUE)
909 # self.list.SetItem(item)
911 # if self.lenact != 0 :
912 # self.la = [self.getColumnText(i,6) for i in range(0, self.lenact)]
913 # self.lchi = [float(self.getColumnText(i,4)) for i in range(0, self.lenact)]
914 # self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, self.lenact)]
920 # def do_greyline(self):
921 # for row in xrange(self.list.GetItemCount()):
923 # self.list.SetItemBackgroundColour(row, (230, 230, 230))
925 # self.list.SetItemBackgroundColour(row, wx.WHITE)
928 # # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
929 # def GetListCtrl(self):
932 # # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
933 # def GetSortImages(self):
934 # return (self.sm_dn, self.sm_up)
937 # def OnRightDown(self, event):
940 # item, flags = self.list.HitTest((x, y))
942 # if flags & wx.LIST_HITTEST_ONITEM:
943 # self.list.Select(item)
948 # def getColumnText(self, index, col):
949 # item = self.list.GetItem(index, col)
950 # return item.GetText()
953 # def OnItemSelected(self, event):
954 # self.currentItem = event.m_itemIndex
957 # def onsearch(self, evt) :
958 # self.dial = SearchDial(self, self, 6, True)
959 # self.dial.CenterOnParent()
960 # self.dial.ShowModal()
961 # self.dial.Destroy()
963 # def onsearchall(self, evt) :
964 # if 'FrameSearch' not in dir(self.Source) :
965 # self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
966 # self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
967 # self.dial.CenterOnParent()
968 # self.dial.ShowModal()
969 # self.dial.Destroy()
971 # def OnRightClick(self, event):
973 # # only do this part the first time so the events are only bound once
975 # if not hasattr(self, "popupID1"):
976 # self.popupID1 = wx.NewId()
977 # self.popupID2 = wx.NewId()
978 # self.popupID3 = wx.NewId()
979 # self.popupID4 = wx.NewId()
980 # self.popupID5 = wx.NewId()
981 # self.popupID6 = wx.NewId()
982 # self.popupID7 = wx.NewId()
983 # self.popupID8 = wx.NewId()
984 # self.popupID9 = wx.NewId()
985 # #self.popupID10 = wx.NewId()
986 # self.popupIDgraph = wx.NewId()
987 # self.idseg = wx.NewId()
988 # self.iducecarac = wx.NewId()
989 # self.idtablex = wx.NewId()
990 # self.idchimod = wx.NewId()
991 # self.idwordgraph = wx.NewId()
992 # self.popup_proxe = wx.NewId()
993 # self.idlexdendro = wx.NewId()
994 # self.idexport = wx.NewId()
995 # # self.export_classes = wx.NewId()
997 # self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
998 # self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
999 # self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
1000 # self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
1001 # self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
1002 # self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
1003 # self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
1004 # self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
1005 # self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
1006 # #self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
1007 # self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
1008 # self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
1009 # self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
1010 # self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
1011 # self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
1012 # self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
1013 # self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
1014 # self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
1015 # self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
1016 # # self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
1017 # # self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
1021 # menu.Append(self.popupID1, u"Formes associées")
1022 # menu.Append(self.idtablex, u"Chi2 par classe")
1023 # menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
1024 # menu.Append(self.idchimod, u"Chi2 modalités de la variable")
1025 # menu.Append(self.idwordgraph, u"Graphe du mot")
1026 # #menu.Append(self.export_classes, u"Exporter le corpus...")
1028 # #menu.Append(self.popupID10, u"Spécificités")
1030 # menu_conc = wx.Menu()
1031 # menu_conc.Append(self.popupID2, u"dans les uce de la classe")
1032 # menu_conc.Append(self.popupID3, u"dans les uce classées")
1033 # menu_conc.Append(self.popupID4, u"dans toutes les uce")
1034 # menu.AppendMenu(-1, u"Concordancier", menu_conc)
1035 # menu_cnrtl = wx.Menu()
1036 # menu_cnrtl.Append(self.popupID5, u"Définition")
1037 # menu_cnrtl.Append(self.popupID6, u"Etymologie")
1038 # menu_cnrtl.Append(self.popupID7, u"Synonymie")
1039 # menu_cnrtl.Append(self.popupID8, u"Antonymie")
1040 # menu_cnrtl.Append(self.popupID9, u"Morphologie")
1041 # menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
1042 # menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
1043 # menu.AppendSeparator()
1044 # menu.Append(self.popupIDgraph, u"Graphe de la classe")
1045 # menu.Append(self.idseg, u"Segments répétés")
1046 # menu.Append(self.iducecarac, u"UCE caractéristiques")
1047 # menu.Append(self.idexport, 'Partitionner...')
1048 # #menu.Append(self.popupID2, u"Concordancier")
1049 # # menu.Append(self.popupID3, "recharger")
1051 # self.PopupMenu(menu)
1053 # elif 'tableau' in dir(self.Source) :
1054 # if not hasattr(self, "pop1"):
1055 # self.pop1 = wx.NewId()
1056 # self.pop2 = wx.NewId()
1057 # self.pop3 = wx.NewId()
1058 # self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
1059 # self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
1060 # self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
1063 # menu.Append(self.pop2, u"Chi2 par classe")
1064 # menu.Append(self.pop3, u"Chi2 modalités de la variable")
1065 # menu.AppendSeparator()
1066 # menu.Append(self.pop1, u"Graph de la classe")
1067 # self.PopupMenu(menu)
1070 # def onexport(self, evt) :
1071 # if 'corpus' in dir(self.Source):
1072 # corpus = self.Source.corpus
1073 # ClasseCHD(self.parent, corpus, self.cl)
1075 # def quest_var_mod(self, evt) :
1076 # if 'corpus' in dir(self.Source):
1077 # corpus = self.Source.corpus
1078 # if self.var_mod == {} :
1079 # self.var_mod = treat_var_mod([val for val in corpus.make_etoiles()])
1081 # corpus = self.Source.tableau
1082 # if self.var_mod == {} :
1083 # self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
1084 # with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1085 # chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1086 # title = chistable[0]
1089 # vchistable = [line[1:] for line in chistable]
1090 # fchistable = [line[0] for line in chistable]
1091 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1092 # if len(word.split('_')) > 1 :
1093 # var = word.split('_')[0]
1094 # words = [word for word in self.var_mod[var]]
1098 # for word in words :
1099 # if word in fchistable :
1100 # tableout.append(vchistable[fchistable.index(word)])
1101 # kwords.append(word)
1102 # tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1103 # txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
1104 # tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1105 # file = open(tmpscript,'w')
1108 # exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1109 # win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1110 # win.addsaveimage(tmpgraph)
1111 # txt = "<img src='%s'>" % tmpgraph
1112 # win.HtmlPage.SetPage(txt)
1115 # dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
1116 # dial.CenterOnParent()
1120 # def quest_simi(self, evt) :
1121 # tableau = self.Source.tableau
1122 # tab = tableau.make_table_from_classe(self.cl, self.la)
1123 # pathout = ConstructPathOut(self.Source.pathout+'/', 'simi_classe_%i' %self.cl)
1124 # self.filename = os.path.join(pathout,'mat01.csv')
1125 # tableau.printtable(self.filename, tab)
1127 # paramsimi = {'coeff' : 0,
1132 # 'coeff_tv_nb' : 0,
1137 # 'coeff_temin' : 1,
1138 # 'coeff_temax' : 10,
1145 # 'cexfromchi' : True,
1146 # 'sfromchi': False,
1149 # 'cols' : (255,0,0),
1150 # 'cola' : (200,200,200),
1154 # 'keep_coord' : True,
1158 ## self.tableau.actives = {}
1159 ## self.tableau.lchi = self.lchi
1160 ## self.tableau.chi = {}
1161 ## for i, val in enumerate(self.la) :
1162 ## self.tableau.actives[val] = [self.lfreq[i]]
1163 ## self.tableau.chi[val] = [self.lchi[i]]
1166 # self.tableau.chi = {}
1167 # self.tableau.lchi = self.lchi
1168 # self.tableau.parametre['fromprof'] = True
1169 # for i, val in enumerate(self.la) :
1170 # act[val] = [self.lfreq[i]]
1171 # self.tableau.chi[val] = [self.lchi[i]]
1172 # DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
1174 # def onwordgraph(self, evt):
1175 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1176 # dlg = progressbar(self, 2)
1177 # corpus = self.Source.corpus
1178 # uces = corpus.lc[self.cl-1]
1179 # dlg.Update(1, u'Tableau...')
1180 # #tab = corpus.make_table_with_classe(uces, self.la)
1181 # pathout = ConstructPathOut(self.Source.pathout.dirout + '/' , 'simi_%s' % word)
1182 # self.filename = os.path.join(pathout,'mat01.csv')
1183 # dlg.Update(2, u'Ecriture...')
1184 # #corpus.write_tab(tab, self.filename)
1186 # corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
1188 # paramsimi = {'coeff' : 0,
1193 # 'coeff_tv_nb' : 0,
1198 # 'coeff_temin' : 1,
1199 # 'coeff_temax' : 10,
1208 # 'cols' : (255,0,0),
1209 # 'cola' : (200,200,200),
1213 # 'keep_coord' : True,
1217 # self.tableau = Tableau(self.parent, '')
1218 # self.tableau.listactives = self.la
1219 # self.tableau.actives = {}
1220 # for i, val in enumerate(self.la) :
1221 # self.tableau.actives[val] = [self.lfreq[i]]
1222 # DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
1225 def OnPopupOne(self, event):
1226 corpus = self.Source.corpus
1227 #print 'ATTENTION PRINT ET TABLE'
1228 #corpus.make_et_table()
1229 word = self.getColumnText(self.GetFirstSelected(), 6)
1230 lems = corpus.getlems()
1231 uces = corpus.lc[self.cl-1]
1233 #FIXME : donner aussi eff reel a la place de nb uce
1234 for forme in lems[word].formes :
1235 ucef = list(set(corpus.getworduces(forme)).intersection(uces))
1236 #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
1239 rep.append([corpus.getforme(forme).forme, nb])
1240 win = message(self, u"Formes associées", wx.Size(300, 200))
1241 win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
1242 win.HtmlPage.SetPage(win.html)
1245 # def on_graph(self, evt):
1246 # dlg = progressbar(self, 2)
1247 # corpus = self.Source.corpus
1248 # uces = corpus.lc[self.cl-1]
1249 # dlg.Update(1, u'Tableau...')
1250 # #tab = corpus.make_table_with_classe(uces, self.la)
1251 # pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
1252 # self.filename = os.path.join(pathout,'mat01.csv')
1253 # dlg.Update(2, u'Ecriture...')
1254 # #corpus.write_tab(tab, self.filename)
1256 # corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
1258 # paramsimi = {'coeff' : 0,
1263 # 'coeff_tv_nb' : 0,
1268 # 'coeff_temin' : 1,
1269 # 'coeff_temax' : 10,
1276 # 'cexfromchi' : True,
1277 # 'sfromchi': False,
1280 # 'cols' : (255,0,0),
1281 # 'cola' : (200,200,200),
1285 # 'keep_coord' : True,
1289 # self.tableau = Tableau(self.parent, '')
1290 # self.tableau.listactives = self.la
1291 # self.tableau.actives = {}
1292 # self.tableau.lchi = self.lchi
1293 # self.tableau.chi = {}
1294 # self.tableau.parametre['fromprof'] = True
1295 # for i, val in enumerate(self.la) :
1296 # self.tableau.actives[val] = [self.lfreq[i]]
1297 # self.tableau.chi[val] = [self.lchi[i]]
1298 # DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
1300 # def on_segments(self,evt) :
1301 # dlg = progressbar(self, 2)
1302 # corpus = self.Source.corpus
1303 # uces = corpus.lc[self.cl-1]
1305 # dlg.Update(1, u'Segments...')
1306 # for i in range(2,10) :
1307 # li = corpus.find_segments_in_classe(uces, i, 1000)
1312 # l.sort(reverse = True)
1314 # dlg.Update(2, 'Tri...')
1315 # for i, line in enumerate(l) :
1316 # d[i] = [line[1],line[0], line[2]]
1317 # first = ['','','']
1318 # para={'dico': d,'fline':first}
1320 # win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
1323 # def on_uce_carac(self,evt) :
1324 # dial = PrefUCECarac(self, self.parent)
1325 # dial.CenterOnParent()
1326 # if dial.ShowModal() == wx.ID_OK :
1327 # limite = dial.spin_eff.GetValue()
1328 # atype = dial.radio_type.GetSelection()
1329 # dlg = progressbar(self,maxi = 4)
1330 # corpus = self.Source.corpus
1331 # uces = corpus.lc[self.cl-1]
1332 # tab = corpus.make_table_with_classe(uces, self.la)
1334 # dlg.Update(2, u'score...')
1336 # ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
1338 # ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
1339 # ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
1341 # ntab2.sort(reverse = True)
1342 # ntab2 = ntab2[:limite]
1343 # nuces = [val[1] for val in ntab2]
1344 # dlg.Update(3, u'concordancier...')
1345 # #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
1346 # ucestxt1 = [row for row in corpus.getconcorde(nuces)]
1349 # for uce in ucestxt1 :
1350 # ucetxt = ' '+uce[1]+' '
1351 # ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
1352 # for lem in self.la :
1353 # listmot = corpus.getlems()[lem].formes
1354 # for id in listmot :
1355 # forme = corpus.getforme(id).forme
1356 # ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
1357 # ucestxt.append(ucetxt)
1358 # #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
1359 # dlg.Update(4, u'texte...')
1360 # #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
1361 # win = message(self, -1, u"UCE caractéristiques - Classe %i" % self.cl, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
1362 # win.html = '<html>\n' + '<br><br>'.join(['<br>'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
1363 # win.HtmlPage.SetPage(win.html)
1367 # def on_tablex(self, evt):
1368 # if 'corpus' in dir(self.Source):
1369 # corpus = self.Source.corpus
1371 # corpus = self.Source.tableau
1372 # with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1373 # chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1374 # title = chistable[0]
1377 # vchistable = [line[1:] for line in chistable]
1378 # fchistable = [line[0] for line in chistable]
1379 # words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1380 # tableout = [vchistable[fchistable.index(words[0])]]
1381 # last = self.list.GetFirstSelected()
1382 # while self.list.GetNextSelected(last) != -1:
1383 # last = self.list.GetNextSelected(last)
1384 # word = self.getColumnText(last, 6)
1385 # words.append(word)
1386 # tableout.append(vchistable[fchistable.index(word)])
1387 # tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1389 # txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
1390 # tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1391 # file = open(tmpscript,'w')
1395 # exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1396 # win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1397 # win.addsaveimage(tmpgraph)
1398 # txt = "<img src='%s'>" % tmpgraph
1399 # win.HtmlPage.SetPage(txt)
1402 # def onlexdendro(self, evt):
1403 # if 'corpus' in dir(self.Source):
1404 # corpus = self.Source.corpus
1406 # corpus = self.Source.tableau
1407 # with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1408 # chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1409 # title = chistable[0]
1412 # vchistable = [line[1:] for line in chistable]
1413 # fchistable = [line[0] for line in chistable]
1414 # words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1415 # tableout = [vchistable[fchistable.index(words[0])]]
1416 # last = self.list.GetFirstSelected()
1417 # while self.list.GetNextSelected(last) != -1:
1418 # last = self.list.GetNextSelected(last)
1419 # word = self.getColumnText(last, 6)
1420 # words.append(word)
1421 # tableout.append(vchistable[fchistable.index(word)])
1422 # tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1423 # txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
1424 # rownames = 'c("' + '","'.join(words) + '")'
1425 # colnames = 'c("' + '","'.join(title) + '")'
1427 # rownb = len(words)
1430 # di <- matrix(data=%s, nrow=%i, byrow = TRUE)
1432 # colnames(di) <- %s
1435 # height <- (30*ncol(di)) + (15*nrow(di))
1436 # height <- ifelse(height <= 400, 400, height)
1438 # open_file_graph("%s", width=width, height=height)
1439 # plot.dendro.lex(tree.cut1$tree.cl, di)
1440 # """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
1441 # tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1442 # file = open(tmpscript,'w')
1445 # exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1446 # win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1447 # win.addsaveimage(tmpgraph)
1448 # txt = "<img src='%s'>" % tmpgraph
1449 # win.HtmlPage.SetPage(txt)
1453 # def make_concord(self, uces, title, color = 'red') :
1454 # corpus = self.Source.corpus
1455 # ListWord = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1456 # last = self.list.GetFirstSelected()
1457 # while self.list.GetNextSelected(last) != -1:
1458 # last = self.list.GetNextSelected(last)
1459 # ListWord.append(self.getColumnText(last, 6))
1460 # listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
1461 # win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
1462 # toshow = ['<html>\n<H1>Concordancier</H1>\n']
1463 # toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
1466 # for word in ListWord :
1467 # ucef += list(set(corpus.getlemuces(word)).intersection(uces))
1468 # ucef = list(set(ucef))
1470 # res = corpus.getconcorde(ucef)
1471 # txt = '<br>'.join(toshow) +'<br><br>'
1473 # ucetxt = ' '+uce[1]+' '
1474 # txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
1475 # for forme in listmot:
1476 # forme = corpus.getforme(forme).forme
1477 # ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
1478 # txt += ucetxt + '<br><br>'
1479 # win.HtmlPage.SetPage(txt)
1482 # def OnPopupTwo(self, event):
1483 # corpus = self.Source.corpus
1484 # uces = corpus.lc[self.cl-1]
1485 # win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
1488 # def OnPopupThree(self, event):
1489 # corpus = self.Source.corpus
1490 # uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
1491 # win = self.make_concord(uces, "Concordancier - UCE classées")
1494 # def OnPopupFour(self, event):
1495 # corpus = self.Source.corpus
1496 # uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
1497 # win = self.make_concord(uces, "Concordancier - Toutes les UCE")
1500 # def OnPopupFive(self, event):
1501 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1502 # lk = "http://www.cnrtl.fr/definition/" + word
1503 # webbrowser.open(lk)
1505 # def OnPopupSix(self, event):
1506 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1507 # lk = "http://www.cnrtl.fr/etymologie/" + word
1508 # webbrowser.open(lk)
1510 # def OnPopupSeven(self, event):
1511 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1512 # lk = "http://www.cnrtl.fr/synonymie/" + word
1513 # webbrowser.open(lk)
1515 # def OnPopupHeight(self, event):
1516 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1517 # lk = "http://www.cnrtl.fr/antonymie/" + word
1518 # webbrowser.open(lk)
1520 # def OnPopupNine(self, event):
1521 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1522 # lk = "http://www.cnrtl.fr/morphologie/" + word
1523 # webbrowser.open(lk)
1525 # def onproxe(self, evt) :
1526 # word = self.getColumnText(self.list.GetFirstSelected(), 6)
1527 # lk = "http://www.cnrtl.fr/proxemie/" + word
1528 # webbrowser.open(lk)
1530 # def OnSize(self, event):
1531 # w, h = self.GetClientSizeTuple()
1532 # self.list.SetDimensions(0, 0, w, h)
1534 # def OnColClick(self, event):
1535 # self.do_greyline()
1538 #class wliste(wx.Frame):
1539 # def __init__(self, parent, id, title, d, fline, size=(600, 500)):
1540 # wx.Frame.__init__(self, parent, id)
1541 # self.liste = ListForSpec(self, parent, d, fline)
1542 # self.button_1 = wx.Button(self, -1, "Fermer")
1543 # self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
1544 # self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
1545 # self.__do_layout()
1547 # def __do_layout(self):
1548 # sizer_1 = wx.BoxSizer(wx.VERTICAL)
1549 # sizer_2 = wx.BoxSizer(wx.VERTICAL)
1550 # sizer_2.Add(self.liste, 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0)
1551 # sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
1552 # sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
1553 # self.SetAutoLayout(True)
1554 # self.SetSizer(sizer_1)
1557 # def OnCloseMe(self, event):
1560 # def OnCloseWindow(self, event):
1563 #class message(wx.Dialog):
1564 # def __init__(self, parent, title, size, save = True):
1565 # wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_DIALOG_STYLE )
1567 # self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
1570 # self.HtmlPage=wx.html.HtmlWindow(self, -1)
1571 # self.HtmlPage.SetMinSize( size )
1572 # if "gtk2" in wx.PlatformInfo:
1573 # self.HtmlPage.SetStandardFonts()
1574 # self.HtmlPage.SetFonts('Courier','Courier')
1576 # self.button_1 = wx.Button(self, wx.ID_CANCEL)
1578 # self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
1580 # self.button_2 = wx.Button(self, wx.ID_SAVE)
1581 # self.Bind(wx.EVT_BUTTON, self.OnSavePage, self.button_2)
1582 # self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
1583 # self.__do_layout()
1585 # def __do_layout(self):
1586 # sizer_2 = wx.BoxSizer(wx.VERTICAL)
1587 # sizer_2.Add(self.HtmlPage, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
1588 # m_sdbSizer1 = wx.StdDialogButtonSizer()
1589 # m_sdbSizer1.AddButton( self.button_1 )
1591 # m_sdbSizer1.AddButton( self.button_2 )
1592 # m_sdbSizer1.Realize()
1593 # sizer_2.Add(m_sdbSizer1, 1, wx.EXPAND, 5)
1594 # self.SetSizer(sizer_2)
1596 # sizer_2.Fit( self )
1598 # def OnSavePage(self, evt) :
1599 # dlg = wx.FileDialog(
1600 # self, message="Enregistrer sous...", defaultDir=os.getcwd(),
1601 # defaultFile="concordancier.html", wildcard="html|*.html", style=wx.SAVE | wx.OVERWRITE_PROMPT
1603 # dlg.SetFilterIndex(2)
1604 # dlg.CenterOnParent()
1605 # if dlg.ShowModal() == wx.ID_OK:
1606 # path = dlg.GetPath()
1607 # with open(path, 'w') as f :
1608 # f.write(self.html)
1610 # def OnCloseMe(self, event):
1613 # def OnCloseWindow(self, event):