Labbe's distance
authorPierre Ratinaud <ratinaud@univ-tlse2.fr>
Tue, 3 Jan 2017 10:32:49 +0000 (11:32 +0100)
committerPierre Ratinaud <ratinaud@univ-tlse2.fr>
Tue, 3 Jan 2017 10:32:49 +0000 (11:32 +0100)
PrintRScript.py
iramuteq.py
layout.py
openanalyse.py

index a19680d..be81a14 100644 (file)
@@ -18,7 +18,7 @@ class PrintRScript :
         self.pathout = analyse.pathout
         self.analyse = analyse
         self.parametres = analyse.parametres
         self.pathout = analyse.pathout
         self.analyse = analyse
         self.parametres = analyse.parametres
-        #self.scriptout = self.pathout['lastRscript.R']
+        #self.scriptout = ffr(self.pathout['lastRscript.R'])
         self.scriptout = self.pathout['temp']
         self.script =  u"#Script genere par IRaMuTeQ - %s\n" % datetime.now().ctime()
 
         self.scriptout = self.pathout['temp']
         self.script =  u"#Script genere par IRaMuTeQ - %s\n" % datetime.now().ctime()
 
@@ -155,7 +155,7 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv
     data1 <- as(data1, "dgCMatrix")
     row.names(data1) <- 1:nrow(data1)
     """ % ffr(DicoPath['TableUc1'])
     data1 <- as(data1, "dgCMatrix")
     row.names(data1) <- 1:nrow(data1)
     """ % ffr(DicoPath['TableUc1'])
-    
+
     if classif_mode == 0:
         txt += """
         data2 <- readMM("%s")
     if classif_mode == 0:
         txt += """
         data2 <- readMM("%s")
@@ -167,28 +167,28 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv
     chd1<-CHD(data1, x = nbt, mode.patate = mode.patate, svd.method =
     svd.method, libsvdc.path = libsvdc.path, log.file = log1)
     """ % ffr(DicoPath['log-chd1.txt'])
     chd1<-CHD(data1, x = nbt, mode.patate = mode.patate, svd.method =
     svd.method, libsvdc.path = libsvdc.path, log.file = log1)
     """ % ffr(DicoPath['log-chd1.txt'])
-    
+
     if classif_mode == 0:
         txt += """
     log2 <- "%s"
     chd2<-CHD(data2, x = nbt, mode.patate = mode.patate, svd.method =
     svd.method, libsvdc.path = libsvdc.path) log.file = log2)
     """ % ffr(DicoPath['log-chd2.txt'])
     if classif_mode == 0:
         txt += """
     log2 <- "%s"
     chd2<-CHD(data2, x = nbt, mode.patate = mode.patate, svd.method =
     svd.method, libsvdc.path = libsvdc.path) log.file = log2)
     """ % ffr(DicoPath['log-chd2.txt'])
-    
+
     txt += """
     #lecture des uce
     listuce1<-read.csv2("%s")
     """ % ffr(DicoPath['listeuce1'])
     txt += """
     #lecture des uce
     listuce1<-read.csv2("%s")
     """ % ffr(DicoPath['listeuce1'])
-    
+
     if classif_mode == 0:
         txt += """
         listuce2<-read.csv2("%s")
         """ % ffr(DicoPath['listeuce2'])
     if classif_mode == 0:
         txt += """
         listuce2<-read.csv2("%s")
         """ % ffr(DicoPath['listeuce2'])
-        
+
     txt += """
     rm(data1)
     """
     txt += """
     rm(data1)
     """
-    
+
     if classif_mode == 0:
         txt += """
         rm(data2)
     if classif_mode == 0:
         txt += """
         rm(data2)
@@ -208,14 +208,14 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv
     write.csv2(n1, file="%s")
     rm(n1)
     """ % (classif_mode, mincl, ffr(DicoPath['uce']), ffr(DicoPath['n1.csv']))
     write.csv2(n1, file="%s")
     rm(n1)
     """ % (classif_mode, mincl, ffr(DicoPath['uce']), ffr(DicoPath['n1.csv']))
-    
+
     txt += """
     tree.tot1 <- make_tree_tot(chd1)
 #    open_file_graph("%s", widt = 600, height=400)
 #    plot(tree.tot1$tree.cl)
 #    dev.off()
     """ % ffr(DicoPath['arbre1'])
     txt += """
     tree.tot1 <- make_tree_tot(chd1)
 #    open_file_graph("%s", widt = 600, height=400)
 #    plot(tree.tot1$tree.cl)
 #    dev.off()
     """ % ffr(DicoPath['arbre1'])
-    
+
     if classif_mode == 0:
         txt += """
         classeuce2 <- chd.result$cuce2
     if classif_mode == 0:
         txt += """
         classeuce2 <- chd.result$cuce2
@@ -223,19 +223,19 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv
 #        open_file_graph("%s", width = 600, height=400)
 #        plot(tree.tot2$tree.cl)
 #        dev.off()
 #        open_file_graph("%s", width = 600, height=400)
 #        plot(tree.tot2$tree.cl)
 #        dev.off()
-        """ % ffr(DicoPath['arbre2'] ) 
-              
+        """ % ffr(DicoPath['arbre2'] )
+
     txt += """
     tree.cut1 <- make_dendro_cut_tuple(tree.tot1$dendro_tuple, chd.result$coord_ok, classeuce1, 1, nbt)
     save(tree.cut1, file="%s")
     txt += """
     tree.cut1 <- make_dendro_cut_tuple(tree.tot1$dendro_tuple, chd.result$coord_ok, classeuce1, 1, nbt)
     save(tree.cut1, file="%s")
-    
+
     open_file_graph("%s", width = 600, height=400)
     plot.dendropr(tree.cut1$tree.cl,classes, histo=TRUE)
     open_file_graph("%s", width = 600, height=400)
     plot(tree.cut1$dendro_tot_cl)
     dev.off()
     """ % (ffr(DicoPath['Rdendro']), ffr(DicoPath['dendro1']), ffr(DicoPath['arbre1']))
     open_file_graph("%s", width = 600, height=400)
     plot.dendropr(tree.cut1$tree.cl,classes, histo=TRUE)
     open_file_graph("%s", width = 600, height=400)
     plot(tree.cut1$dendro_tot_cl)
     dev.off()
     """ % (ffr(DicoPath['Rdendro']), ffr(DicoPath['dendro1']), ffr(DicoPath['arbre1']))
-    
+
     if classif_mode == 0:
         txt += """
         tree.cut2 <- make_dendro_cut_tuple(tree.tot2$dendro_tuple, chd.result$coord_ok, classeuce2, 2, nbt)
     if classif_mode == 0:
         txt += """
         tree.cut2 <- make_dendro_cut_tuple(tree.tot2$dendro_tuple, chd.result$coord_ok, classeuce2, 2, nbt)
@@ -246,12 +246,12 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv
         plot(tree.cut2$dendro_tot_cl)
         dev.off()
         """ % (ffr(DicoPath['dendro2']), ffr(DicoPath['arbre2']))
         plot(tree.cut2$dendro_tot_cl)
         dev.off()
         """ % (ffr(DicoPath['dendro2']), ffr(DicoPath['arbre2']))
-        
+
     txt += """
     txt += """
-    
+
     #save.image(file="%s")
     """ % (ffr(DicoPath['RData']))
     #save.image(file="%s")
     """ % (ffr(DicoPath['RData']))
-    
+
     fileout = open(DicoPath['Rchdtxt'], 'w')
     fileout.write(txt)
     fileout.close()
     fileout = open(DicoPath['Rchdtxt'], 'w')
     fileout.write(txt)
     fileout.close()
@@ -1307,4 +1307,28 @@ class FreqMultiScript(PrintRScript):
         dev.off()
         """ % ffr(self.pathout['barplotrow.png'])
         self.add(txt)
         dev.off()
         """ % ffr(self.pathout['barplotrow.png'])
         self.add(txt)
-        self.write()  
+        self.write()
+
+class LabbeScript(PrintRScript) :
+    def make_script(self) :
+        self.sources([self.analyse.parent.RscriptsPath['distance-labbe.R'],
+                      self.analyse.parent.RscriptsPath['Rgraph']])
+        txt = """
+        tab <- read.csv2("%s", header=TRUE, sep=';', row.names=1)
+        """ % (self.pathout['tableafcm.csv'])
+        txt += """
+        dist.mat <- dist.labbe(tab)
+        dist.mat <- as.dist(dist.mat, upper=F, diag=F)
+        write.table(as.matrix(dist.mat), "%s", sep='\t')
+        library(cluster)
+        library(ape)
+        chd <- hclust(dist.mat, method="ward.D2")
+        open_file_graph("%s", width=1000, height=1000, svg=F)
+        par(cex=1.2)
+        plot.phylo(as.phylo(chd), type='unrooted', lab4ut="axial")
+        dev.off()
+        """ % (self.pathout['distmat.csv'], self.pathout['dist-labbe.png'])
+        self.add(txt)
+        self.write()
+
+
index acbff9e..7581997 100644 (file)
@@ -48,6 +48,7 @@ from tabsplitvar import SplitMatrixFromVar
 #from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 #from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
+from textlabbe import DistLabbe
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textreinert import Reinert
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textreinert import Reinert
@@ -103,6 +104,7 @@ ID_Fact_copy = wx.NewId()
 ID_exportmeta = wx.NewId()
 ID_importdmi = wx.NewId()
 ID_merge = wx.NewId()
 ID_exportmeta = wx.NewId()
 ID_importdmi = wx.NewId()
 ID_merge = wx.NewId()
+ID_labbe = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -202,7 +204,8 @@ images_analyses = {
         'subcorpusthema' : 'subcorpusthema.png',
         'preferences' : 'preferences.png',
         'exportmetatable' : 'exportmetatable.png',
         'subcorpusthema' : 'subcorpusthema.png',
         'preferences' : 'preferences.png',
         'exportmetatable' : 'exportmetatable.png',
-        'importdmi' : 'twitter.png'
+        'importdmi' : 'twitter.png',
+        'labbe' : 'spec.png'
          }
 #####################################################################
 
          }
 #####################################################################
 
@@ -268,18 +271,18 @@ class IraFrame(wx.Frame):
         item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
         item.SetBitmap(self.images_analyses['TXM'])
         file_menu.AppendItem(item)
         item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
         item.SetBitmap(self.images_analyses['TXM'])
         file_menu.AppendItem(item)
-        
+
         item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
         item.SetBitmap(self.images_analyses['europress'])
         item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
         item.SetBitmap(self.images_analyses['europress'])
-        file_menu.AppendItem(item)        
-        
+        file_menu.AppendItem(item)
+
         item = wx.MenuItem(file_menu, ID_importdmi, _(u"Import from DMI-TCAT (exp.)").decode('utf8'), _(u"Import from DMI-TCAT (exp.)").decode('utf8'))
         item.SetBitmap(self.images_analyses['importdmi'])
         item = wx.MenuItem(file_menu, ID_importdmi, _(u"Import from DMI-TCAT (exp.)").decode('utf8'), _(u"Import from DMI-TCAT (exp.)").decode('utf8'))
         item.SetBitmap(self.images_analyses['importdmi'])
-        file_menu.AppendItem(item)        
-        
+        file_menu.AppendItem(item)
+
         item = wx.MenuItem(file_menu, ID_merge, _(u'Merge graphs').decode('utf8'), _(u'Merge graphs').decode('utf8'))
         file_menu.AppendItem(item)
         item = wx.MenuItem(file_menu, ID_merge, _(u'Merge graphs').decode('utf8'), _(u'Merge graphs').decode('utf8'))
         file_menu.AppendItem(item)
-        
+
         menuFactiva = wx.Menu()
         fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
         fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
         menuFactiva = wx.Menu()
         fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
         fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
@@ -304,19 +307,19 @@ class IraFrame(wx.Frame):
         self.ID_extractthem = extractthem.GetId()
         file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
 
         self.ID_extractthem = extractthem.GetId()
         file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
 
-               
+
         #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
         #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #file_menu.AppendItem(item)
         #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
         #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #file_menu.AppendItem(item)
-        
+
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
-        
+
         edit_menu = wx.Menu()
         pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
         pref.SetBitmap(self.images_analyses['preferences'])
         edit_menu.AppendItem(pref)
         #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
         edit_menu = wx.Menu()
         pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
         pref.SetBitmap(self.images_analyses['preferences'])
         edit_menu.AppendItem(pref)
         #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
-        
+
         view_menu = wx.Menu()
         home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
         home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
         view_menu = wx.Menu()
         home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
         home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
@@ -338,7 +341,7 @@ class IraFrame(wx.Frame):
                        [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
                        [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
                         ]
                        [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
                        [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
                         ]
-        
+
         for analyse in matanalyses :
             if not isinstance(analyse, dict) :
                 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
         for analyse in matanalyses :
             if not isinstance(analyse, dict) :
                 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
@@ -376,10 +379,11 @@ class IraFrame(wx.Frame):
         #menu_splittab.AppendItem(splitvar)
         #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
         self.matrix_menu = matrix_menu
         #menu_splittab.AppendItem(splitvar)
         #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
         self.matrix_menu = matrix_menu
-        
+
         text_menu = wx.Menu()
         analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
                          [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
         text_menu = wx.Menu()
         analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
                          [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
+                         [ID_labbe, _(u"Labbe Distance").decode('utf8'),'labbe'],
                          {'name' : _(u"Clustering").decode('utf8'),
                           'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
                          [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
                          {'name' : _(u"Clustering").decode('utf8'),
                           'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
                          [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
@@ -389,7 +393,7 @@ class IraFrame(wx.Frame):
                                        [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
                          [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'],
                          ]
                                        [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
                          [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'],
                          ]
-        
+
         for analyse in analyses_text :
             if not isinstance(analyse, dict) :
                 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
         for analyse in analyses_text :
             if not isinstance(analyse, dict) :
                 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
@@ -414,7 +418,7 @@ class IraFrame(wx.Frame):
 #         
 #         text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
         self.text_menu = text_menu
 #         
 #         text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
         self.text_menu = text_menu
-        
+
         help_menu = wx.Menu()
         about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
         about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
         help_menu = wx.Menu()
         about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
         about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
@@ -424,14 +428,14 @@ class IraFrame(wx.Frame):
         help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
         help_menu.AppendItem(help)
         #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
         help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
         help_menu.AppendItem(help)
         #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
-        
+
         self.mb.Append(file_menu, _(u"File").decode('utf8'))
         self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
         self.mb.Append(view_menu, _(u"View").decode('utf8'))
         self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
         self.mb.Append(file_menu, _(u"File").decode('utf8'))
         self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
         self.mb.Append(view_menu, _(u"View").decode('utf8'))
         self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
-        
+
         self.SetMenuBar(self.mb)
 #--------------------------------------------------------------------
         self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
         self.SetMenuBar(self.mb)
 #--------------------------------------------------------------------
         self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
@@ -459,7 +463,7 @@ class IraFrame(wx.Frame):
         tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
         tb1.AddSeparator()
         tb1.AddLabelTool(ID_importdmi, "ImportDMI", self.images_analyses['importdmi'], shortHelp= _(u"Import from DMI-TCAT (exp.)").decode('utf8'), longHelp=_(u"Import from DMI-TCAT (exp.)").decode('utf8'))
         tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
         tb1.AddSeparator()
         tb1.AddLabelTool(ID_importdmi, "ImportDMI", self.images_analyses['importdmi'], shortHelp= _(u"Import from DMI-TCAT (exp.)").decode('utf8'), longHelp=_(u"Import from DMI-TCAT (exp.)").decode('utf8'))
-        tb1.AddSeparator()        
+        tb1.AddSeparator()
         tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8'))
         tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8'))
         tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8'))
         tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8'))
         tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8'))
         tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8'))
@@ -469,7 +473,7 @@ class IraFrame(wx.Frame):
         tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8'))
         tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8'))
         tb1.Realize()
         tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8'))
         tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8'))
         tb1.Realize()
-        
+
         tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         for analyse in analyses_text :
         tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         for analyse in analyses_text :
@@ -479,7 +483,7 @@ class IraFrame(wx.Frame):
                 for subana in analyse['content'] :
                     tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
         tb_text.Realize()
                 for subana in analyse['content'] :
                     tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
         tb_text.Realize()
-        
+
         tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         for analyse in matanalyses :
         tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         for analyse in matanalyses :
@@ -487,9 +491,9 @@ class IraFrame(wx.Frame):
                 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
             else :
                 for subana in analyse['content'] :
                 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
             else :
                 for subana in analyse['content'] :
-                    tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])        
+                    tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
         tb_mat.Realize()
         tb_mat.Realize()
-        
+
         tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8'))
         tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8'))
@@ -498,7 +502,7 @@ class IraFrame(wx.Frame):
 #------------------------------------------------------------------------------------------------
 
         self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
 #------------------------------------------------------------------------------------------------
 
         self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
-                      
+
         #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
         #                  Name("Text").CenterPane())                      
         self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
         #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
         #                  Name("Text").CenterPane())                      
         self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
@@ -515,7 +519,7 @@ class IraFrame(wx.Frame):
         self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
                           Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
                           MinimizeButton(True))
         self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
                           Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
                           MinimizeButton(True))
-        
+
         #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         notebook_flags =  aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER
         #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         notebook_flags =  aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER
@@ -529,14 +533,14 @@ class IraFrame(wx.Frame):
         #                      CenterPane())
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
         #                      CenterPane())
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
-                              CenterPane())        
-        
+                              CenterPane())
+
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
-                        
+
         #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
         #                  Name("tb1").Caption("Fichiers").
         #                  ToolbarPane().Top().
         #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
         #                  Name("tb1").Caption("Fichiers").
         #                  ToolbarPane().Top().
@@ -545,25 +549,25 @@ class IraFrame(wx.Frame):
                           Name("tb1").Caption("Fichiers").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
                           Name("tb1").Caption("Fichiers").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
-        
+
         self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
                           Name("tb_text").Caption("analyse_text").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
         self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
                           Name("tb_text").Caption("analyse_text").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
-        
+
         self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
                           Name("tb_mat").Caption("analyse_matrix").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
         self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
                           Name("tb_mat").Caption("analyse_matrix").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
-                
+
         self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
                           Name("tb_help").Caption("help").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
         self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
                           Name("tb_help").Caption("help").
                           ToolbarPane().Top().
                           LeftDockable(True).RightDockable(False))
-                
+
         self._mgr.GetPane('tb_text').Hide()
         self._mgr.GetPane('tb_mat').Hide()
         self._mgr.GetPane('tb_text').Hide()
         self._mgr.GetPane('tb_mat').Hide()
-        
+
         self.ShowAPane("Intro_Text")
         self._mgr.GetPane("lefttree").Show()
         self._mgr.GetPane("classif_tb").Hide()
         self.ShowAPane("Intro_Text")
         self._mgr.GetPane("lefttree").Show()
         self._mgr.GetPane("classif_tb").Hide()
@@ -598,6 +602,7 @@ class IraFrame(wx.Frame):
         #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
         #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
+        self.Bind(wx.EVT_MENU, self.OnTextLabbe, id=ID_labbe)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
         self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
         self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
@@ -698,7 +703,7 @@ class IraFrame(wx.Frame):
                 with open(ConfigPath['path'], 'w') as f :
                     self.PathPath.write(f)
         else:
                 with open(ConfigPath['path'], 'w') as f :
                     self.PathPath.write(f)
         else:
-            BestRPath = True 
+            BestRPath = True
         if BestRPath :
             self.RPath = self.PathPath.get('PATHS', 'rpath')
             if New :
         if BestRPath :
             self.RPath = self.PathPath.get('PATHS', 'rpath')
             if New :
@@ -737,18 +742,18 @@ class IraFrame(wx.Frame):
             if Show :
                 self._mgr.GetPane('tb_text').Show()
             else :
             if Show :
                 self._mgr.GetPane('tb_text').Show()
             else :
-                self._mgr.GetPane('tb_text').Hide()   
+                self._mgr.GetPane('tb_text').Hide()
         elif menu == 'matrix' :
             menu_pos = 3
             if Show :
                 self._mgr.GetPane('tb_mat').Show()
             else :
         elif menu == 'matrix' :
             menu_pos = 3
             if Show :
                 self._mgr.GetPane('tb_mat').Show()
             else :
-                self._mgr.GetPane('tb_mat').Hide()           
+                self._mgr.GetPane('tb_mat').Hide()
         elif menu == 'view' :
             menu_pos = 2
         else :
             menu_pos = None
         elif menu == 'view' :
             menu_pos = 2
         else :
             menu_pos = None
-            
+
         #menu_pos = self.mb.FindMenu(menu)
         if not menu_pos is None :
             self.mb.EnableTop(menu_pos, Show)
         #menu_pos = self.mb.FindMenu(menu)
         if not menu_pos is None :
             self.mb.EnableTop(menu_pos, Show)
@@ -777,7 +782,7 @@ class IraFrame(wx.Frame):
                     self.tableau.make_content()
                     OpenAnalyse(self, self.tableau.parametres)
                     self.tree.OnItemAppend(self.tableau.parametres)
                     self.tableau.make_content()
                     OpenAnalyse(self, self.tableau.parametres)
                     self.tree.OnItemAppend(self.tableau.parametres)
-                    del busy 
+                    del busy
                 except :
                     del busy
                     BugReport(self)
                 except :
                     del busy
                     BugReport(self)
@@ -925,25 +930,25 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
         self.x = self.x + 20
         x = self.x
         pt = self.ClientToScreen(wx.Point(0, 0))
         self.x = self.x + 20
         x = self.x
         pt = self.ClientToScreen(wx.Point(0, 0))
-        
+
         return wx.Point(pt.x + x, pt.y + x)
         return wx.Point(pt.x + x, pt.y + x)
-    
+
     def ShowAPane(self, panel):
         for pane in self._mgr.GetAllPanes() :
     def ShowAPane(self, panel):
         for pane in self._mgr.GetAllPanes() :
-            if not pane.IsToolbar() and pane.name != 'lefttree': 
+            if not pane.IsToolbar() and pane.name != 'lefttree':
                 pane.Hide()
         self._mgr.GetPane(panel).Show()
         self._mgr.Update()
                 pane.Hide()
         self._mgr.GetPane(panel).Show()
         self._mgr.Update()
-        
+
     def OnAcceuil(self, event):
         self.ShowAPane(u"Intro_Text")
         event.Skip()
     def OnAcceuil(self, event):
         self.ShowAPane(u"Intro_Text")
         event.Skip()
-    
+
     def CreateHTMLCtrl(self):
         ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
         if "gtk2" in wx.PlatformInfo:
             ctrl.SetStandardFonts()
     def CreateHTMLCtrl(self):
         ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
         if "gtk2" in wx.PlatformInfo:
             ctrl.SetStandardFonts()
-        ctrl.SetPage(u"text")        
+        ctrl.SetPage(u"text")
         return ctrl
 
     def ShowTab(self, evt):
         return ctrl
 
     def ShowTab(self, evt):
@@ -963,16 +968,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
         #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
             analyse(self, matrix, parametres = parametres, dlg = dlgnb)
         except:
         #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
             analyse(self, matrix, parametres = parametres, dlg = dlgnb)
         except:
-            BugReport(self)           
+            BugReport(self)
 
     def OnFreq(self, event, matrix = None):
         self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
 
     def OnFreq(self, event, matrix = None):
         self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
-    
+
     def OnFreqMulti(self, event, matrix = None):
         self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
 
     def OnChi2(self, event, matrix = None):
     def OnFreqMulti(self, event, matrix = None):
         self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
 
     def OnChi2(self, event, matrix = None):
-        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) 
+        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
 
     def OnChi2McNemar(self, event, matrix = None):
         self.analyse_matrix(McNemar, matrix = matrix, analyse_type = 'chi2mcnemar', dlgnb = 3)
 
     def OnChi2McNemar(self, event, matrix = None):
         self.analyse_matrix(McNemar, matrix = matrix, analyse_type = 'chi2mcnemar', dlgnb = 3)
@@ -985,10 +990,10 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
         #    matrix = self.tree.getmatrix()
         #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
         self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
         #    matrix = self.tree.getmatrix()
         #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
         self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
-            
+
     def OnStudent(self, event):
         try:
     def OnStudent(self, event):
         try:
-            MakeStudent(self) 
+            MakeStudent(self)
         except:
             BugReport(self)
 
         except:
             BugReport(self)
 
@@ -1006,7 +1011,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
                 PlaySound(self)
         except:
             BugReport(self)
                 PlaySound(self)
         except:
             BugReport(self)
+
 #     def OnCHDReinert(self, event):
 #         try:
 #          #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
 #     def OnCHDReinert(self, event):
 #         try:
 #          #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
@@ -1018,35 +1023,35 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
     def OnMergeGraph(self, evt):
         #FIXME
         AnalyseMerge(self, {'type': 'merge', 'fileout' : '/tmp/test.txt'}, dlg = 5)
     def OnMergeGraph(self, evt):
         #FIXME
         AnalyseMerge(self, {'type': 'merge', 'fileout' : '/tmp/test.txt'}, dlg = 5)
-    
+
     def OnProto(self, evt, matrix = None) :
         self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) 
         #Prototypical(self, {'type' : 'proto'})
     def OnProto(self, evt, matrix = None) :
         self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) 
         #Prototypical(self, {'type' : 'proto'})
-    
+
     def OnSplitVar(self, evt, matrix = None):
         if matrix is None :
             matrix = self.tree.getmatrix()
         self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
         #matrix = self.tree.getmatrix()
     def OnSplitVar(self, evt, matrix = None):
         if matrix is None :
             matrix = self.tree.getmatrix()
         self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
         #matrix = self.tree.getmatrix()
-        
+
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
         try :
             #self.Text = SimiTxt(self)
             if corpus is None :
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
         try :
             #self.Text = SimiTxt(self)
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
             self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
-    
+
     def OnWordCloud(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR WORDCLOUD'
         try :
             if corpus is None :
     def OnWordCloud(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR WORDCLOUD'
         try :
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
             self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
@@ -1068,13 +1073,13 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
             if corpus is None :
                 corpus = self.tree.getcorpus()
             self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
             if corpus is None :
                 corpus = self.tree.getcorpus()
             self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
-            
+
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
             BugReport(self)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
             BugReport(self)
-        
-    def OnTextSpec(self, event, corpus = None):  
+
+    def OnTextSpec(self, event, corpus = None):
         try:
             #self.Text = AsLexico(self)
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
         try:
             #self.Text = AsLexico(self)
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
@@ -1085,7 +1090,18 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
                 PlaySound(self)
         except:
             BugReport(self)
                 PlaySound(self)
         except:
             BugReport(self)
-    
+
+    def OnTextLabbe(self, event, corpus = None):
+        try:
+            if corpus is None :
+                corpus = self.tree.getcorpus()
+            self.Text = DistLabbe(self, corpus, parametres = {'type' : 'labbe'}, dlg = 3)
+            if self.Text.val == wx.ID_OK :
+                PlaySound(self)
+        except:
+            BugReport(self)
+
+
     def OnTextAfcm(self, event):
         try:
             AfcUci(self)
     def OnTextAfcm(self, event):
         try:
             AfcUci(self)
@@ -1116,23 +1132,23 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
             ImportFactiva(self, 'txm')
         except :
             BugReport(self)
             ImportFactiva(self, 'txm')
         except :
             BugReport(self)
-    
+
     def OnImportEuropress(self, evt) :
         try :
             ImportFactiva(self, 'euro')
         except :
             BugReport(self)
     def OnImportEuropress(self, evt) :
         try :
             ImportFactiva(self, 'euro')
         except :
             BugReport(self)
-    
+
     def OnImportDMI(self, evt):
         ImportDMI(self, {})
     def OnImportDMI(self, evt):
         ImportDMI(self, {})
-    
+
     def OnExportMeta(self, evt, corpus = None):
         if corpus is None :
             corpus = self.tree.getcorpus()
         try :
             ExportMetaTable(self, corpus)
         except :
     def OnExportMeta(self, evt, corpus = None):
         if corpus is None :
             corpus = self.tree.getcorpus()
         try :
             ExportMetaTable(self, corpus)
         except :
-            BugReport(self) 
+            BugReport(self)
 
     def ExtractTools(self, evt) :
         ID = evt.GetId()
 
     def ExtractTools(self, evt) :
         ID = evt.GetId()
@@ -1148,7 +1164,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, Ă‰tats-Unis."""
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
             self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
index 6e5bdb9..ad87da6 100644 (file)
--- a/layout.py
+++ b/layout.py
@@ -82,8 +82,8 @@ class GraphPanelAfc(wx.Panel):
                 todel.append(i)
                 b += 1
         self.list_graph = [graph for i, graph in enumerate(self.list_graph) if i not in todel]
                 todel.append(i)
                 b += 1
         self.list_graph = [graph for i, graph in enumerate(self.list_graph) if i not in todel]
-                
-        self.param = { 'typegraph' : 0, 
+
+        self.param = { 'typegraph' : 0,
               'width' : 800,
               'height' : 800,
               'what' : 0,
               'width' : 800,
               'height' : 800,
               'what' : 0,
@@ -94,7 +94,7 @@ class GraphPanelAfc(wx.Panel):
               'select_nb' : 50,
               'select_chi' : 4,
               'nbchic' : 30,
               'select_nb' : 50,
               'select_chi' : 4,
               'nbchic' : 30,
-              'over' : 0, 
+              'over' : 0,
               'cex_txt' : 0,
               'txt_min' : 5,
               'txt_max' : 40,
               'cex_txt' : 0,
               'txt_min' : 5,
               'txt_max' : 40,
@@ -117,7 +117,7 @@ class GraphPanelAfc(wx.Panel):
         self.panel_1.SetScrollRate(20, 20)
         self.panel_1.SetFocus()
 
         self.panel_1.SetScrollRate(20, 20)
         self.panel_1.SetFocus()
 
-    def __do_layout(self):    
+    def __do_layout(self):
         self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
         self.sizer_3 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
         self.sizer_3 = wx.BoxSizer(wx.VERTICAL)
@@ -129,7 +129,7 @@ class GraphPanelAfc(wx.Panel):
             self.Bind(wx.EVT_BUTTON, self.on_delete_image, self.buts[i])
         self.panel_1.SetSizer(self.sizer_3)
         self.sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)
             self.Bind(wx.EVT_BUTTON, self.on_delete_image, self.buts[i])
         self.panel_1.SetSizer(self.sizer_3)
         self.sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)
-        self.SetSizer(self.sizer_2) 
+        self.SetSizer(self.sizer_2)
 
     def on_delete_image(self, event) :
         image_id = int(event.GetEventObject().GetName())
 
     def on_delete_image(self, event) :
         image_id = int(event.GetEventObject().GetName())
@@ -156,7 +156,7 @@ class GraphPanelAfc(wx.Panel):
             self.Layout()
         else :
             dial.Destroy()
             self.Layout()
         else :
             dial.Destroy()
-    
+
     def onrightclick(self, event):
         image_id = int(event.GetEventObject().GetName())
         image_path = self.list_graph[image_id][0]
     def onrightclick(self, event):
         image_id = int(event.GetEventObject().GetName())
         image_path = self.list_graph[image_id][0]
@@ -201,7 +201,7 @@ class GraphPanelAfc(wx.Panel):
                           'select_nb' : dial.spin_nb.GetValue(),
                           'select_chi' : dial.spin_chi.GetValue(),
                           'nbchic' : dial.spin_nbchic.GetValue(),
                           'select_nb' : dial.spin_nb.GetValue(),
                           'select_chi' : dial.spin_chi.GetValue(),
                           'nbchic' : dial.spin_nbchic.GetValue(),
-                          'over' : dial.check3.GetValue(), 
+                          'over' : dial.check3.GetValue(),
                           'cex_txt' : dial.check4.GetValue(),
                           'txt_min' : dial.spin_min.GetValue(),
                           'txt_max' : dial.spin_max.GetValue(),
                           'cex_txt' : dial.check4.GetValue(),
                           'txt_min' : dial.spin_min.GetValue(),
                           'txt_max' : dial.spin_max.GetValue(),
@@ -226,7 +226,7 @@ class GraphPanelAfc(wx.Panel):
                 afc <- afcf
                 afc_table <- afcf_table
                 chistabletot <- specfp
                 afc <- afcf
                 afc_table <- afcf_table
                 chistabletot <- specfp
-                """ 
+                """
             elif self.itempath == 'liste_graph_afct' :
                 txt +="""
                 afc <- afct
             elif self.itempath == 'liste_graph_afct' :
                 txt +="""
                 afc <- afct
@@ -266,10 +266,10 @@ class GraphPanelAfc(wx.Panel):
                                   'bargraphw' : 60*int(self.param['clnb']),
                     }
                     web = WebExport(self.ira, parametres)
                                   'bargraphw' : 60*int(self.param['clnb']),
                     }
                     web = WebExport(self.ira, parametres)
-                    self.fileout = web.exportafc()              
+                    self.fileout = web.exportafc()
                 if self.param['typegraph'] == 3 :
                     fileout = os.path.join(os.path.basename(self.fileout), 'index.html')
                 if self.param['typegraph'] == 3 :
                     fileout = os.path.join(os.path.basename(self.fileout), 'index.html')
-                else : 
+                else :
                     fileout = os.path.basename(self.fileout)
                 self.list_graph.append([fileout, txt])
                 print_liste(self.DictPathOut[self.itempath], self.list_graph)
                     fileout = os.path.basename(self.fileout)
                 self.list_graph.append([fileout, txt])
                 print_liste(self.DictPathOut[self.itempath], self.list_graph)
@@ -288,7 +288,7 @@ class GraphPanelAfc(wx.Panel):
                 self.sizer_3.Add(self.buts[-1], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
                 self.sizer_3.Fit(self.panel_1)
                 self.Layout()
                 self.sizer_3.Add(self.buts[-1], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
                 self.sizer_3.Fit(self.panel_1)
                 self.Layout()
-    
+
                 self.panel_1.Scroll(0,self.panel_1.GetScrollRange(wx.VERTICAL))
 #             elif self.param['typegraph'] == 2 :
 #                 parametres = {'gexffile' :  self.fileout,
                 self.panel_1.Scroll(0,self.panel_1.GetScrollRange(wx.VERTICAL))
 #             elif self.param['typegraph'] == 2 :
 #                 parametres = {'gexffile' :  self.fileout,
@@ -304,7 +304,7 @@ class GraphPanelAfc(wx.Panel):
 #                 dial.link.SetURL(afcout)
 #                 dial.Layout()
 #                 dial.ShowModal()
 #                 dial.link.SetURL(afcout)
 #                 dial.Layout()
 #                 dial.ShowModal()
-            
+
 
 class GraphPanel(wx.ScrolledWindow):
     def __init__(self, parent, dico, list_graph, txt = '', style = wx.TAB_TRAVERSAL):
 
 class GraphPanel(wx.ScrolledWindow):
     def __init__(self, parent, dico, list_graph, txt = '', style = wx.TAB_TRAVERSAL):
@@ -325,13 +325,13 @@ class GraphPanel(wx.ScrolledWindow):
                 else :
                     self.listimg.append(wx.StaticBitmap(self, -1, wx.Bitmap(os.path.join(self.dirout,list_graph[i][0]), wx.BITMAP_TYPE_ANY)))
                 self.labels.append(wx.StaticText(self, -1, list_graph[i][1]))
                 else :
                     self.listimg.append(wx.StaticBitmap(self, -1, wx.Bitmap(os.path.join(self.dirout,list_graph[i][0]), wx.BITMAP_TYPE_ANY)))
                 self.labels.append(wx.StaticText(self, -1, list_graph[i][1]))
-        self.Bind(wx.EVT_MOTION, self.onMouseMove) 
+        self.Bind(wx.EVT_MOTION, self.onMouseMove)
         self.__set_properties()
         self.__do_layout()
 
     def __set_properties(self):
         self.EnableScrolling(True,True)
         self.__set_properties()
         self.__do_layout()
 
     def __set_properties(self):
         self.EnableScrolling(True,True)
-        self.SetScrollRate(20, 20)   
+        self.SetScrollRate(20, 20)
         self.SetFocus()
 
 
         self.SetFocus()
 
 
@@ -339,7 +339,7 @@ class GraphPanel(wx.ScrolledWindow):
         self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_2 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
         self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_2 = wx.BoxSizer(wx.VERTICAL)
         self.sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
-        self.sizer_1.Add(self.deb)   
+        self.sizer_1.Add(self.deb)
         for i in range(0, len(self.listimg)):
             self.sizer_1.Add(self.listimg[i], 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
             self.sizer_1.Add(self.labels[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
         for i in range(0, len(self.listimg)):
             self.sizer_1.Add(self.listimg[i], 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
             self.sizer_1.Add(self.labels[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
@@ -349,7 +349,7 @@ class GraphPanel(wx.ScrolledWindow):
 
     def onMouseMove(self, event):
         self.SetFocus()
 
     def onMouseMove(self, event):
         self.SetFocus()
-       
+
 
 def open_antiprofil(panel, AntiProfile, encoding) :
     DictAnti = ReadProfileAsDico(AntiProfile, True, encoding)
 
 def open_antiprofil(panel, AntiProfile, encoding) :
     DictAnti = ReadProfileAsDico(AntiProfile, True, encoding)
@@ -376,7 +376,7 @@ class OpenCHDS():
         self.parametres = parametres
         self.pathout = PathOut(parametres['ira'])
         self.pathout.basefiles(ChdTxtPathOut)
         self.parametres = parametres
         self.pathout = PathOut(parametres['ira'])
         self.pathout.basefiles(ChdTxtPathOut)
-        DictPathOut = self.pathout 
+        DictPathOut = self.pathout
         self.DictPathOut = DictPathOut
         self.dictpathout = DictPathOut
         self.parent = parent
         self.DictPathOut = DictPathOut
         self.dictpathout = DictPathOut
         self.parent = parent
@@ -393,11 +393,11 @@ class OpenCHDS():
                 self.corpus.read_tableau(self.pathout['analyse.db'])
 
         clnb = parametres['clnb']
                 self.corpus.read_tableau(self.pathout['analyse.db'])
 
         clnb = parametres['clnb']
-        dlg = progressbar(self, maxi = 4 + clnb) 
-        self.clnb = clnb 
+        dlg = progressbar(self, maxi = 4 + clnb)
+        self.clnb = clnb
         print 'lecture des profils'
         dlg.Update(2, _(u"Reading profiles").decode('utf8'))
         print 'lecture des profils'
         dlg.Update(2, _(u"Reading profiles").decode('utf8'))
-  
+
         DictProfile = ReadProfileAsDico(Profile, Alceste, self.encoding)
         self.DictProfile = DictProfile
         self.cluster_size = []
         DictProfile = ReadProfileAsDico(Profile, Alceste, self.encoding)
         self.DictProfile = DictProfile
         self.cluster_size = []
@@ -1117,7 +1117,7 @@ class DefaultTextLayout :
         self.corpus = corpus
         self.cmd = cmd
         self.dolayout()
         self.corpus = corpus
         self.cmd = cmd
         self.dolayout()
-    
+
     def dolayout(self, cmd) :
         log.info('no layout yet')
 
     def dolayout(self, cmd) :
         log.info('no layout yet')
 
@@ -1137,6 +1137,22 @@ class WordCloudLayout(DefaultTextLayout):
         self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
         self.ira.ShowAPane("Tab_content")
 
         self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
         self.ira.ShowAPane("Tab_content")
 
+class LabbeLayout(DefaultTextLayout):
+    def dolayout(self):
+        self.Tab = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition)
+        #if self.parametres['svg'] :
+        #    list_graph = [['nuage_1.svg', 'Nuage']]
+        #else :
+        #    list_graph = [['nuage_1.png', 'Nuage']]
+        list_graph = [['dist-labbe.png', _(u'Ward clustering (method ward2)').encode('utf8')]]
+        self.TabStatTot = GraphPanel(self.ira.nb, self.pathout, list_graph)
+        self.Tab.AddPage(self.TabStatTot, _(u"LabbĂ©'s distance").encode('utf8'))
+        self.Tab.corpus = self.corpus
+        self.Tab.parametres = self.parametres
+        self.ira.nb.AddPage(self.Tab, '%s' % self.parametres['name'])
+        self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        self.ira.ShowAPane("Tab_content")
+
 def blender(self):
     nodesfile = self.pathout['nodes.csv']
     edgesfile = self.pathout['edges.csv']
 def blender(self):
     nodesfile = self.pathout['nodes.csv']
     edgesfile = self.pathout['edges.csv']
index a80670e..da13f74 100644 (file)
@@ -5,12 +5,10 @@
 #License: GNU/GPL
 
 from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
 #License: GNU/GPL
 
 from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
-from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout
+from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout, LabbeLayout
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
-#import shelve
-#from tabsimi import DoSimi
 from functions import DoConf, ReadDicoAsDico
 from tableau import Tableau
 import logging
 from functions import DoConf, ReadDicoAsDico
 from tableau import Tableau
 import logging
@@ -28,7 +26,7 @@ class OpenAnalyse():
             self.conf = DoConf(parametres).getoptions()
             self.path = parametres
             self.conf = self.redopath(self.conf, parametres)
             self.conf = DoConf(parametres).getoptions()
             self.path = parametres
             self.conf = self.redopath(self.conf, parametres)
-        
+
         if self.conf['type'] == 'corpus' :
             corpus = self.opencorpus()
         elif self.conf['type'] == 'matrix' :
         if self.conf['type'] == 'corpus' :
             corpus = self.opencorpus()
         elif self.conf['type'] == 'matrix' :
@@ -39,7 +37,7 @@ class OpenAnalyse():
             else :
                 intree = False
             corpus = self.openanalyse()
             else :
                 intree = False
             corpus = self.openanalyse()
-            
+
             if self.conf.get('lem',1) :
                 dolem = True
             else :
             if self.conf.get('lem',1) :
                 dolem = True
             else :
@@ -72,17 +70,17 @@ class OpenAnalyse():
         else :
             self.parent.tree.AddAnalyse(self.conf, bold = True)
         self.parent.history.addtab(self.conf)
         else :
             self.parent.tree.AddAnalyse(self.conf, bold = True)
         self.parent.history.addtab(self.conf)
-    
+
     def redopath(self, conf, path) :
         conf['ira'] = os.path.realpath(path)
         conf['pathout'] = os.path.dirname(os.path.realpath(path))
         DoConf(conf['ira']).makeoptions([conf['type']], [conf])
         return conf
     def redopath(self, conf, path) :
         conf['ira'] = os.path.realpath(path)
         conf['pathout'] = os.path.dirname(os.path.realpath(path))
         DoConf(conf['ira']).makeoptions([conf['type']], [conf])
         return conf
-    
+
     def opencorpus(self) :
         log.info('open corpus')
         if self.conf['uuid'] not in self.parent.history.corpus :
     def opencorpus(self) :
         log.info('open corpus')
         if self.conf['uuid'] not in self.parent.history.corpus :
-            self.parent.history.add(self.conf) 
+            self.parent.history.add(self.conf)
             log.info('add corpus to history')
             self.parent.tree.OnItemAppend(self.conf)
         if self.conf['uuid'] in self.parent.history.openedcorpus :
             log.info('add corpus to history')
             self.parent.tree.OnItemAppend(self.conf)
         if self.conf['uuid'] in self.parent.history.openedcorpus :
@@ -97,7 +95,7 @@ class OpenAnalyse():
             self.parent.history.openedcorpus[self.conf['uuid']] = corpus
             self.opencorpus_analyses()
             self.doopen(corpus)
             self.parent.history.openedcorpus[self.conf['uuid']] = corpus
             self.opencorpus_analyses()
             self.doopen(corpus)
-    
+
     def openmatrix(self):
         log.info('open matrix')
         if self.conf['uuid'] not in self.parent.history.ordermatrix :
     def openmatrix(self):
         log.info('open matrix')
         if self.conf['uuid'] not in self.parent.history.ordermatrix :
@@ -114,7 +112,7 @@ class OpenAnalyse():
             matrix.open()
             self.parent.history.openedmatrix[self.conf['uuid']] = matrix
             self.openmatrix_analyses()
             matrix.open()
             self.parent.history.openedmatrix[self.conf['uuid']] = matrix
             self.openmatrix_analyses()
-            self.doopen(matrix)        
+            self.doopen(matrix)
             self.parent.history.addtab(self.conf)
 
     def opencorpus_analyses(self) :
             self.parent.history.addtab(self.conf)
 
     def opencorpus_analyses(self) :
@@ -132,7 +130,7 @@ class OpenAnalyse():
             self.parent.history.addmultiple(analyses)
         for analyse in analyses :
             self.parent.tree.AddAnalyse(analyse, bold = False)
             self.parent.history.addmultiple(analyses)
         for analyse in analyses :
             self.parent.tree.AddAnalyse(analyse, bold = False)
-    
+
     def openmatrix_analyses(self):
         pass
 
     def openmatrix_analyses(self):
         pass
 
@@ -149,11 +147,13 @@ class OpenAnalyse():
 
     def doopen(self, corpus) :
         if self.conf['type'] == 'corpus' :
 
     def doopen(self, corpus) :
         if self.conf['type'] == 'corpus' :
-            OpenCorpus(self.parent, self.conf) 
+            OpenCorpus(self.parent, self.conf)
         elif self.conf['type'] == 'stat' :
             StatLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'spec' :
             dolexlayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'stat' :
             StatLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'spec' :
             dolexlayout(self.parent, corpus, self.conf)
+        elif self.conf['type'] == 'labbe' :
+            LabbeLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'alceste' :
             OpenCHDS(self.parent,  corpus, self.conf, Alceste = True)
         elif self.conf['type'] == 'simitxt' or self.conf['type'] == 'clustersimitxt' :
         elif self.conf['type'] == 'alceste' :
             OpenCHDS(self.parent,  corpus, self.conf, Alceste = True)
         elif self.conf['type'] == 'simitxt' or self.conf['type'] == 'clustersimitxt' :
@@ -172,4 +172,3 @@ class OpenAnalyse():
             FreqLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'chi2' or self.conf['type'] == 'chi2mcnemar':
             Chi2Layout(self.parent, corpus, self.conf)
             FreqLayout(self.parent, corpus, self.conf)
         elif self.conf['type'] == 'chi2' or self.conf['type'] == 'chi2mcnemar':
             Chi2Layout(self.parent, corpus, self.conf)
-