concordance and translation
[iramuteq] / iramuteq.py
index d1b6077..5d64a17 100644 (file)
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2012, Pierre Ratinaud
-#Lisense: GNU GPL
+#License: GNU GPL
 
 from optparse import OptionParser
 
@@ -28,10 +28,7 @@ import logging
 #------------------------------------
 import wx
 #import wx.aui
-if wx.__version__ >= '2.11' :
-    import wx.lib.agw.aui as aui
-else :
-    import aui
+import wx.lib.agw.aui as aui
 import wx.html
 import wx.grid
 import wx.lib.hyperlink as hl
@@ -40,7 +37,7 @@ from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDi
 from checkversion import NewVersion
 from guifunct import *
 from tableau import Tableau
-from dialog import PrefDialog, EncodeDialog, CorpusPref
+from dialog import PrefDialog, CorpusPref
 from tabfrequence import Frequences
 from tabchi2 import ChiSquare
 #from tabstudent import MakeStudent
@@ -57,10 +54,10 @@ from textstat import Stat
 from textaslexico import Lexico
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
-from profile_segment import ProfileSegment
+#from profile_segment import ProfileSegment
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
-from corpus import BuildFromAlceste, Builder
+from corpus import Builder
 from sheet import MySheet
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
@@ -96,6 +93,7 @@ ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
+ID_ImportTXM = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -209,7 +207,11 @@ class IraFrame(wx.Frame):
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
-        file_menu.AppendMenu(-1, _(u"Import from factiva"), menuFactiva)
+        file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
+
+        item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
+        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        file_menu.AppendItem(item)
 
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
@@ -225,7 +227,7 @@ class IraFrame(wx.Frame):
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         file_menu.AppendItem(item)
         
-        file_menu.Append(wx.ID_EXIT, _(u"Exit"))
+        file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         
         edit_menu = wx.Menu()
         edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
@@ -237,40 +239,40 @@ class IraFrame(wx.Frame):
         #view_menu.AppendSeparator()
 
         analyse_menu = wx.Menu()
-        analyse_menu.Append(ID_Freq, u"Fréquences")
-        analyse_menu.Append(ID_Chi2, u"Chi2")
+        analyse_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
+        analyse_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
         #analyse_menu.Append(ID_Student, u"t de Student")
         menu_classif = wx.Menu()
-        menu_classif.Append(ID_CHDAlceste, u"Méthode GNEPA")
+        menu_classif.Append(ID_CHDAlceste, _(u"Reinert Method").decode('utf8'))
         #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
-        analyse_menu.AppendMenu(-1, u"Classification", menu_classif)
+        analyse_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
         #analyse_menu.Append(ID_AFCM, u"AFCM")
-        analyse_menu.Append(ID_SIMI, u"Analyse de similitudes")
-        analyse_menu.Append(ID_proto, _(u"Prototypical analysis"))
+        analyse_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
+        analyse_menu.Append(ID_proto, _(u"Prototypical analysis").decode('utf8'))
         ID_RCODE = wx.NewId()
         analyse_menu.Append(ID_RCODE, u"Code R...")
 
         text_menu = wx.Menu()
         #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
-        text_menu.Append(ID_TEXTSTAT, u"Statistiques textuelles")
-        text_menu.Append(ID_ASLEX, u"Spécificités et AFC")
+        text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
+        text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
         #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
         menu_classiftxt = wx.Menu()
-        menu_classiftxt.Append(ID_TEXTALCESTE, u"Méthode GNEPA")
+        menu_classiftxt.Append(ID_TEXTALCESTE, _(u"Reinert Method").decode('utf8'))
         #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
-        text_menu.AppendMenu(-1, u"Classification", menu_classiftxt)
-        text_menu.Append(ID_SimiTxt, u'Analyse de similitude'
+        text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
+        text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')
         ID_WC = wx.NewId()
-        text_menu.Append(ID_WC, u'Nuage de mots')
+        text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
         
         help_menu = wx.Menu()
-        help_menu.Append(wx.ID_ABOUT, u'À propos...')
-        help_menu.Append(wx.ID_HELP, u'Aide en ligne')
+        help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        help_menu.Append(wx.ID_HELP, _(u"Inline 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(analyse_menu, _("Spreadsheet analysis").decode('utf8'))
+        self.mb.Append(analyse_menu, _("Matrix analysis").decode('utf8'))
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
         
@@ -313,7 +315,7 @@ class IraFrame(wx.Frame):
         #        f.write('')
         self.history = History(os.path.join(UserConfigPath, 'history.db'))
         self.tree = LeftTree(self)
-        self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption("Navigateur").
+        self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Navigator").decode('utf8')).
                           Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
                           MinimizeButton(True))
         
@@ -388,6 +390,7 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
+        self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
@@ -427,9 +430,9 @@ class IraFrame(wx.Frame):
 
 ##############################################################@
         self.DisEnSaveTabAs(False)
-        self.ShowMenu(_("View"), False)
-        self.ShowMenu(_("Spreadsheet analysis"), False)
-        self.ShowMenu(_("Text analysis"), False)
+        self.ShowMenu(_("View").decode('utf8'), False)
+        self.ShowMenu(_("Matrix analysis").decode('utf8'), False)
+        self.ShowMenu(_("Text analysis").decode('utf8'), False)
    
         self._mgr.Update()
 
@@ -488,7 +491,7 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
             dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-                 evt.Veto()
+                pass
             dlg.Destroy()
 
 
@@ -516,7 +519,7 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
             dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-                 evt.Veto()
+                evt.Veto()
 
     def DisEnSaveTabAs(self, DISEN):
     #Disable SaveTabAs
@@ -589,7 +592,7 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         inputname, self.input_path = OnOpen(self, "Texte")
         self.filename = self.input_path[0]
         if inputname:
-             self.OpenText()
+            self.OpenText()
    
     def OnViewData(self, event):
         print self.type
@@ -611,7 +614,6 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         self._mgr.Update()
         
     def OpenText(self):
-        #dial = EncodeDialog(self)
         dlg = wx.ProgressDialog("Ouverture...",
                                    "Veuillez patienter...",
                                    maximum=2,
@@ -628,34 +630,12 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 OpenAnalyse(self, corpus.parametres)
             except :
                 BugReport(self)
-        #self.content = DoConf().totext(corpus.parametres)
-#        parametres = DoConf(os.path.join(UserConfigPath,'corpus.cfg')).getoptions('corpus')
-#        parametres['originalpath'] = self.filename
-#        
-#        parametres['pathout'] = PathOut(self.filename, 'corpus').dirout
-#        dial = CorpusPref(self, parametres)
-#        dial.CenterOnParent()
-#        dial.txtpath.SetLabel(self.filename)
-#        res = dial.ShowModal()
-#        parametres = dial.doparametres()
-#        print parametres
-#        ReadLexique(self, lang = parametres['lang'])
-#        self.expressions = ReadDicoAsDico(self.DictPath.get(parametres['lang'], 'french_exp'))
-#        corpus = BuildFromAlceste(self.filename, parametres, self.lexique, self.expressions).corpus
-        #self.corpus_encodage =  dial.encodages[dial.list_encodages.GetSelection()][0]
-        #self.corpus_lang = dial.langues[dial.choice_dict.GetSelection()]
             else :
                 count = 1
                 keepGoing = dlg.Update(count, u"Lecture du fichier")
-    #            msg = u"Ce fichier ne semble pas être encodé en %s" % self.corpus_encodage
-    #            dial = wx.MessageDialog(self, msg, u"Problème d'encodage", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
-    #            dial.CenterOnParent()
-    #            res = dial.ShowModal()
-    #            dial.Destroy()
-    #            self.OpenText()
-                self.ShowMenu(_("View"))
-                self.ShowMenu(_("Text analysis"))
-                self.ShowMenu(_(u"Spreadsheet analysis"), False)
+                self.ShowMenu(_(u"View").decode('utf8'))
+                self.ShowMenu(_(u"Text analysis").decode('utf8'))
+                self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
@@ -751,7 +731,7 @@ Voulez-vous fermer quand même ?"""
                 elif True in ListFile :
                     remove = True
                 if remove:
-                   del self.DictTab[TabTitle]
+                    del self.DictTab[TabTitle]
             else : 
                 self.LastTabClose()
         else :
@@ -914,12 +894,6 @@ Voulez-vous fermer quand même ?"""
         except:
             BugReport(self)
 
-#    def OnCheckcorpus(self, evt):
-#        try :
-#            checkcorpus(self)
-#        except :
-#            BugReport(self)
-
     def OnTextStat(self, event, corpus = None):
             #print 'PAS DE BUG SUR TEXT STAT'
         try:
@@ -969,6 +943,12 @@ Voulez-vous fermer quand même ?"""
         except :
             BugReport(self)
 
+    def OnImportTXM(self, evt) :
+        try :
+            ImportFactiva(self, 'txm')
+        except :
+            BugReport(self)
+
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :
@@ -1008,7 +988,7 @@ Voulez-vous fermer quand même ?"""
             self.res = DoSimi(self, param = None)
             #self.res = Verges(self)
             if self.res.val == wx.ID_OK :
-                 PlaySound(self)
+                PlaySound(self)
         except :
             BugReport(self)
 #################################################################
@@ -1064,11 +1044,11 @@ Voulez-vous fermer quand même ?"""
 class IntroPanel(wx.Panel):
     def __init__(self, parent):
         wx.Panel.__init__(self, parent)
-        #col = randint(0, 255)
-        #col1 = randint(0,255)
-        #col2 = randint(0,255)
-        col = 0
-        bckgrdcolor = wx.Colour(col, col, col)
+        col = randint(0, 255)
+        col1 = randint(0,255)
+        col2 = randint(0,255)
+        col = 57
+        bckgrdcolor = wx.Colour(col, col1, col2)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
@@ -1110,7 +1090,7 @@ class IntroPanel(wx.Panel):
         self.hyper_lerass.UpdateLink()
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
-        labellicence = wx.StaticText(PanelPres, -1, u'Licence GNU GPL')
+        labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
         labellicence.SetForegroundColour(txtcolour)
         labellicence.SetBackgroundColour(bckgrdcolor)
         labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))