...
[iramuteq] / ProfList.py
index f5d89f2..41dd3df 100644 (file)
@@ -20,18 +20,19 @@ import  wx.lib.mixins.listctrl  as  listmix
 #from tabsimi import DoSimi
 from listlex import ListForSpec
 from chemins import ConstructPathOut, ffr
 #from tabsimi import DoSimi
 from listlex import ListForSpec
 from chemins import ConstructPathOut, ffr
-from dialog import PrefExport, PrefUCECarac, SearchDial, message
-from tableau import Tableau
+from dialog import PrefExport, PrefUCECarac, SearchDial, message, MessageImage, BarFrame
+from tableau import Tableau, copymatrix
 from search_tools import SearchFrame
 import webbrowser
 #import cStringIO
 import tempfile
 import codecs
 from search_tools import SearchFrame
 import webbrowser
 #import cStringIO
 import tempfile
 import codecs
-from functions import exec_rcode, MessageImage, progressbar, treat_var_mod
+from functions import exec_rcode, progressbar, treat_var_mod, doconcorde
 from PrintRScript import barplot
 from textclassechd import ClasseCHD
 from shutil import copyfile
 from operator import itemgetter
 from PrintRScript import barplot
 from textclassechd import ClasseCHD
 from shutil import copyfile
 from operator import itemgetter
+from copy import copy
 
 #---------------------------------------------------------------------------
 class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
 
 #---------------------------------------------------------------------------
 class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
@@ -43,6 +44,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         self.Source = gparent
         self.cl = cl
         self.var_mod = {}
         self.Source = gparent
         self.cl = cl
         self.var_mod = {}
+        self.them_mod = {}
 
         line1 = profclasse.pop(0)
         classen = [line for line in profclasse if line[0] != '*' and line[0] != '*****']
 
         line1 = profclasse.pop(0)
         classen = [line for line in profclasse if line[0] != '*' and line[0] != '*****']
@@ -134,7 +136,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
 
         #events
         #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
 
         #events
         #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
-        #self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
+        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnPopupTwo, self)
         #self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
 
         #self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
 
@@ -147,6 +149,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         #for searching
         search_id = wx.NewId()
         searchall_id = wx.NewId()
         #for searching
         search_id = wx.NewId()
         searchall_id = wx.NewId()
+        concord_id = wx.NewId()
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
         self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
         self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
         self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
         self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
@@ -271,7 +274,11 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                 self.idwordgraph = wx.NewId()
                 self.popup_proxe = wx.NewId()
                 self.idlexdendro = wx.NewId()
                 self.idwordgraph = wx.NewId()
                 self.popup_proxe = wx.NewId()
                 self.idlexdendro = wx.NewId()
+                self.idcloud = wx.NewId()
                 self.idexport = wx.NewId()
                 self.idexport = wx.NewId()
+                self.idexporttropes = wx.NewId()
+                self.idexportowledge = wx.NewId()
+                self.onmaketgen = wx.NewId()
             #    self.export_classes = wx.NewId()
    
                 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
             #    self.export_classes = wx.NewId()
    
                 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
@@ -292,7 +299,11 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                 self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
                 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
                 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
                 self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
                 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
                 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
+                self.Bind(wx.EVT_MENU, self.oncloud, id = self.idcloud)
                 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
                 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
+                self.Bind(wx.EVT_MENU, self.onexporttropes, id = self.idexporttropes)
+                self.Bind(wx.EVT_MENU, self.onexportowledge, id = self.idexportowledge)
+                self.Bind(wx.EVT_MENU, self.OnMakeTgen, id=self.onmaketgen)
              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
     
              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
     
@@ -311,7 +322,8 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             menu_conc.Append(self.popupID2, u"dans les segments de texte de la classe")
             menu_conc.Append(self.popupID3, u"dans les segments de texte classés")
             menu_conc.Append(self.popupID4, u"dans tous les segments de texte")
             menu_conc.Append(self.popupID2, u"dans les segments de texte de la classe")
             menu_conc.Append(self.popupID3, u"dans les segments de texte classés")
             menu_conc.Append(self.popupID4, u"dans tous les segments de texte")
-            menu.AppendMenu(-1, u"Concordancier", menu_conc) 
+            menu.AppendMenu(-1, u"Concordancier", menu_conc)
+            menu.Append(self.onmaketgen, _(u"Make Tgen").decode('utf8'))
             menu_cnrtl = wx.Menu()      
             menu_cnrtl.Append(self.popupID5, u"Définition")
             menu_cnrtl.Append(self.popupID6, u"Etymologie")
             menu_cnrtl = wx.Menu()      
             menu_cnrtl.Append(self.popupID5, u"Définition")
             menu_cnrtl.Append(self.popupID6, u"Etymologie")
@@ -324,7 +336,10 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             menu.Append(self.popupIDgraph, u"Graphe de la classe")
             menu.Append(self.idseg, u"Segments répétés")
             menu.Append(self.iducecarac, u"Segments de texte caractéristiques")
             menu.Append(self.popupIDgraph, u"Graphe de la classe")
             menu.Append(self.idseg, u"Segments répétés")
             menu.Append(self.iducecarac, u"Segments de texte caractéristiques")
-            menu.Append(self.idexport, 'Exporter...')
+            menu.Append(self.idcloud, u"Nuage de la classe")
+            menu.Append(self.idexport, u'Exporter...')
+            menu.Append(self.idexporttropes, 'Exporter pour Tropes')
+            menu.Append(self.idexportowledge, 'Exporter pour Owledge')
             #menu.Append(self.popupID2, u"Concordancier")
     #        menu.Append(self.popupID3, "recharger")
     
             #menu.Append(self.popupID2, u"Concordancier")
     #        menu.Append(self.popupID3, "recharger")
     
@@ -343,20 +358,60 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             menu.Append(self.pop2, u"Chi2 par classe")
             menu.Append(self.pop3, u"Chi2 modalités de la variable")
             menu.AppendSeparator()
             menu.Append(self.pop2, u"Chi2 par classe")
             menu.Append(self.pop3, u"Chi2 modalités de la variable")
             menu.AppendSeparator()
-            menu.Append(self.pop1, u"Graph de la classe")
+            menu.Append(self.pop1, u"Graphe de la classe")
             self.PopupMenu(menu)
             menu.Destroy()
 
             self.PopupMenu(menu)
             menu.Destroy()
 
+    def oncloud(self, evt) :
+        if 'corpus' in dir(self.Source):
+            corpus = self.Source.corpus
+        prof = [[self.la[i], self.lchi[i], self.lfreq[i]] for i, val in enumerate(self.la)]
+        parametres = copy(self.Source.parametres)
+        parametres['clusterprof'] = prof
+        parametres['type'] = 'clustercloud'
+        parametres['prof'] = self.Source.pathout['actprof_classe_%i.csv' % self.cl]
+        del  parametres['uuid']
+        #if not os.path.exists(self.Source.pathout['actprof_classe_%i.csv' % self.lc]) :
+        #    with open(self.Source.pathout['actprof_classe_%i.csv' % self.lc], 'w') as f :
+        #        f.write('\n'.join(prof).encode(self.parent.syscoding))
+        self.parent.OnClusterCloud(self.Source.corpus, parametres = parametres)
+
     def onexport(self, evt) :
         if 'corpus' in dir(self.Source):
             corpus = self.Source.corpus
     def onexport(self, evt) :
         if 'corpus' in dir(self.Source):
             corpus = self.Source.corpus
-            corpus.export_classe(self.Source.pathout['classe_%i_export.txt' % self.cl], self.cl)
+        if self.Source.parametres['classif_mode'] != 2 :
+            uci = False
+        else :
+            uci = True
+        corpus.export_classe(self.Source.pathout['classe_%i_export.txt' % self.cl], self.cl, uci = uci)
         dial = wx.MessageDialog(self, self.Source.pathout['classe_%i_export.txt' % self.cl], u"Export", wx.OK|wx.ICON_INFORMATION)
         dial.ShowModal()
         dial.Destroy()
         #if 'corpus' in dir(self.Source):
         #    corpus = self.Source.corpus
         #ClasseCHD(self.parent, corpus, self.cl)
         dial = wx.MessageDialog(self, self.Source.pathout['classe_%i_export.txt' % self.cl], u"Export", wx.OK|wx.ICON_INFORMATION)
         dial.ShowModal()
         dial.Destroy()
         #if 'corpus' in dir(self.Source):
         #    corpus = self.Source.corpus
         #ClasseCHD(self.parent, corpus, self.cl)
+    
+    def onexporttropes(self, evt) :
+        if 'corpus' in dir(self.Source):
+            corpus = self.Source.corpus
+        if self.Source.parametres['classif_mode'] != 2 :
+            uci = False
+        else :
+            uci = True
+        fileout = self.Source.pathout['export_tropes_classe_%i.txt' % self.cl]
+        corpus.export_tropes(fileout, self.cl, uci = uci)
+    
+    def onexportowledge(self, evt):
+        if 'corpus' in dir(self.Source):
+            corpus = self.Source.corpus
+        if self.Source.parametres['classif_mode'] != 2 :
+            uci = False
+        else :
+            uci = True
+        repout = self.Source.pathout['export_owledge_classe_%i' % self.cl]
+        if not os.path.exists(repout) :
+            os.mkdir(repout)
+        corpus.export_owledge(repout, self.cl, uci = uci)        
 
     def getselectedwords(self) :
         words = [self.getColumnText(self.GetFirstSelected(), 6)]
 
     def getselectedwords(self) :
         words = [self.getColumnText(self.GetFirstSelected(), 6)]
@@ -366,15 +421,30 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             words.append(self.getColumnText(last, 6))
         return words
 
             words.append(self.getColumnText(last, 6))
         return words
 
-    def quest_var_mod(self, evt) :
+    def quest_var_mod(self, evt) :  
+        word = self.getselectedwords()[0]
+        if len(word.split('_')) <= 1 :
+            dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
+            dial.CenterOnParent()
+            dial.ShowModal()
+            dial.Destroy()
+            return
+            
         if 'corpus' in dir(self.Source):
             corpus = self.Source.corpus
         if 'corpus' in dir(self.Source):
             corpus = self.Source.corpus
-            if self.var_mod == {} :
-                self.var_mod = self.Source.corpus.make_etoiles_dict()
+            if word.startswith(u'-*') :
+                if self.them_mod == {} :
+                    self.them_mod = self.Source.corpus.make_theme_dict()
+                var_mod = self.them_mod
+            else :
+                if self.var_mod == {} :
+                    self.var_mod = self.Source.corpus.make_etoiles_dict()
+                var_mod = self.var_mod
         else :
             corpus = self.Source.tableau
             if self.var_mod == {} :
                 self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
         else :
             corpus = self.Source.tableau
             if self.var_mod == {} :
                 self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
+            var_mod = self.var_mod
         with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
             chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
         title = chistable[0]
         with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
             chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
         title = chistable[0]
@@ -382,40 +452,34 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
-        word = self.getselectedwords()[0]
-        if len(word.split('_')) > 1 :
-            var = word.split('_')
-            #words = ['_'.join([var[0],word]) for word in self.var_mod[var[0]]]
-            words = [word for word in self.var_mod[var[0]]]
-            words.sort()
-            tableout = []
-            kwords = []
-            for word in words :
-                if word in fchistable :
-                    tableout.append(vchistable[fchistable.index(word)])
-                    kwords.append(word)
-            tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
-            txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
-            tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
-            file = open(tmpscript,'w')
-            file.write(txt)
-            file.close()
-            exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
-            win = MessageImage(self,u"Graphique", size=(700, 500))
-            win.addsaveimage(tmpgraph)
-            txt = "<img src='%s'>" % tmpgraph
-            win.HtmlPage.SetPage(txt)
-            win.Show(True)
-        else :
-            dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
+
+        var = word.split('_')
+        #words = ['_'.join([var[0],word]) for word in self.var_mod[var[0]]]
+        try :
+            words = [word for word in var_mod[var[0]]]
+        except KeyError:
+            dial = wx.MessageDialog(self, _(u"This is not a meta-data"), u"Problème", wx.OK | wx.ICON_WARNING)
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
+            return            
+        words.sort()
+        tableout = []
+        kwords = []
+        for word in words :
+            if word in fchistable :
+                tableout.append(vchistable[fchistable.index(word)])
+                kwords.append(word)
+        BarFrame(self.Source.parent, tableout, title, kwords)
 
     def quest_simi(self, evt) :
         tableau = self.Source.tableau
         tab = tableau.make_table_from_classe(self.cl, self.la)
         pathout = ConstructPathOut(self.Source.pathout.dirout, 'simi_classe_%i' %self.cl)
 
     def quest_simi(self, evt) :
         tableau = self.Source.tableau
         tab = tableau.make_table_from_classe(self.cl, self.la)
         pathout = ConstructPathOut(self.Source.pathout.dirout, 'simi_classe_%i' %self.cl)
+        if self.tmpchi is None :
+            self.tmpchi = os.path.join(pathout,'chi.csv')
+            with open(self.tmpchi, 'w') as f:
+                f.write('\n'.join([str(val) for val in self.lchi]))
         self.filename = os.path.join(pathout,'mat01.csv')
         tableau.printtable(self.filename, tab)
         del tab
         self.filename = os.path.join(pathout,'mat01.csv')
         tableau.printtable(self.filename, tab)
         del tab
@@ -451,21 +515,28 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                           'film': False,
                           'com' : 0,
                           'communities' : 0,
                           'film': False,
                           'com' : 0,
                           'communities' : 0,
-                          'halo' : 0
+                          'halo' : 0,
+                          'tmpchi': self.tmpchi,
+                          'fromprof' : True,
+                          'edgecurved' : True,
                           }
         act = {}
                           }
         act = {}
+        tableau = copymatrix(tableau)
         tableau.chi = {}
         tableau.lchi = self.lchi
         tableau.chi = {}
         tableau.lchi = self.lchi
-        tableau.parametre['fromprof'] = True
+        #tableau.parametres['fromprof'] = True
         for i, val in enumerate(self.la) :
             act[val] = [self.lfreq[i]]
             tableau.chi[val] = [self.lchi[i]]
         for i, val in enumerate(self.la) :
             act[val] = [self.lfreq[i]]
             tableau.chi[val] = [self.lchi[i]]
-        self.parent.SimiCluster(parametres = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act, tableau = tableau)
+        paramsimi['listactives'] = copy(self.la)
+        paramsimi['actives'] = copy(act)
+        paramsimi['pathout'] = pathout
+        self.parent.SimiCluster(parametres = paramsimi, fromprof = ffr(self.filename), tableau = tableau)
 
     def onwordgraph(self, evt):
         word = self.getColumnText(self.GetFirstSelected(), 6)
         if self.tmpchi is None :
 
     def onwordgraph(self, evt):
         word = self.getColumnText(self.GetFirstSelected(), 6)
         if self.tmpchi is None :
-            self.tmpchi = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+            self.tmpchi = os.path.join(self.Source.parametres['pathout'],'chi_%i.csv' % self.cl)
             with open(self.tmpchi, 'w') as f:
                 f.write('\n'.join([str(val) for val in self.lchi]))
         index = self.la.index(word)
             with open(self.tmpchi, 'w') as f:
                 f.write('\n'.join([str(val) for val in self.lchi]))
         index = self.la.index(word)
@@ -481,7 +552,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
 
     def on_graph(self, evt):
         if self.tmpchi is None :
 
     def on_graph(self, evt):
         if self.tmpchi is None :
-            self.tmpchi = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+            self.tmpchi = os.path.join(self.Source.parametres['pathout'],'chi_%i.csv' % self.cl)
             with open(self.tmpchi, 'w') as f:
                 f.write('\n'.join([str(val) for val in self.lchi]))
         parametres = {'type' : 'clustersimitxt', 
             with open(self.tmpchi, 'w') as f:
                 f.write('\n'.join([str(val) for val in self.lchi]))
         parametres = {'type' : 'clustersimitxt', 
@@ -495,10 +566,14 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
         uces = corpus.lc[self.cl-1]
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
         uces = corpus.lc[self.cl-1]
+        if self.Source.parametres['classif_mode'] != 2 :
+            uci = False
+        else :
+            uci = True
         l = []
         dlg.Update(1, u'Segments...')
         for i in range(2,10) :
         l = []
         dlg.Update(1, u'Segments...')
         for i in range(2,10) :
-            li = corpus.find_segments_in_classe(uces, i, 1000)
+            li = corpus.find_segments_in_classe(uces, i, 1000, uci = uci)
             if li == [] :
                 break
             else :
             if li == [] :
                 break
             else :
@@ -523,7 +598,11 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             dlg = progressbar(self,maxi = 4)
             corpus = self.Source.corpus
             uces = corpus.lc[self.cl-1]
             dlg = progressbar(self,maxi = 4)
             corpus = self.Source.corpus
             uces = corpus.lc[self.cl-1]
-            tab = corpus.make_table_with_classe(uces, self.la)
+            if self.Source.parametres['classif_mode'] != 2 :
+                uci = False
+            else :
+                uci = True
+            tab = corpus.make_table_with_classe(uces, self.la, uci = uci)
             tab.pop(0)
             dlg.Update(2, u'score...')
             if atype == 0 :
             tab.pop(0)
             dlg.Update(2, u'score...')
             if atype == 0 :
@@ -536,26 +615,12 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             ntab2 = ntab2[:limite]
             nuces = [val[1] for val in ntab2]
             dlg.Update(3, u'concordancier...')
             ntab2 = ntab2[:limite]
             nuces = [val[1] for val in ntab2]
             dlg.Update(3, u'concordancier...')
-            #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
-            ucestxt1 = [row for row in corpus.getconcorde(nuces)]
-            ucestxt = []
-            ucis_txt = []
-            for uce in ucestxt1 :
-                ucetxt = ' '+uce[1]+' '
-                ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
-                for lem in self.la :
-                    listmot = corpus.getlems()[lem].formes
-                    for id in listmot :
-                        forme = corpus.getforme(id).forme
-                        ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
-                ucestxt.append(ucetxt)        
-            #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
-            dlg.Update(4, u'texte...')
-            #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
-            win = message(self, u"Segments de texte caractéristiques - Classe %i" % self.cl, (750, 600))
-            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>'
-            win.HtmlPage.SetPage(win.html)
+            ucis_txt, ucestxt = doconcorde(corpus, nuces, self.la, uci = uci)
+            items = dict([[i, '<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table><br>' % ntab2[i][0], ucestxt[i]])] for i, uce in enumerate(nuces)])
             dlg.Destroy()
             dlg.Destroy()
+            win = message(self, items, u"Segments de texte caractéristiques - Classe %i" % self.cl, (750, 600), uceids = nuces)
+            #win.html = '<html>\n' + '<br>'.join(['<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table>' % ntab2[i][0], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+            #win.HtmlPage.SetPage(win.html)
             win.Show(True)
     
     def on_tablex(self, evt):
             win.Show(True)
     
     def on_tablex(self, evt):
@@ -575,28 +640,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
         nbcl = len(title)
         nbwords = len(words)
         tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
         nbcl = len(title)
         nbwords = len(words)
-        txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
-        #print 'ATTENTION TEST R'
-        #txt = """
-        #sink('/Users/pierre/Desktop/qdfqsdfqsdfqsdf.txt')
-        #Sys.getlocale()
-        #sink()
-        #"""
-        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
-        file = open(tmpscript,'w')
-        file.write(txt)
-        file.close()
-        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
-        w = 100 + (20 * nbwords) + (100 * nbcl)
-        h = 100 + (nbwords * 15)
-        if w > 1100 : w = 1100
-        if h > 800 : h = 800
-        if h < 450 : h = 450
-        win = MessageImage(self, u"Graphique", size=(w, h))
-        win.addsaveimage(tmpgraph)
-        txt = "<img src='%s'>" % tmpgraph
-        win.HtmlPage.SetPage(txt)
-        win.Show(True)
+        BarFrame(self.Source.parent, tableout, title, words)
 
     def onlexdendro(self, evt):
         if 'corpus' in dir(self.Source):
 
     def onlexdendro(self, evt):
         if 'corpus' in dir(self.Source):
@@ -612,36 +656,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         fchistable = [line[0] for line in chistable]
         words = self.getselectedwords()
         tableout = [vchistable[fchistable.index(word)] for word in words]
         fchistable = [line[0] for line in chistable]
         words = self.getselectedwords()
         tableout = [vchistable[fchistable.index(word)] for word in words]
-        tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
-        txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
-        rownames = 'c("' + '","'.join(words) + '")'
-        colnames = 'c("' + '","'.join(title) + '")'
-        nbcl = len(title)
-        rownb = len(words)
-        txt = """
-        load("%s")
-        di <- matrix(data=%s, nrow=%i, byrow = TRUE)
-        rownames(di)<- %s
-        colnames(di) <- %s
-        library(ape)
-        source("%s")
-        height <- (30*ncol(di)) + (15*nrow(di))
-        height <- ifelse(height <= 400, 400, height)
-        width <- 500
-        open_file_graph("%s", width=width, height=height)
-        plot.dendro.lex(tree.cut1$tree.cl, di)
-        """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
-        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
-        file = open(tmpscript,'w')
-        file.write(txt)
-        file.close()
-        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
-        win = MessageImage(self, u"Graphique", size=(700, 500))
-        win.addsaveimage(tmpgraph)
-        txt = "<img src='%s'>" % tmpgraph
-        win.HtmlPage.SetPage(txt)
-        win.Show(True)
-
+        BarFrame(self.Source.parent, tableout, title, words, tree = self.Source.pathout['Rdendro'])
 
     def make_concord(self, uces, title, color = 'red') :
         corpus = self.Source.corpus
 
     def make_concord(self, uces, title, color = 'red') :
         corpus = self.Source.corpus
@@ -650,44 +665,37 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         while self.GetNextSelected(last) != -1:
             last = self.GetNextSelected(last)
             ListWord.append(self.getColumnText(last, 6))
         while self.GetNextSelected(last) != -1:
             last = self.GetNextSelected(last)
             ListWord.append(self.getColumnText(last, 6))
-        listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
-        win = message(self, title, size=(750, 600))
-        toshow = ['<html>\n<H1>Concordancier</H1>\n']
-        toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
-        duce = {}
         ucef = []
         ucef = []
-        for word in ListWord : 
-            ucef += list(set(corpus.getlemuces(word)).intersection(uces))
-        ucef = list(set(ucef))
-        ucef.sort()
-        res = corpus.getconcorde(ucef)
-        txt = '<br>'.join(toshow) +'<br><br>'
-        for uce in res :
-            ucetxt = ' '+uce[1]+' '
-            txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
-            for forme in listmot:
-                forme = corpus.getforme(forme).forme
-                ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
-            txt += ucetxt + '<br><br>'
-        win.HtmlPage.SetPage(txt)
+        if self.Source.parametres['classif_mode'] != 2 :
+            for word in ListWord : 
+                uci = False
+                ucef += list(set(corpus.getlemuces(word)).intersection(uces))
+        else :
+            for word in ListWord : 
+                ucef += list(set(corpus.getlemucis(word)).intersection(uces))            
+                uci = True
+        ucis_txt, ucestxt = doconcorde(corpus, ucef, ListWord, uci = uci)
+        items = dict([[i, '<br><br>'.join([ucis_txt[i], ucestxt[i]])] for i in range(0,len(ucestxt))])
+        win = message(self, items, title, (800, 500), uceids = ucef)
         return win
 
     def OnPopupTwo(self, event):
         return win
 
     def OnPopupTwo(self, event):
-        corpus = self.Source.corpus
-        uces = corpus.lc[self.cl-1]
-        win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
-        win.Show(True)
+        if 'corpus' in dir(self.Source) :
+            corpus = self.Source.corpus
+            uces = corpus.lc[self.cl-1]
+            win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
+            win.Show(True)
     
     def OnPopupThree(self, event):
         corpus = self.Source.corpus
         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
     
     def OnPopupThree(self, event):
         corpus = self.Source.corpus
         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
-        win = self.make_concord(uces, "Concordancier - UCE classées")
+        win = self.make_concord(uces, "Concordancier - Segments de texte classés")
         win.Show(True)
         
     def OnPopupFour(self, event):
         corpus = self.Source.corpus
         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
         win.Show(True)
         
     def OnPopupFour(self, event):
         corpus = self.Source.corpus
         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
-        win = self.make_concord(uces, "Concordancier - Toutes les UCE")
+        win = self.make_concord(uces, "Concordancier - Tous les segments de texte")
         win.Show(True)
 
     def OnPopupFive(self, event):
         win.Show(True)
 
     def OnPopupFive(self, event):
@@ -730,22 +738,30 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         rep = []
         #FIXME : donner aussi eff reel a la place de nb uce
         for forme in lems[word].formes :
         rep = []
         #FIXME : donner aussi eff reel a la place de nb uce
         for forme in lems[word].formes :
-            ucef = list(set(corpus.getworduces(forme)).intersection(uces))
+            if self.Source.parametres['classif_mode'] != 2 :
+                ucef = list(set(corpus.getworduces(forme)).intersection(uces))
+            else :
+                ucef = list(set(corpus.getworducis(forme)).intersection(uces))
             #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
             if ucef != [] :
                 nb = len(ucef)
                 rep.append([corpus.getforme(forme).forme, nb])
         rep.sort(key = itemgetter(1), reverse = True)
             #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
             if ucef != [] :
                 nb = len(ucef)
                 rep.append([corpus.getforme(forme).forme, nb])
         rep.sort(key = itemgetter(1), reverse = True)
-        win = message(self, u"Formes associées", wx.Size(300, 200))
-        win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
-        win.HtmlPage.SetPage(win.html)
+        #win = message(self, u"Formes associées", wx.Size(300, 200))
+        items = dict([[i, '\t:\t'.join([str(val) for val in forme])] for i, forme in enumerate(rep)])
+        win = message(self, items, u"Formes associées", (300, 200))
+        #win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
+        #win.HtmlPage.SetPage(win.html)
         win.Show(True)
         win.Show(True)
+    
+    def OnMakeTgen(self, evt):
+        self.parent.tree.OnTgenEditor(self.getselectedwords())    
 
 
 class wliste(wx.Frame):
     def __init__(self, parent, id, title, d, fline, size=(600, 500)):
         wx.Frame.__init__(self, parent, id)
 
 
 class wliste(wx.Frame):
     def __init__(self, parent, id, title, d, fline, size=(600, 500)):
         wx.Frame.__init__(self, parent, id)
-        self.liste = ListForSpec(self, parent, d, fline, menu = False)
+        self.liste = ListForSpec(self, parent, d, fline[1:], menu = False)
         self.button_1 = wx.Button(self, -1, "Fermer")
         self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.button_1 = wx.Button(self, -1, "Fermer")
         self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)