...
[iramuteq] / ProfList.py
index c9b1ce1..7bf1290 100644 (file)
 #----------------------------------------------------------------------------
 
 import os
 #----------------------------------------------------------------------------
 
 import os
-import sys
 import  wx
 import  wx.lib.mixins.listctrl  as  listmix
 import  wx
 import  wx.lib.mixins.listctrl  as  listmix
-#from tabsimi import DoSimi
 from listlex import ListForSpec
 from chemins import ConstructPathOut, ffr
 from dialog import PrefUCECarac, SearchDial, message, BarFrame
 from listlex import ListForSpec
 from chemins import ConstructPathOut, ffr
 from dialog import PrefUCECarac, SearchDial, message, BarFrame
@@ -28,9 +26,6 @@ import webbrowser
 import tempfile
 import codecs
 from functions import progressbar, treat_var_mod, doconcorde
 import tempfile
 import codecs
 from functions import progressbar, treat_var_mod, doconcorde
-from PrintRScript import barplot
-from textclassechd import ClasseCHD
-from shutil import copyfile
 from operator import itemgetter
 from copy import copy
 
 from operator import itemgetter
 from copy import copy
 
@@ -45,6 +40,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         self.cl = cl
         self.var_mod = {}
         self.them_mod = {}
         self.cl = cl
         self.var_mod = {}
         self.them_mod = {}
+        self.ira = wx.GetApp().GetTopWindow()
 
         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] != '*****']
@@ -245,7 +241,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
 
     def onsearchall(self, evt) :
         if 'FrameSearch' not in dir(self.Source) :
 
     def onsearchall(self, evt) :
         if 'FrameSearch' not in dir(self.Source) :
-            self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
+            self.Source.FrameSearch = SearchFrame(self.parent, -1, _(u"Search...").decode('utf8'), self.Source.corpus)
         self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
         self.dial.CenterOnParent()
         self.dial.Show()
         self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
         self.dial.CenterOnParent()
         self.dial.Show()
@@ -309,37 +305,37 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
     
             # make a menu
             menu = wx.Menu()
     
             # make a menu
             menu = wx.Menu()
-            menu.Append(self.popupID1, u"Formes associées")
-            menu.Append(self.idtablex, u"Chi2 par classe")
-            menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
-            menu.Append(self.idchimod, u"Chi2 modalités de la variable")
-            menu.Append(self.idwordgraph, u"Graphe du mot")
+            menu.Append(self.popupID1, _(u"Associated forms").decode('utf8'))
+            menu.Append(self.idtablex, _(u"Chi2 by cluster").decode('utf8'))
+            menu.Append(self.idlexdendro, _(u"Chi2 by cluster on dendrogram").decode('utf8'))
+            menu.Append(self.idchimod, _(u"Chi2 modalities of variable").decode('utf8'))
+            menu.Append(self.idwordgraph, _(u"Word graph").decode('utf8'))
             #menu.Append(self.export_classes, u"Exporter le corpus...") 
             
             #menu.Append(self.popupID10, u"Spécificités")
 
             menu_conc = wx.Menu()
             #menu.Append(self.export_classes, u"Exporter le corpus...") 
             
             #menu.Append(self.popupID10, u"Spécificités")
 
             menu_conc = wx.Menu()
-            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_conc.Append(self.popupID2, _(u"In segments of this cluster").decode('utf8'))
+            menu_conc.Append(self.popupID3, _(u"In segments of this clustering").decode('utf8'))
+            menu_conc.Append(self.popupID4, _(u"In all segments").decode('utf8'))
+            menu.AppendMenu(-1, _(u"Concordance").decode('utf8'), menu_conc)
             menu.Append(self.onmaketgen, _(u"Make Tgen").decode('utf8'))
             menu_cnrtl = wx.Menu()      
             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.Append(self.popupID7, u"Synonymie")
-            menu_cnrtl.Append(self.popupID8, u"Antonymie")
-            menu_cnrtl.Append(self.popupID9, u"Morphologie")
-            menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
-            menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
+            menu_cnrtl.Append(self.popupID5, _(u"Definition").decode('utf8'))
+            menu_cnrtl.Append(self.popupID6, _(u"Etymology").decode('utf8'))
+            menu_cnrtl.Append(self.popupID7, _(u"Synonymous").decode('utf8'))
+            menu_cnrtl.Append(self.popupID8, _(u"Antonym").decode('utf8'))
+            menu_cnrtl.Append(self.popupID9, _(u"Morphology").decode('utf8'))
+            menu_cnrtl.Append(self.popup_proxe, _(u"Proxemy").decode('utf8'))
+            menu.AppendMenu(-1, _(u"Tools from CNRTL (french only)").decode('utf8'), menu_cnrtl)
             menu.AppendSeparator()
             menu.AppendSeparator()
-            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.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.popupIDgraph, _(u"Graph of cluster").decode('utf8'))
+            menu.Append(self.idseg, _(u"Repeated segments").decode('utf8'))
+            menu.Append(self.iducecarac, _(u"Typical text segments").decode('utf8'))
+            menu.Append(self.idcloud, _(u"Word cloud of cluster").decode('utf8'))
+            menu.Append(self.idexport, _(u'Export...').decode('utf8'))
+            menu.Append(self.idexporttropes, _(u'Export for Tropes').decode('utf8'))
+            menu.Append(self.idexportowledge, _('Exporter for Owledge').decode('utf8'))
             #menu.Append(self.popupID2, u"Concordancier")
     #        menu.Append(self.popupID3, "recharger")
     
             #menu.Append(self.popupID2, u"Concordancier")
     #        menu.Append(self.popupID3, "recharger")
     
@@ -355,10 +351,10 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                 self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
 
             menu = wx.Menu()
                 self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
 
             menu = wx.Menu()
-            menu.Append(self.pop2, u"Chi2 par classe")
-            menu.Append(self.pop3, u"Chi2 modalités de la variable")
+            menu.Append(self.pop2, _(u"Chi2 by cluster").decode('utf8'))
+            menu.Append(self.pop3, _(u"Chi2 modalities of variable").decode('utf8'))
             menu.AppendSeparator()
             menu.AppendSeparator()
-            menu.Append(self.pop1, u"Graphe de la classe")
+            menu.Append(self.pop1, _(u"Graph of cluster").decode('utf8'))
             self.PopupMenu(menu)
             menu.Destroy()
 
             self.PopupMenu(menu)
             menu.Destroy()
 
@@ -371,9 +367,6 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         parametres['type'] = 'clustercloud'
         parametres['prof'] = self.Source.pathout['actprof_classe_%i.csv' % self.cl]
         del  parametres['uuid']
         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) :
         self.parent.OnClusterCloud(self.Source.corpus, parametres = parametres)
 
     def onexport(self, evt) :
@@ -387,9 +380,6 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         dial = wx.MessageDialog(self, self.Source.pathout['classe_%i_export.txt' % self.cl], u"Export", wx.OK|wx.ICON_INFORMATION)
         dial.ShowModal()
         dial.Destroy()
         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):
     
     def onexporttropes(self, evt) :
         if 'corpus' in dir(self.Source):
@@ -424,7 +414,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
     def quest_var_mod(self, evt) :  
         word = self.getselectedwords()[0]
         if len(word.split('_')) <= 1 :
     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 = wx.MessageDialog(self, _(u"This is not a variable_modality form").decode('utf8'), _(u"Problem").decode('utf8'), wx.OK | wx.ICON_WARNING)
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
@@ -458,7 +448,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         try :
             words = [word for word in var_mod[var[0]]]
         except KeyError:
         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 = wx.MessageDialog(self, _(u"This is not a meta-data").decode('utf8'), _(u"Problem").decode('utf8'), wx.OK | wx.ICON_WARNING)
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
             dial.CenterOnParent()
             dial.ShowModal()
             dial.Destroy()
@@ -546,7 +536,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                         'lem' : self.Source.parametres['lem'],
                         'tmpchi' : self.tmpchi}
         #try :
                         'lem' : self.Source.parametres['lem'],
                         'tmpchi' : self.tmpchi}
         #try :
-        self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.lfreq, self.lchi, self.cl - 1, parametres = parametres, dlg = progressbar(self, 4))
+        self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.lfreq, self.lchi, self.cl - 1, parametres = parametres, dlg = progressbar(self.ira, 4))
         #except :
         #    print 'not acitve'
 
         #except :
         #    print 'not acitve'
 
@@ -560,7 +550,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
                         'lem' : self.Source.parametres['lem'],
                         'tmpchi' : self.tmpchi}
 
                         'lem' : self.Source.parametres['lem'],
                         'tmpchi' : self.tmpchi}
 
-        self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.lfreq, self.lchi, self.cl - 1, parametres = parametres, dlg = progressbar(self, 4))
+        self.parent.SimiFromCluster(self.parent, self.Source.corpus, self.la, self.lfreq, self.lchi, self.cl - 1, parametres = parametres, dlg = progressbar(self.ira, 4))
 
     def on_segments(self,evt) :
         dlg = progressbar(self, 2)
 
     def on_segments(self,evt) :
         dlg = progressbar(self, 2)
@@ -586,7 +576,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         first = ['','','']
         para={'dico': d,'fline':first}
         dlg.Destroy()
         first = ['','','']
         para={'dico': d,'fline':first}
         dlg.Destroy()
-        win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
+        win = wliste(self, -1, ' - '.join([_(u"Repeated segments").decode('utf8'), "Classe %i" % self.cl]), d, first, size=(600, 500))
         win.Show(True)
 
     def on_uce_carac(self,evt) :
         win.Show(True)
 
     def on_uce_carac(self,evt) :
@@ -595,7 +585,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         if dial.ShowModal() == wx.ID_OK :
             limite = dial.spin_eff.GetValue()
             atype = dial.radio_type.GetSelection()
         if dial.ShowModal() == wx.ID_OK :
             limite = dial.spin_eff.GetValue()
             atype = dial.radio_type.GetSelection()
-            dlg = progressbar(self,maxi = 4)
+            dlg = progressbar(self.ira,maxi = 4)
             corpus = self.Source.corpus
             uces = corpus.lc[self.cl-1]
             if self.Source.parametres['classif_mode'] != 2 :
             corpus = self.Source.corpus
             uces = corpus.lc[self.cl-1]
             if self.Source.parametres['classif_mode'] != 2 :
@@ -618,7 +608,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
             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()
             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()
-            win = message(self, items, u"Segments de texte caractéristiques - Classe %i" % self.cl, (750, 600), uceids = nuces)
+            win = message(self, items, ' - '.join([_(u"Typical text segments").decode('utf8'), "Classe %i" % self.cl]), (750, 600), uceids = nuces)
             #win.SetWindowStyle(wx.STAY_ON_TOP)
             #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.SetWindowStyle(wx.STAY_ON_TOP)
             #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)
@@ -684,19 +674,19 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         if 'corpus' in dir(self.Source) :
             corpus = self.Source.corpus
             uces = corpus.lc[self.cl-1]
         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 = self.make_concord(uces, ' - '.join([_(u"Concordance").decode('utf8'), "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))]
             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))]
-        win = self.make_concord(uces, "Concordancier - Segments de texte classés")
+        win = self.make_concord(uces, ' - '.join([_(u"Concordance").decode('utf8'), _(u"Segments of this clustering").decode('utf8')]))
         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 - Tous les segments de texte")
+        win = self.make_concord(uces, ' - '.join([_(u"Concordance").decode('utf8'), _(u"All segments").decode('utf8')]))
         win.Show(True)
 
     def OnPopupFive(self, event):
         win.Show(True)
 
     def OnPopupFive(self, event):
@@ -750,7 +740,7 @@ class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Col
         rep.sort(key = itemgetter(1), reverse = True)
         #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)])
         rep.sort(key = itemgetter(1), reverse = True)
         #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 = message(self, items, _(u"Associated forms").decode('utf8'), (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.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)
@@ -763,7 +753,7 @@ 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[1:], menu = False)
     def __init__(self, parent, id, title, d, fline, size=(600, 500)):
         wx.Frame.__init__(self, parent, id)
         self.liste = ListForSpec(self, parent, d, fline[1:], menu = False)
-        self.button_1 = wx.Button(self, -1, "Fermer")
+        self.button_1 = wx.Button(self, -1, _(u"Close").decode('utf8'))
         self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.__do_layout()
         self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.__do_layout()