add txm import
[iramuteq] / iramuteq.py
index 1f7b17e..6636b11 100644 (file)
@@ -49,9 +49,8 @@ from tabafcm import DoAFCM
 from tabchdalc import AnalyseQuest
 from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabchdalc import AnalyseQuest
 from tabsimi import DoSimi
 from tabrsimple import InputText
-from tabverges import Verges
+from tabverges import Prototypical
 #from textafcuci import AfcUci
 #from textafcuci import AfcUci
-#from textchdalc import AnalyseAlceste
 from analysetxt import Alceste
 from textdist import AnalysePam
 from textstat import Stat
 from analysetxt import Alceste
 from textdist import AnalysePam
 from textstat import Stat
@@ -64,7 +63,7 @@ from openanalyse import OpenAnalyse
 from corpus import BuildFromAlceste, Builder
 from sheet import MySheet
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from corpus import BuildFromAlceste, Builder
 from sheet import MySheet
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
-from chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
+from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
 from tools import Extract
 
 from parse_factiva_xml import ImportFactiva
 from tools import Extract
 
@@ -96,6 +95,8 @@ ID_RESULT = wx.NewId()
 ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
+ID_proto = wx.NewId()
+ID_ImportTXM = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -164,7 +165,9 @@ class IraFrame(wx.Frame):
         self.AppliPath = AppliPath
         self.images_path = os.path.join(AppliPath,'images')
         self.UserConfigPath = UserConfigPath
         self.AppliPath = AppliPath
         self.images_path = os.path.join(AppliPath,'images')
         self.UserConfigPath = UserConfigPath
-        self.RscriptsPath = ConstructRscriptsPath(AppliPath)
+        #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
+        self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
+        self.RscriptsPath.basefiles(RscriptsPath)
         #self.DictPath = ConstructDicoPath(AppliPath)
         self.DictPath = ConstructDicoPath(UserConfigPath)
         self.ConfigGlob = ConfigGlob
         #self.DictPath = ConstructDicoPath(AppliPath)
         self.DictPath = ConstructDicoPath(UserConfigPath)
         self.ConfigGlob = ConfigGlob
@@ -207,7 +210,11 @@ class IraFrame(wx.Frame):
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
         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'))
 
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
@@ -223,7 +230,7 @@ class IraFrame(wx.Frame):
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         file_menu.AppendItem(item)
         
         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'))
         
         edit_menu = wx.Menu()
         edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
@@ -235,39 +242,40 @@ class IraFrame(wx.Frame):
         #view_menu.AppendSeparator()
 
         analyse_menu = wx.Menu()
         #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()
         #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")
         #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_AFCM, u"AFCM")
-        analyse_menu.Append(ID_SIMI, u"Analyse de similitudes")
+        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")
         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()
         #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")
         #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()
         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 = 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(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'))
         
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
         
@@ -369,6 +377,7 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnCHDAlceste, id=ID_CHDAlceste)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnCHDAlceste, id=ID_CHDAlceste)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
+        self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
         self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
         #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.OnRCode, id=ID_RCODE)
         #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
@@ -384,6 +393,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.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()
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
@@ -423,9 +433,9 @@ class IraFrame(wx.Frame):
 
 ##############################################################@
         self.DisEnSaveTabAs(False)
 
 ##############################################################@
         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()
 
    
         self._mgr.Update()
 
@@ -624,34 +634,12 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 OpenAnalyse(self, corpus.parametres)
             except :
                 BugReport(self)
                 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")
             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 = ''
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
@@ -874,6 +862,9 @@ Voulez-vous fermer quand même ?"""
                 PlaySound(self)
         except:
             BugReport(self)
                 PlaySound(self)
         except:
             BugReport(self)
+    
+    def OnProto(self, evt) :
+        Prototypical(self, {'type' : 'proto'})
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
@@ -907,12 +898,6 @@ Voulez-vous fermer quand même ?"""
         except:
             BugReport(self)
 
         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:
     def OnTextStat(self, event, corpus = None):
             #print 'PAS DE BUG SUR TEXT STAT'
         try:
@@ -962,6 +947,12 @@ Voulez-vous fermer quand même ?"""
         except :
             BugReport(self)
 
         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 :
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :