X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=iramuteq.py;h=d3ae6f3a0ed78b3cf8d9c531be9c118c0101e89f;hp=2961efc87c1711f357d86a465e2882010c06b97f;hb=517dfd1d0717a55f98ff0d5efd91c5f5cdf28a82;hpb=1a995a6ca4e8dbb09c8b9ab1276dabf17e065f0d;ds=sidebyside diff --git a/iramuteq.py b/iramuteq.py index 2961efc..d3ae6f3 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -28,8 +28,10 @@ import logging #------------------------------------ import wx #import wx.aui -#import wx.lib.agw.aui as aui -import agw.aui as aui +if wx.__version__ >= '2.11' : + import wx.lib.agw.aui as aui +else : + import aui import wx.html import wx.grid import wx.lib.hyperlink as hl @@ -54,16 +56,18 @@ from analysetxt import Alceste from textdist import PamTxt from textstat import Stat from textaslexico import Lexico -from textsimi import SimiTxt +from textsimi import SimiTxt, SimiFromCluster from textwordcloud import WordCloud from profile_segment import ProfileSegment from textcheckcorpus import checkcorpus from openanalyse import OpenAnalyse -from corpusNG import BuildFromAlceste, Builder +from corpus import BuildFromAlceste, Builder from sheet import MySheet -from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRapp, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled +from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled from chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut from parse_factiva_xml import ImportFactiva +from tools import Extract + from tree import LeftTree ########################################################## ID_OpenData = wx.NewId() @@ -120,13 +124,28 @@ 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(ch) log.addHandler(fh) +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() != '' : + log.info('ERROR : %s' % data) + +class printer(object) : + def write(self, data) : + if data.strip() != '' : + log.info('Print : %s' % data) + +sys.stderr = writer() +sys.stdout = printer() + ConfigPath = ConstructConfigPath(UserConfigPath) ##################################################################### @@ -142,10 +161,13 @@ class IraFrame(wx.Frame): self.images_path = os.path.join(AppliPath,'images') self.UserConfigPath = UserConfigPath self.RscriptsPath = ConstructRscriptsPath(AppliPath) - self.DictPath = ConstructDicoPath(AppliPath) + #self.DictPath = ConstructDicoPath(AppliPath) + self.DictPath = ConstructDicoPath(UserConfigPath) self.ConfigGlob = ConfigGlob self.ConfigPath = ConstructConfigPath(UserConfigPath) self.pref = RawConfigParser() + #workaround for import problem + self.SimiFromCluster = SimiFromCluster #langues mylocale = wx.Locale(wx.LANGUAGE_FRENCH) mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale')) @@ -177,14 +199,28 @@ class IraFrame(wx.Frame): item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) file_menu.AppendItem(item) - item1 = wx.MenuItem(file_menu, ID_Import, _(u"Import a factiva corpora..."), _("Import a factiva corpora...")) - item1.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_TIP)) - file_menu.AppendItem(item1) - #item1.Enable(True) - + + 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")) + 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")) + menuTools.AppendItem(splitvar) + menuTools.AppendItem(extractmod) + self.ID_splitvar = splitvar.GetId() + self.ID_extractmod = extractmod.GetId() + file_menu.AppendMenu(-1, _(u"Tools"), menuTools) + + item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as..."), _(u"Save tab as...")) item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) - #item.Enable(False) file_menu.AppendItem(item) file_menu.Append(wx.ID_EXIT, _(u"Exit")) @@ -295,7 +331,6 @@ class IraFrame(wx.Frame): self.Sheet = MySheet(self) #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane()) self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane()) - #self.nb.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab) self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab) self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged) # add the toolbars to the manager @@ -323,7 +358,11 @@ class IraFrame(wx.Frame): self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData) self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText) self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse) - self.Bind(wx.EVT_MENU, self.import_factiva, id= ID_Import) + self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml) + self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail) + self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt) + self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar) + self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod) self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq) self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2) self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student) @@ -420,17 +459,13 @@ class IraFrame(wx.Frame): Le chemin de l'executable de R n'a pas été trouvé. Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/). Si R n'est pas installé dans le répertoire par défaut -(C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X) +(souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X) 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() - else : - print 'ok' - if sys.platform == 'darwin': - self.Rapp = self.PathPath.get('PATHS', 'rapp') - RappOk = CheckRapp(self.Rapp) + dlg.Destroy() self.DataPop = False self.DataTxt = False self.Text = '' @@ -460,7 +495,9 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" #Disable SaveTabAs file_menu = self.mb.GetMenu(0) items = file_menu.GetMenuItems() - items[4].Enable(DISEN) + for item in items : + if item.GetId() == ID_SaveTab : + item.Enable(DISEN) def ShowMenu(self, menu, Show=True): menu_pos = self.mb.FindMenu(menu) @@ -652,14 +689,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" self.tree.GiveFocus(uuid=npage.parametres['uuid']) def OnCloseTab(self, evt): - log.info('Closing tab %s' % str(evt.GetEventObject())) + #log.info('Closing tab %s' % str(evt.GetEventObject())) ctrl = evt.GetEventObject() if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel): notebook = True else : notebook = False page = self.nb.GetPage(self.nb.GetSelection()) - if 'parametres' in dir(page) : + if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) : self.history.rmtab(page.parametres) self.tree.CloseItem(uuid = page.parametres['uuid']) TabTitle = self.nb.GetPageText(self.nb.GetSelection()) @@ -815,18 +852,22 @@ Voulez-vous fermer quand même ?""" BugReport(self) def OnSimiTxt(self, evt, corpus = None) : - print 'PLUS DE BUG SUR SIMITXT' - #try : + # print 'PLUS DE BUG SUR SIMITXT' + try : #self.Text = SimiTxt(self) + if corpus is None : + corpus = self.tree.getcorpus() self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3)) if self.Text.val == wx.ID_OK : PlaySound(self) - #except : - # BugReport(self) + except : + BugReport(self) def OnWordCloud(self, evt, corpus = None) : # print 'PLUS DE BUG SUR WORDCLOUD' try : + if corpus is None : + corpus = self.tree.getcorpus() self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3)) if self.Text.val == wx.ID_OK : PlaySound(self) @@ -849,6 +890,8 @@ Voulez-vous fermer quand même ?""" def OnTextStat(self, event, corpus = None): 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 : @@ -860,6 +903,8 @@ Voulez-vous fermer quand même ?""" #try: #self.Text = AsLexico(self) 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) @@ -873,23 +918,42 @@ Voulez-vous fermer quand même ?""" except: BugReport(self) - def import_factiva(self,event): + def import_factiva_xml(self,event): + try : + ImportFactiva(self, 'xml') + except : + BugReport(self) + + def import_factiva_mail(self, evt) : + try : + ImportFactiva(self, 'mail') + except : + BugReport(self) + + def import_factiva_txt(self, evt) : try : - ImportFactiva(self) + ImportFactiva(self, 'txt') except : BugReport(self) + def ExtractTools(self, evt) : + ID = evt.GetId() + if ID == self.ID_splitvar : + Extract(self, 'splitvar') + else : + Extract(self, 'mods') + def OnTextAlceste(self, event, corpus = None): - #try: - print('ATTENTION : PLUS DE BUG SUR ALCESTE') + try: + #print('ATTENTION : PLUS DE BUG SUR ALCESTE') #RunAnalyse(self, corpus, Alceste, OptAlceste) + if corpus is None : + corpus = self.tree.getcorpus() self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6)) - #self.history.addtab(self.Text.parametres) - #OpenAnalyse(self, self.Text.parametres['ira']) if self.Text.val == wx.ID_OK: PlaySound(self) - #except: - # BugReport(self) + except: + BugReport(self) def OnPamSimple(self, event): try: