#------------------------------------
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 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 corpusNG import BuildFromAlceste, Builder
+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 parse_factiva_xml import ImportFactiva
+from tools import Extract
+
from tree import LeftTree
##########################################################
ID_OpenData = wx.NewId()
#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('BUG : %s' % data)
+ 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):
#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()
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)
- 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..."))
+
+ 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"), menuFactiva)
+
+ 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"))
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_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()
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)
#--------------------------------------------------------------------
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.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)
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
+ 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'])
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)
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)
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()))
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:
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 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')
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 :
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():