X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=iramuteq.py;h=1112acc229ad2c7d710019d1fb8f310b3de98650;hp=af6c52126ea4f870731db91f02da7e1a296abb62;hb=e033f9e84abb3c12d92f1580425877aa58e9af30;hpb=07808c0994b4f7d3ffadcb8c862e478af0141238 diff --git a/iramuteq.py b/iramuteq.py index af6c521..1112acc 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -53,13 +53,13 @@ from tabverges import Verges #from textafcuci import AfcUci #from textchdalc import AnalyseAlceste from analysetxt import Alceste -from textdist import PamTxt +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 textcheckcorpus import checkcorpus +#from textcheckcorpus import checkcorpus from openanalyse import OpenAnalyse from corpus import BuildFromAlceste, Builder from sheet import MySheet @@ -101,10 +101,11 @@ ID_SimiTxt = wx.NewId() ########################################################## #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 @@ -124,16 +125,15 @@ CreateIraDirectory(UserConfigPath, AppliPath) #fichiers log pour windows (py2exe) log = logging.getLogger('iramuteq') fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log')) -ch = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') -ch.setFormatter(formatter) fh.setFormatter(formatter) log.addHandler(fh) -if sys.platform != 'win32' or sys.platform != 'darwin': +if sys.platform != 'win32' and sys.platform != 'darwin': + ch = logging.StreamHandler() + ch.setFormatter(formatter) log.addHandler(ch) log.setLevel(logging.INFO) - class writer(object): def write(self, data): if data.strip() != '' : @@ -148,6 +148,9 @@ sys.stderr = writer() sys.stdout = printer() ConfigPath = ConstructConfigPath(UserConfigPath) + +langues = {'french' : wx.LANGUAGE_FRENCH, + 'english' : wx.LANGUAGE_ENGLISH,} ##################################################################### class IraFrame(wx.Frame): @@ -170,14 +173,10 @@ class IraFrame(wx.Frame): #workaround for import problem self.SimiFromCluster = SimiFromCluster #langues - mylocale = wx.Locale(wx.LANGUAGE_FRENCH) - mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale')) - mylocale.AddCatalog('iramuteq') - presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en']) - presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR']) - presLan_fr.install() - - + gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True) + self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR']) + self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en']) + self.setlangue() # tell FrameManager to manage this frame #self._mgr = wx.aui.AuiManager() self._mgr = aui.AuiManager() @@ -188,31 +187,31 @@ class IraFrame(wx.Frame): self.mb = wx.MenuBar() file_menu = wx.Menu() - item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix"), _(u"Open a matrix")) + item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8')) item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) file_menu.AppendItem(item) - item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpora"), _(u"Open a text corpora")) + item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpora").decode('utf8'), _(u"Open a text corpora").decode('utf8')) item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) file_menu.AppendItem(item) - item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis"), _("Open an analysis")) + item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8')) item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) file_menu.AppendItem(item) menuFactiva = wx.Menu() - fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml")) - fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail")) - fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste")) + fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8')) + fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8')) + fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8')) menuFactiva.AppendItem(fact_from_xml) menuFactiva.AppendItem(fact_from_mail) menuFactiva.AppendItem(fact_from_txt) file_menu.AppendMenu(-1, _(u"Import from factiva"), menuFactiva) menuTools = wx.Menu() - splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable")) - extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods")) + splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8')) + extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8')) menuTools.AppendItem(splitvar) menuTools.AppendItem(extractmod) self.ID_splitvar = splitvar.GetId() @@ -220,19 +219,19 @@ class IraFrame(wx.Frame): file_menu.AppendMenu(-1, _(u"Tools"), menuTools) - item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as..."), _(u"Save tab as...")) + 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")) edit_menu = wx.Menu() - edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences')) + edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8')) view_menu = wx.Menu() - view_menu.Append(ID_ACCEUIL, _(u"Home page")) - view_menu.Append(ID_VIEWDATA, _(u"Show data")) - view_menu.Append(ID_RESULT, _(u'Show results')) + view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8')) + view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8')) + view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8')) #view_menu.AppendSeparator() analyse_menu = wx.Menu() @@ -240,22 +239,22 @@ class IraFrame(wx.Frame): analyse_menu.Append(ID_Chi2, u"Chi2") #analyse_menu.Append(ID_Student, u"t de Student") menu_classif = wx.Menu() - menu_classif.Append(ID_CHDAlceste, u"Méthode Alceste") - menu_classif.Append(ID_CHDSIM, u"Par matrice des distances") + menu_classif.Append(ID_CHDAlceste, u"Méthode GNEPA") + #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances") analyse_menu.AppendMenu(-1, u"Classification", 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") 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_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_TEXTAFCM, u"AFC sur UCI / Vocabulaire") menu_classiftxt = wx.Menu() - menu_classiftxt.Append(ID_TEXTALCESTE, u"Méthode Alceste") - menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances") + menu_classiftxt.Append(ID_TEXTALCESTE, u"Méthode GNEPA") + #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') ID_WC = wx.NewId() @@ -265,12 +264,12 @@ class IraFrame(wx.Frame): help_menu.Append(wx.ID_ABOUT, u'À propos...') help_menu.Append(wx.ID_HELP, u'Aide en ligne') - self.mb.Append(file_menu, _(u"File")) - self.mb.Append(edit_menu, _(u"Edition")) - self.mb.Append(view_menu, _(u"View")) - self.mb.Append(analyse_menu, _("Spreadsheet analysis")) - self.mb.Append(text_menu, _(u"Text analysis")) - self.mb.Append(help_menu, _(u"Help")) + 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(text_menu, _(u"Text analysis").decode('utf8')) + self.mb.Append(help_menu, _(u"Help").decode('utf8')) self.SetMenuBar(self.mb) #-------------------------------------------------------------------- @@ -371,7 +370,7 @@ class IraFrame(wx.Frame): 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.OnRCode, id=ID_RCODE) - self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS) + #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.OnTextAfcm, id=ID_TEXTAFCM) @@ -422,10 +421,27 @@ class IraFrame(wx.Frame): if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman' self.type = '' +##############################################################@ + self.DisEnSaveTabAs(False) + self.ShowMenu(_("View"), False) + self.ShowMenu(_("Spreadsheet analysis"), False) + self.ShowMenu(_("Text analysis"), False) + + self._mgr.Update() + + self.DataPop = False + self.DataTxt = False + self.Text = '' + + self.lexique = None + self.corpus = None + + def finish_init(self) : try : self.pref.read(self.ConfigPath['preferences']) if IsNew(self) : UpgradeConf(self) + self.pref.read(self.ConfigPath['preferences']) New = True else : CopyConf(self) @@ -434,6 +450,9 @@ class IraFrame(wx.Frame): UpgradeConf(self) self.pref.read(self.ConfigPath['preferences']) New = True + self.sound = self.pref.getboolean('iramuteq', 'sound') + self.check_update = self.pref.getboolean('iramuteq', 'checkupdate') + self.version = ConfigGlob.get('DEFAULT', 'version') #configuration des chemins de R self.PathPath = ConfigParser() self.PathPath.read(ConfigPath['path']) @@ -467,31 +486,34 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: evt.Veto() dlg.Destroy() - self.DataPop = False - self.DataTxt = False - self.Text = '' - self.sound = self.pref.getboolean('iramuteq', 'sound') - self.check_update = self.pref.getboolean('iramuteq', 'checkupdate') - self.version = ConfigGlob.get('DEFAULT', 'version') - self.lexique = None - self.corpus = None -##############################################################@ - self.DisEnSaveTabAs(False) - self.ShowMenu(_("View"), False) - self.ShowMenu(_("Spreadsheet analysis"), False) - self.ShowMenu(_("Text analysis"), False) - - self._mgr.Update() + + + def setlangue(self) : + try : + self.pref.read(self.ConfigPath['preferences']) + guilangue = self.pref.get('iramuteq', 'guilanguage') + if guilangue == 'french' : + self.presLan_fr.install() + else : + self.presLan_en.install() + mylocale = wx.Locale(langues[guilangue]) + mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale')) + mylocale.AddCatalog('iramuteq') + except : + self.presLan_fr.install() + mylocale = wx.Locale(langues['french']) + mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale')) + mylocale.AddCatalog('iramuteq') + def OnVerif(self, evt) : pack = CheckRPackages(self) if pack : - dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION) + 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() - #FIXME marche pas sous mac ? def DisEnSaveTabAs(self, DISEN): #Disable SaveTabAs file_menu = self.mb.GetMenu(0) @@ -687,7 +709,8 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" parent = nobject.GetParent() if isinstance(parent, IraFrame) : npage = self.nb.GetPage(new) - self.tree.GiveFocus(uuid=npage.parametres['uuid']) + if 'parametres' in dir(npage) : + self.tree.GiveFocus(uuid=npage.parametres['uuid']) def OnCloseTab(self, evt): #log.info('Closing tab %s' % str(evt.GetEventObject())) @@ -882,35 +905,35 @@ Voulez-vous fermer quand même ?""" except: BugReport(self) - def OnCheckcorpus(self, evt): - try : - checkcorpus(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: + #print 'PAS DE BUG SUR TEXT STAT' + try: if corpus is None : corpus = self.tree.getcorpus() self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = progressbar(self, 7)) if self.Text.val == wx.ID_OK : PlaySound(self) - #except: - # BugReport(self) + except: + BugReport(self) def OnTextSpec(self, event, corpus = None): - #try: + try: #self.Text = AsLexico(self) - print('ATTENTION : PLUS DE BUG SUR LEXICO') + #print('ATTENTION : PLUS DE BUG SUR LEXICO') if corpus is None : corpus = self.tree.getcorpus() self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = progressbar(self, 3)) if self.Text.val == wx.ID_OK : PlaySound(self) - #except: - # BugReport(self) + except: + BugReport(self) def OnTextAfcm(self, event): try: @@ -956,17 +979,23 @@ Voulez-vous fermer quand même ?""" except: BugReport(self) - def OnPamSimple(self, event): + def OnPamSimple(self, event, corpus = None): try: - self.Text = PamTxt(self) + if corpus is None : + corpus = self.tree.getcorpus() + self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = progressbar(self,6)) if self.Text.val == wx.ID_OK: PlaySound(self) except: BugReport(self) + + def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) : + DoSimi(self, param = parametres, fromprof = fromprof, pathout = pathout, listactives = listactives, actives = actives, tableau = tableau) def OnSimi(self,evt): try : #print 'ATTENTION !!!! VERGES' + #print 'PLUS DE BUG SUR SIMI' self.res = DoSimi(self, param = None) #self.res = Verges(self) if self.res.val == wx.ID_OK : @@ -1148,6 +1177,7 @@ class MySplashScreen(wx.SplashScreen): def ShowMain(self): frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(1100, 800)) frame.Show() + frame.finish_init() frame.Upgrade() frame.OnOpenFromCmdl() # if self.fc.IsRunning():