X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=iramuteq.py;h=6636b112bd627757ab02e7a6d0716742cdec5174;hp=3ebb9dd0128dca4a254eca2e0e4657dd21993d94;hb=c1ef58be7c81fc8f7b6dbc35c306cce25857ec2d;hpb=d890f400e628c5ab51b8cbfdecb1ca94e77bc281 diff --git a/iramuteq.py b/iramuteq.py index 3ebb9dd..6636b11 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -13,7 +13,6 @@ parser.add_option("-f", "--file", dest="filename", #print args #print options - import sys reload(sys) import locale @@ -29,12 +28,13 @@ 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 -#from wx.lib.wordwrap import wordwrap #------------------------------------ from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDicoAsDico, progressbar from checkversion import NewVersion @@ -49,23 +49,24 @@ 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 PamTxt +from textdist import AnalysePam from textstat import Stat from textaslexico import Lexico -from textsimi import SimiTxt -from textwordcloud import WordCloud +from textsimi import SimiTxt, SimiFromCluster +from textwordcloud import WordCloud, ClusterCloud from profile_segment import ProfileSegment -from textcheckcorpus import checkcorpus +#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 chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut +from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled +from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut from parse_factiva_xml import ImportFactiva +from tools import Extract + from tree import LeftTree ########################################################## ID_OpenData = wx.NewId() @@ -94,17 +95,19 @@ 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 +#chemin de l'application AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0]))) #chemin des images ImagePath = os.path.join(AppliPath, 'images') @@ -121,25 +124,34 @@ UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq')) #Si pas de fichiers de config utilisateur, on cree le repertoire CreateIraDirectory(UserConfigPath, AppliPath) #fichiers log pour windows (py2exe) -print 'PLUS DE LOG !!!!!!!!!!' -print 'LOGGING TEST' log = logging.getLogger('iramuteq') fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log')) -ch = logging.StreamHandler() -formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') -ch.setFormatter(formatter) +formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') 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) -#debug = False -#if not debug : -# if sys.platform == 'win32' or sys.platform == 'darwin': -# sys.stdout = open(os.path.join(UserConfigPath,'stdout.log'), 'w') -# sys.stderr = open(os.path.join(UserConfigPath,'stderr.log'), 'w') -#chemin des fichiers de configuration utilisateur -#print sys.argv[0] + +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) + +langues = {'french' : wx.LANGUAGE_FRENCH, + 'english' : wx.LANGUAGE_ENGLISH,} ##################################################################### class IraFrame(wx.Frame): @@ -153,20 +165,21 @@ class IraFrame(wx.Frame): self.AppliPath = AppliPath self.images_path = os.path.join(AppliPath,'images') self.UserConfigPath = UserConfigPath - self.RscriptsPath = ConstructRscriptsPath(AppliPath) - self.DictPath = ConstructDicoPath(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.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')) - 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() @@ -177,75 +190,94 @@ 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").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_OpenText, _(u"Open a text corpora"), _(u"Open a text corpora")) + 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) + - item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis"), _("Open an analysis")) + menuFactiva = wx.Menu() + 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").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) - 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) - - item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as..."), _(u"Save tab as...")) + menuTools = wx.Menu() + 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() + self.ID_extractmod = extractmod.GetId() + file_menu.AppendMenu(-1, _(u"Tools"), menuTools) + + + 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)) - #item.Enable(False) 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')) + 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() - 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 Alceste") - 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_SIMI, u"Analyse de similitudes") + 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"Clustering").decode('utf8'), menu_classif) + #analyse_menu.Append(ID_AFCM, u"AFCM") + 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_CHECKCORPUS, u"Vérifier le corpus") + 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 Alceste") - 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') + 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"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")) - 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, _("Matrix 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) #-------------------------------------------------------------------- @@ -281,9 +313,9 @@ class IraFrame(wx.Frame): # CenterPane()) self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text"). CenterPane()) - if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) : - with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f : - f.write('') + #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) : + # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f : + # 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"). @@ -307,7 +339,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 @@ -335,15 +366,20 @@ 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) 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.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) @@ -357,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.OnImportTXM, id=ID_ImportTXM) self.Bind(wx.EVT_CLOSE, self.OnClose) ################################################################## flags = self._mgr.GetAGWFlags() @@ -394,10 +431,27 @@ class IraFrame(wx.Frame): if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman' self.type = '' +##############################################################@ + self.DisEnSaveTabAs(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.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) @@ -406,6 +460,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']) @@ -432,47 +489,48 @@ 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() + dlg.Destroy() + + + def setlangue(self) : + try : + self.pref.read(self.ConfigPath['preferences']) + guilangue = self.pref.get('iramuteq', 'guilanguage') + if guilangue == 'french' : + self.presLan_fr.install() else : - print 'ok' - if sys.platform == 'darwin': - self.Rapp = self.PathPath.get('PATHS', 'rapp') - RappOk = CheckRapp(self.Rapp) - 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() + 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) 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) @@ -515,7 +573,6 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" self._mgr.UnInit() del self._mgr self.Destroy() - ##FIXME #if sys.platform == 'win32' : # os.system("taskkill /im iramuteq.exe /f") # print 'meurtre de process' @@ -577,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) - #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 = '' @@ -662,17 +697,18 @@ 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())) + #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()) @@ -769,21 +805,6 @@ Voulez-vous fermer quand même ?""" def OnAcceuil(self, event): self.ShowAPane(u"Intro_Text") event.Skip() - #??? -# def OnCreateTab(self, event): -# if not self._mgr.GetPane("Tab_content").name == "Tab_content": -# self._mgr.AddPane(self.CreateTabCtrl(), aui.AuiPaneInfo(). -# Name("Tab_content"). -# CenterPane()) -# self._mgr.GetPane("Intro_Text").Hide() -# self._mgr.GetPane("Tab_content").Show() -# self.ctrl.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab) -# else : -# page = wx.TextCtrl(self, -1, str(text), style=wx.TE_MULTILINE) -# self.ctrl.AddPage(page, "qsdqsd") -# self.ctrl.SetSelection(self.ctrl.GetPageCount() - 1) -# self._mgr.Update() - def CreateHTMLCtrl(self): ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300)) @@ -841,26 +862,35 @@ 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' - #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) 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: @@ -868,31 +898,29 @@ 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: + #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: @@ -901,35 +929,66 @@ 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) + ImportFactiva(self, 'mail') except : BugReport(self) + def import_factiva_txt(self, evt) : + try : + ImportFactiva(self, 'txt') + 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 : + 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): + 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 : @@ -1096,9 +1155,9 @@ class MySplashScreen(wx.SplashScreen): bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap() wx.SplashScreen.__init__(self, bmp, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT, - 3000, None, -1) + 2000, None, -1) self.Bind(wx.EVT_CLOSE, self.OnClose) - self.fc = wx.FutureCall(1500, self.ShowMain) + self.fc = wx.FutureCall(1, self.ShowMain) def OnClose(self, evt): evt.Skip() @@ -1111,6 +1170,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(): @@ -1123,7 +1183,6 @@ class MyApp(wx.App): Create and show the splash screen. It will then create and show the main frame when it is time to do so. """ - wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1) self.SetAppName("Iramuteq") splash = MySplashScreen()