From: Pierre Ratinaud Date: Tue, 3 Jan 2017 10:32:49 +0000 (+0100) Subject: Labbe's distance X-Git-Url: http://iramuteq.org/git?a=commitdiff_plain;h=4c4a0f5c8a9c145bc81fa93df5d1b0af34399eaf;p=iramuteq Labbe's distance --- diff --git a/PrintRScript.py b/PrintRScript.py index a19680d..be81a14 100644 --- a/PrintRScript.py +++ b/PrintRScript.py @@ -18,7 +18,7 @@ class PrintRScript : self.pathout = analyse.pathout self.analyse = analyse self.parametres = analyse.parametres - #self.scriptout = self.pathout['lastRscript.R'] + #self.scriptout = ffr(self.pathout['lastRscript.R']) self.scriptout = self.pathout['temp'] self.script = u"#Script genere par IRaMuTeQ - %s\n" % datetime.now().ctime() @@ -155,7 +155,7 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv data1 <- as(data1, "dgCMatrix") row.names(data1) <- 1:nrow(data1) """ % ffr(DicoPath['TableUc1']) - + if classif_mode == 0: txt += """ data2 <- readMM("%s") @@ -167,28 +167,28 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv chd1<-CHD(data1, x = nbt, mode.patate = mode.patate, svd.method = svd.method, libsvdc.path = libsvdc.path, log.file = log1) """ % ffr(DicoPath['log-chd1.txt']) - + if classif_mode == 0: txt += """ log2 <- "%s" chd2<-CHD(data2, x = nbt, mode.patate = mode.patate, svd.method = svd.method, libsvdc.path = libsvdc.path) log.file = log2) """ % ffr(DicoPath['log-chd2.txt']) - + txt += """ #lecture des uce listuce1<-read.csv2("%s") """ % ffr(DicoPath['listeuce1']) - + if classif_mode == 0: txt += """ listuce2<-read.csv2("%s") """ % ffr(DicoPath['listeuce2']) - + txt += """ rm(data1) """ - + if classif_mode == 0: txt += """ rm(data2) @@ -208,14 +208,14 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv write.csv2(n1, file="%s") rm(n1) """ % (classif_mode, mincl, ffr(DicoPath['uce']), ffr(DicoPath['n1.csv'])) - + txt += """ tree.tot1 <- make_tree_tot(chd1) # open_file_graph("%s", widt = 600, height=400) # plot(tree.tot1$tree.cl) # dev.off() """ % ffr(DicoPath['arbre1']) - + if classif_mode == 0: txt += """ classeuce2 <- chd.result$cuce2 @@ -223,19 +223,19 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv # open_file_graph("%s", width = 600, height=400) # plot(tree.tot2$tree.cl) # dev.off() - """ % ffr(DicoPath['arbre2'] ) - + """ % ffr(DicoPath['arbre2'] ) + txt += """ tree.cut1 <- make_dendro_cut_tuple(tree.tot1$dendro_tuple, chd.result$coord_ok, classeuce1, 1, nbt) save(tree.cut1, file="%s") - + open_file_graph("%s", width = 600, height=400) plot.dendropr(tree.cut1$tree.cl,classes, histo=TRUE) open_file_graph("%s", width = 600, height=400) plot(tree.cut1$dendro_tot_cl) dev.off() """ % (ffr(DicoPath['Rdendro']), ffr(DicoPath['dendro1']), ffr(DicoPath['arbre1'])) - + if classif_mode == 0: txt += """ tree.cut2 <- make_dendro_cut_tuple(tree.tot2$dendro_tuple, chd.result$coord_ok, classeuce2, 2, nbt) @@ -246,12 +246,12 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv plot(tree.cut2$dendro_tot_cl) dev.off() """ % (ffr(DicoPath['dendro2']), ffr(DicoPath['arbre2'])) - + txt += """ - + #save.image(file="%s") """ % (ffr(DicoPath['RData'])) - + fileout = open(DicoPath['Rchdtxt'], 'w') fileout.write(txt) fileout.close() @@ -1307,4 +1307,28 @@ class FreqMultiScript(PrintRScript): dev.off() """ % ffr(self.pathout['barplotrow.png']) self.add(txt) - self.write() + self.write() + +class LabbeScript(PrintRScript) : + def make_script(self) : + self.sources([self.analyse.parent.RscriptsPath['distance-labbe.R'], + self.analyse.parent.RscriptsPath['Rgraph']]) + txt = """ + tab <- read.csv2("%s", header=TRUE, sep=';', row.names=1) + """ % (self.pathout['tableafcm.csv']) + txt += """ + dist.mat <- dist.labbe(tab) + dist.mat <- as.dist(dist.mat, upper=F, diag=F) + write.table(as.matrix(dist.mat), "%s", sep='\t') + library(cluster) + library(ape) + chd <- hclust(dist.mat, method="ward.D2") + open_file_graph("%s", width=1000, height=1000, svg=F) + par(cex=1.2) + plot.phylo(as.phylo(chd), type='unrooted', lab4ut="axial") + dev.off() + """ % (self.pathout['distmat.csv'], self.pathout['dist-labbe.png']) + self.add(txt) + self.write() + + diff --git a/iramuteq.py b/iramuteq.py index acbff9e..7581997 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -48,6 +48,7 @@ from tabsplitvar import SplitMatrixFromVar #from textdist import AnalysePam from textstat import Stat from textaslexico import Lexico +from textlabbe import DistLabbe from textsimi import SimiTxt, SimiFromCluster from textwordcloud import WordCloud, ClusterCloud from textreinert import Reinert @@ -103,6 +104,7 @@ ID_Fact_copy = wx.NewId() ID_exportmeta = wx.NewId() ID_importdmi = wx.NewId() ID_merge = wx.NewId() +ID_labbe = wx.NewId() ########################################################## #elements de configuration ########################################################## @@ -202,7 +204,8 @@ images_analyses = { 'subcorpusthema' : 'subcorpusthema.png', 'preferences' : 'preferences.png', 'exportmetatable' : 'exportmetatable.png', - 'importdmi' : 'twitter.png' + 'importdmi' : 'twitter.png', + 'labbe' : 'spec.png' } ##################################################################### @@ -268,18 +271,18 @@ class IraFrame(wx.Frame): item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8')) item.SetBitmap(self.images_analyses['TXM']) file_menu.AppendItem(item) - + item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8')) item.SetBitmap(self.images_analyses['europress']) - file_menu.AppendItem(item) - + file_menu.AppendItem(item) + item = wx.MenuItem(file_menu, ID_importdmi, _(u"Import from DMI-TCAT (exp.)").decode('utf8'), _(u"Import from DMI-TCAT (exp.)").decode('utf8')) item.SetBitmap(self.images_analyses['importdmi']) - file_menu.AppendItem(item) - + file_menu.AppendItem(item) + item = wx.MenuItem(file_menu, ID_merge, _(u'Merge graphs').decode('utf8'), _(u'Merge graphs').decode('utf8')) file_menu.AppendItem(item) - + menuFactiva = wx.Menu() fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8')) fact_from_xml.SetBitmap(self.images_analyses['factiva_xml']) @@ -304,19 +307,19 @@ class IraFrame(wx.Frame): self.ID_extractthem = extractthem.GetId() file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), 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)) #file_menu.AppendItem(item) - + file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8')) - + edit_menu = wx.Menu() pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8')) pref.SetBitmap(self.images_analyses['preferences']) edit_menu.AppendItem(pref) #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8')) - + view_menu = wx.Menu() home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8')) home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16))) @@ -338,7 +341,7 @@ class IraFrame(wx.Frame): [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'], [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'], ] - + for analyse in matanalyses : if not isinstance(analyse, dict) : item = wx.MenuItem(matrix_menu, analyse[0], analyse[1]) @@ -376,10 +379,11 @@ class IraFrame(wx.Frame): #menu_splittab.AppendItem(splitvar) #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab) self.matrix_menu = matrix_menu - + text_menu = wx.Menu() analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'], [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'], + [ID_labbe, _(u"Labbe Distance").decode('utf8'),'labbe'], {'name' : _(u"Clustering").decode('utf8'), 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]}, [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'], @@ -389,7 +393,7 @@ class IraFrame(wx.Frame): [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]}, [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'], ] - + for analyse in analyses_text : if not isinstance(analyse, dict) : item = wx.MenuItem(text_menu, analyse[0], analyse[1]) @@ -414,7 +418,7 @@ class IraFrame(wx.Frame): # # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8')) self.text_menu = text_menu - + help_menu = wx.Menu() about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8')) about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16))) @@ -424,14 +428,14 @@ class IraFrame(wx.Frame): help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16))) help_menu.AppendItem(help) #help_menu.Append(wx.ID_HELP, _(u"Online 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(matrix_menu, _(u"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) #-------------------------------------------------------------------- self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP) @@ -459,7 +463,7 @@ class IraFrame(wx.Frame): tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8')) tb1.AddSeparator() tb1.AddLabelTool(ID_importdmi, "ImportDMI", self.images_analyses['importdmi'], shortHelp= _(u"Import from DMI-TCAT (exp.)").decode('utf8'), longHelp=_(u"Import from DMI-TCAT (exp.)").decode('utf8')) - tb1.AddSeparator() + tb1.AddSeparator() tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8')) tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8')) tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8')) @@ -469,7 +473,7 @@ class IraFrame(wx.Frame): tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8')) tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8')) tb1.Realize() - + tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) for analyse in analyses_text : @@ -479,7 +483,7 @@ class IraFrame(wx.Frame): for subana in analyse['content'] : tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1]) tb_text.Realize() - + tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) for analyse in matanalyses : @@ -487,9 +491,9 @@ class IraFrame(wx.Frame): tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1]) else : for subana in analyse['content'] : - tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1]) + tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1]) tb_mat.Realize() - + tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8')) @@ -498,7 +502,7 @@ class IraFrame(wx.Frame): #------------------------------------------------------------------------------------------------ self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY) - + #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo(). # Name("Text").CenterPane()) self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo(). @@ -515,7 +519,7 @@ class IraFrame(wx.Frame): self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')). Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True). MinimizeButton(True)) - + #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER) self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER) notebook_flags = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER @@ -529,14 +533,14 @@ class IraFrame(wx.Frame): # CenterPane()) self._mgr.AddPane(self.nb, aui.AuiPaneInfo(). Name("Tab_content"). - CenterPane()) - + CenterPane()) + #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane()) #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane()) 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 - + #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo(). # Name("tb1").Caption("Fichiers"). # ToolbarPane().Top(). @@ -545,25 +549,25 @@ class IraFrame(wx.Frame): Name("tb1").Caption("Fichiers"). ToolbarPane().Top(). LeftDockable(True).RightDockable(False)) - + self._mgr.AddPane(tb_text, aui.AuiPaneInfo(). Name("tb_text").Caption("analyse_text"). ToolbarPane().Top(). LeftDockable(True).RightDockable(False)) - + self._mgr.AddPane(tb_mat, aui.AuiPaneInfo(). Name("tb_mat").Caption("analyse_matrix"). ToolbarPane().Top(). LeftDockable(True).RightDockable(False)) - + self._mgr.AddPane(tb_help, aui.AuiPaneInfo(). Name("tb_help").Caption("help"). ToolbarPane().Top(). LeftDockable(True).RightDockable(False)) - + self._mgr.GetPane('tb_text').Hide() self._mgr.GetPane('tb_mat').Hide() - + self.ShowAPane("Intro_Text") self._mgr.GetPane("lefttree").Show() self._mgr.GetPane("classif_tb").Hide() @@ -598,6 +602,7 @@ class IraFrame(wx.Frame): #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.OnTextLabbe, id=ID_labbe) self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM) self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT) self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM) @@ -698,7 +703,7 @@ class IraFrame(wx.Frame): with open(ConfigPath['path'], 'w') as f : self.PathPath.write(f) else: - BestRPath = True + BestRPath = True if BestRPath : self.RPath = self.PathPath.get('PATHS', 'rpath') if New : @@ -737,18 +742,18 @@ class IraFrame(wx.Frame): if Show : self._mgr.GetPane('tb_text').Show() else : - self._mgr.GetPane('tb_text').Hide() + self._mgr.GetPane('tb_text').Hide() elif menu == 'matrix' : menu_pos = 3 if Show : self._mgr.GetPane('tb_mat').Show() else : - self._mgr.GetPane('tb_mat').Hide() + self._mgr.GetPane('tb_mat').Hide() elif menu == 'view' : menu_pos = 2 else : menu_pos = None - + #menu_pos = self.mb.FindMenu(menu) if not menu_pos is None : self.mb.EnableTop(menu_pos, Show) @@ -777,7 +782,7 @@ class IraFrame(wx.Frame): self.tableau.make_content() OpenAnalyse(self, self.tableau.parametres) self.tree.OnItemAppend(self.tableau.parametres) - del busy + del busy except : del busy BugReport(self) @@ -925,25 +930,25 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" self.x = self.x + 20 x = self.x pt = self.ClientToScreen(wx.Point(0, 0)) - + return wx.Point(pt.x + x, pt.y + x) - + def ShowAPane(self, panel): for pane in self._mgr.GetAllPanes() : - if not pane.IsToolbar() and pane.name != 'lefttree': + if not pane.IsToolbar() and pane.name != 'lefttree': pane.Hide() self._mgr.GetPane(panel).Show() self._mgr.Update() - + def OnAcceuil(self, event): self.ShowAPane(u"Intro_Text") event.Skip() - + def CreateHTMLCtrl(self): ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300)) if "gtk2" in wx.PlatformInfo: ctrl.SetStandardFonts() - ctrl.SetPage(u"text") + ctrl.SetPage(u"text") return ctrl def ShowTab(self, evt): @@ -963,16 +968,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@' analyse(self, matrix, parametres = parametres, dlg = dlgnb) except: - BugReport(self) + BugReport(self) def OnFreq(self, event, matrix = None): self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3) - + def OnFreqMulti(self, event, matrix = None): self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3) def OnChi2(self, event, matrix = None): - self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) + self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) def OnChi2McNemar(self, event, matrix = None): self.analyse_matrix(McNemar, matrix = matrix, analyse_type = 'chi2mcnemar', dlgnb = 3) @@ -985,10 +990,10 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" # matrix = self.tree.getmatrix() #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3) self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5) - + def OnStudent(self, event): try: - MakeStudent(self) + MakeStudent(self) except: BugReport(self) @@ -1006,7 +1011,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" PlaySound(self) except: BugReport(self) - + # def OnCHDReinert(self, event): # try: # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE') @@ -1018,35 +1023,35 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" def OnMergeGraph(self, evt): #FIXME AnalyseMerge(self, {'type': 'merge', 'fileout' : '/tmp/test.txt'}, dlg = 5) - + def OnProto(self, evt, matrix = None) : self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) #Prototypical(self, {'type' : 'proto'}) - + def OnSplitVar(self, evt, matrix = None): if matrix is None : matrix = self.tree.getmatrix() self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3) #matrix = self.tree.getmatrix() - + def OnSimiTxt(self, evt, corpus = None) : # print 'PLUS DE BUG SUR SIMITXT' try : #self.Text = SimiTxt(self) if corpus is None : - corpus = self.tree.getcorpus() + corpus = self.tree.getcorpus() self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3) if self.Text.val == wx.ID_OK : PlaySound(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() + corpus = self.tree.getcorpus() self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3) if self.Text.val == wx.ID_OK : PlaySound(self) @@ -1068,13 +1073,13 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" if corpus is None : corpus = self.tree.getcorpus() self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7) - + if self.Text.val == wx.ID_OK : PlaySound(self) except: BugReport(self) - - def OnTextSpec(self, event, corpus = None): + + def OnTextSpec(self, event, corpus = None): try: #self.Text = AsLexico(self) #print('ATTENTION : PLUS DE BUG SUR LEXICO') @@ -1085,7 +1090,18 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" PlaySound(self) except: BugReport(self) - + + def OnTextLabbe(self, event, corpus = None): + try: + if corpus is None : + corpus = self.tree.getcorpus() + self.Text = DistLabbe(self, corpus, parametres = {'type' : 'labbe'}, dlg = 3) + if self.Text.val == wx.ID_OK : + PlaySound(self) + except: + BugReport(self) + + def OnTextAfcm(self, event): try: AfcUci(self) @@ -1116,23 +1132,23 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" ImportFactiva(self, 'txm') except : BugReport(self) - + def OnImportEuropress(self, evt) : try : ImportFactiva(self, 'euro') except : BugReport(self) - + def OnImportDMI(self, evt): ImportDMI(self, {}) - + def OnExportMeta(self, evt, corpus = None): if corpus is None : corpus = self.tree.getcorpus() try : ExportMetaTable(self, corpus) except : - BugReport(self) + BugReport(self) def ExtractTools(self, evt) : ID = evt.GetId() @@ -1148,7 +1164,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" #print('ATTENTION : PLUS DE BUG SUR ALCESTE') #RunAnalyse(self, corpus, Alceste, OptAlceste) if corpus is None : - corpus = self.tree.getcorpus() + corpus = self.tree.getcorpus() self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6) if self.Text.val == wx.ID_OK: PlaySound(self) diff --git a/layout.py b/layout.py index 6e5bdb9..ad87da6 100644 --- a/layout.py +++ b/layout.py @@ -82,8 +82,8 @@ class GraphPanelAfc(wx.Panel): todel.append(i) b += 1 self.list_graph = [graph for i, graph in enumerate(self.list_graph) if i not in todel] - - self.param = { 'typegraph' : 0, + + self.param = { 'typegraph' : 0, 'width' : 800, 'height' : 800, 'what' : 0, @@ -94,7 +94,7 @@ class GraphPanelAfc(wx.Panel): 'select_nb' : 50, 'select_chi' : 4, 'nbchic' : 30, - 'over' : 0, + 'over' : 0, 'cex_txt' : 0, 'txt_min' : 5, 'txt_max' : 40, @@ -117,7 +117,7 @@ class GraphPanelAfc(wx.Panel): self.panel_1.SetScrollRate(20, 20) self.panel_1.SetFocus() - def __do_layout(self): + def __do_layout(self): self.sizer_1 = wx.BoxSizer(wx.VERTICAL) self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL) self.sizer_3 = wx.BoxSizer(wx.VERTICAL) @@ -129,7 +129,7 @@ class GraphPanelAfc(wx.Panel): self.Bind(wx.EVT_BUTTON, self.on_delete_image, self.buts[i]) self.panel_1.SetSizer(self.sizer_3) self.sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0) - self.SetSizer(self.sizer_2) + self.SetSizer(self.sizer_2) def on_delete_image(self, event) : image_id = int(event.GetEventObject().GetName()) @@ -156,7 +156,7 @@ class GraphPanelAfc(wx.Panel): self.Layout() else : dial.Destroy() - + def onrightclick(self, event): image_id = int(event.GetEventObject().GetName()) image_path = self.list_graph[image_id][0] @@ -201,7 +201,7 @@ class GraphPanelAfc(wx.Panel): 'select_nb' : dial.spin_nb.GetValue(), 'select_chi' : dial.spin_chi.GetValue(), 'nbchic' : dial.spin_nbchic.GetValue(), - 'over' : dial.check3.GetValue(), + 'over' : dial.check3.GetValue(), 'cex_txt' : dial.check4.GetValue(), 'txt_min' : dial.spin_min.GetValue(), 'txt_max' : dial.spin_max.GetValue(), @@ -226,7 +226,7 @@ class GraphPanelAfc(wx.Panel): afc <- afcf afc_table <- afcf_table chistabletot <- specfp - """ + """ elif self.itempath == 'liste_graph_afct' : txt +=""" afc <- afct @@ -266,10 +266,10 @@ class GraphPanelAfc(wx.Panel): 'bargraphw' : 60*int(self.param['clnb']), } web = WebExport(self.ira, parametres) - self.fileout = web.exportafc() + self.fileout = web.exportafc() if self.param['typegraph'] == 3 : fileout = os.path.join(os.path.basename(self.fileout), 'index.html') - else : + else : fileout = os.path.basename(self.fileout) self.list_graph.append([fileout, txt]) print_liste(self.DictPathOut[self.itempath], self.list_graph) @@ -288,7 +288,7 @@ class GraphPanelAfc(wx.Panel): self.sizer_3.Add(self.buts[-1], 0, wx.ALIGN_CENTER_HORIZONTAL, 0) self.sizer_3.Fit(self.panel_1) self.Layout() - + self.panel_1.Scroll(0,self.panel_1.GetScrollRange(wx.VERTICAL)) # elif self.param['typegraph'] == 2 : # parametres = {'gexffile' : self.fileout, @@ -304,7 +304,7 @@ class GraphPanelAfc(wx.Panel): # dial.link.SetURL(afcout) # dial.Layout() # dial.ShowModal() - + class GraphPanel(wx.ScrolledWindow): def __init__(self, parent, dico, list_graph, txt = '', style = wx.TAB_TRAVERSAL): @@ -325,13 +325,13 @@ class GraphPanel(wx.ScrolledWindow): else : self.listimg.append(wx.StaticBitmap(self, -1, wx.Bitmap(os.path.join(self.dirout,list_graph[i][0]), wx.BITMAP_TYPE_ANY))) self.labels.append(wx.StaticText(self, -1, list_graph[i][1])) - self.Bind(wx.EVT_MOTION, self.onMouseMove) + self.Bind(wx.EVT_MOTION, self.onMouseMove) self.__set_properties() self.__do_layout() def __set_properties(self): self.EnableScrolling(True,True) - self.SetScrollRate(20, 20) + self.SetScrollRate(20, 20) self.SetFocus() @@ -339,7 +339,7 @@ class GraphPanel(wx.ScrolledWindow): self.sizer_1 = wx.BoxSizer(wx.VERTICAL) self.sizer_2 = wx.BoxSizer(wx.VERTICAL) self.sizer_3 = wx.BoxSizer(wx.HORIZONTAL) - self.sizer_1.Add(self.deb) + self.sizer_1.Add(self.deb) for i in range(0, len(self.listimg)): self.sizer_1.Add(self.listimg[i], 1, wx.ALIGN_CENTER_HORIZONTAL, 0) self.sizer_1.Add(self.labels[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0) @@ -349,7 +349,7 @@ class GraphPanel(wx.ScrolledWindow): def onMouseMove(self, event): self.SetFocus() - + def open_antiprofil(panel, AntiProfile, encoding) : DictAnti = ReadProfileAsDico(AntiProfile, True, encoding) @@ -376,7 +376,7 @@ class OpenCHDS(): self.parametres = parametres self.pathout = PathOut(parametres['ira']) self.pathout.basefiles(ChdTxtPathOut) - DictPathOut = self.pathout + DictPathOut = self.pathout self.DictPathOut = DictPathOut self.dictpathout = DictPathOut self.parent = parent @@ -393,11 +393,11 @@ class OpenCHDS(): self.corpus.read_tableau(self.pathout['analyse.db']) clnb = parametres['clnb'] - dlg = progressbar(self, maxi = 4 + clnb) - self.clnb = clnb + dlg = progressbar(self, maxi = 4 + clnb) + self.clnb = clnb print 'lecture des profils' dlg.Update(2, _(u"Reading profiles").decode('utf8')) - + DictProfile = ReadProfileAsDico(Profile, Alceste, self.encoding) self.DictProfile = DictProfile self.cluster_size = [] @@ -1117,7 +1117,7 @@ class DefaultTextLayout : self.corpus = corpus self.cmd = cmd self.dolayout() - + def dolayout(self, cmd) : log.info('no layout yet') @@ -1137,6 +1137,22 @@ class WordCloudLayout(DefaultTextLayout): self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1) self.ira.ShowAPane("Tab_content") +class LabbeLayout(DefaultTextLayout): + def dolayout(self): + self.Tab = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition) + #if self.parametres['svg'] : + # list_graph = [['nuage_1.svg', 'Nuage']] + #else : + # list_graph = [['nuage_1.png', 'Nuage']] + list_graph = [['dist-labbe.png', _(u'Ward clustering (method ward2)').encode('utf8')]] + self.TabStatTot = GraphPanel(self.ira.nb, self.pathout, list_graph) + self.Tab.AddPage(self.TabStatTot, _(u"Labbé's distance").encode('utf8')) + self.Tab.corpus = self.corpus + self.Tab.parametres = self.parametres + self.ira.nb.AddPage(self.Tab, '%s' % self.parametres['name']) + self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1) + self.ira.ShowAPane("Tab_content") + def blender(self): nodesfile = self.pathout['nodes.csv'] edgesfile = self.pathout['edges.csv'] diff --git a/openanalyse.py b/openanalyse.py index a80670e..da13f74 100644 --- a/openanalyse.py +++ b/openanalyse.py @@ -5,12 +5,10 @@ #License: GNU/GPL from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut -from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout +from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout, LabbeLayout from corpus import Corpus, copycorpus from tableau import Tableau import os -#import shelve -#from tabsimi import DoSimi from functions import DoConf, ReadDicoAsDico from tableau import Tableau import logging @@ -28,7 +26,7 @@ class OpenAnalyse(): self.conf = DoConf(parametres).getoptions() self.path = parametres self.conf = self.redopath(self.conf, parametres) - + if self.conf['type'] == 'corpus' : corpus = self.opencorpus() elif self.conf['type'] == 'matrix' : @@ -39,7 +37,7 @@ class OpenAnalyse(): else : intree = False corpus = self.openanalyse() - + if self.conf.get('lem',1) : dolem = True else : @@ -72,17 +70,17 @@ class OpenAnalyse(): else : self.parent.tree.AddAnalyse(self.conf, bold = True) self.parent.history.addtab(self.conf) - + def redopath(self, conf, path) : conf['ira'] = os.path.realpath(path) conf['pathout'] = os.path.dirname(os.path.realpath(path)) DoConf(conf['ira']).makeoptions([conf['type']], [conf]) return conf - + def opencorpus(self) : log.info('open corpus') if self.conf['uuid'] not in self.parent.history.corpus : - self.parent.history.add(self.conf) + self.parent.history.add(self.conf) log.info('add corpus to history') self.parent.tree.OnItemAppend(self.conf) if self.conf['uuid'] in self.parent.history.openedcorpus : @@ -97,7 +95,7 @@ class OpenAnalyse(): self.parent.history.openedcorpus[self.conf['uuid']] = corpus self.opencorpus_analyses() self.doopen(corpus) - + def openmatrix(self): log.info('open matrix') if self.conf['uuid'] not in self.parent.history.ordermatrix : @@ -114,7 +112,7 @@ class OpenAnalyse(): matrix.open() self.parent.history.openedmatrix[self.conf['uuid']] = matrix self.openmatrix_analyses() - self.doopen(matrix) + self.doopen(matrix) self.parent.history.addtab(self.conf) def opencorpus_analyses(self) : @@ -132,7 +130,7 @@ class OpenAnalyse(): self.parent.history.addmultiple(analyses) for analyse in analyses : self.parent.tree.AddAnalyse(analyse, bold = False) - + def openmatrix_analyses(self): pass @@ -149,11 +147,13 @@ class OpenAnalyse(): def doopen(self, corpus) : if self.conf['type'] == 'corpus' : - OpenCorpus(self.parent, self.conf) + OpenCorpus(self.parent, self.conf) elif self.conf['type'] == 'stat' : StatLayout(self.parent, corpus, self.conf) elif self.conf['type'] == 'spec' : dolexlayout(self.parent, corpus, self.conf) + elif self.conf['type'] == 'labbe' : + LabbeLayout(self.parent, corpus, self.conf) elif self.conf['type'] == 'alceste' : OpenCHDS(self.parent, corpus, self.conf, Alceste = True) elif self.conf['type'] == 'simitxt' or self.conf['type'] == 'clustersimitxt' : @@ -172,4 +172,3 @@ class OpenAnalyse(): FreqLayout(self.parent, corpus, self.conf) elif self.conf['type'] == 'chi2' or self.conf['type'] == 'chi2mcnemar': Chi2Layout(self.parent, corpus, self.conf) -