X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=iramuteq.py;h=5d64a173c91a9c688d48875114523afea93917d3;hp=cf7088a684fd78fbd90146a61e2a67b493cc5727;hb=5d8c9f5cd6399fd4a7192b655b4aa0a7923d11b6;hpb=e531d59ce2d8f72dfc3138446db913af1f20b134 diff --git a/iramuteq.py b/iramuteq.py index cf7088a..5d64a17 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -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 @@ -49,22 +46,21 @@ from tabafcm import DoAFCM 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 textchdalc import AnalyseAlceste from analysetxt import Alceste from textdist import AnalysePam from textstat import Stat from textaslexico import Lexico from textsimi import SimiTxt, SimiFromCluster -from textwordcloud import WordCloud -from profile_segment import ProfileSegment +from textwordcloud import WordCloud, ClusterCloud +#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 ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut +from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut from parse_factiva_xml import ImportFactiva from tools import Extract @@ -96,15 +92,18 @@ ID_RESULT = 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 ########################################################## #encodage if sys.platform == 'darwin' : - sys.setdefaultencoding('utf-8') - wx.SetDefaultPyEncoding('utf-8') + sys.setdefaultencoding('UTF-8') + wx.SetDefaultPyEncoding('UTF-8') else : sys.setdefaultencoding(locale.getpreferredencoding()) + #chemin de l'application AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0]))) #chemin des images @@ -148,7 +147,6 @@ sys.stdout = printer() ConfigPath = ConstructConfigPath(UserConfigPath) - langues = {'french' : wx.LANGUAGE_FRENCH, 'english' : wx.LANGUAGE_ENGLISH,} ##################################################################### @@ -164,7 +162,9 @@ class IraFrame(wx.Frame): 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 @@ -207,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')) @@ -223,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')) @@ -235,39 +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_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')) @@ -310,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)) @@ -369,6 +374,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.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) @@ -384,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() @@ -423,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() @@ -484,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() @@ -512,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 @@ -585,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 @@ -607,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, @@ -624,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 = '' @@ -747,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 : @@ -874,6 +858,9 @@ Voulez-vous fermer quand même ?""" 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' @@ -898,6 +885,8 @@ Voulez-vous fermer quand même ?""" except : BugReport(self) + def OnClusterCloud(self, corpus, parametres = None) : + self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = progressbar(self, 3)) def OnAFCM(self, event): try: @@ -905,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: @@ -960,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 : @@ -999,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) ################################################################# @@ -1055,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) @@ -1101,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'))