From 2ffa9388c45dce689bb45c1cf6c7ad81d2636409 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 21 Mar 2013 16:37:43 +0100 Subject: [PATCH] lot of things :) --- PrintRScript.py | 14 + Rscripts/Rgraph.R | 108 +++++++- Rscripts/prototypical.R | 65 +++++ analysematrix.py | 2 +- chemins.py | 17 ++ dialog.py | 116 +++++++++ dictionnaires/expression_gr.txt | 0 dictionnaires/lexique_gr.txt | 558 ++++++++++++++++++++++++++++++++++++++++ images/splash.png | Bin 43358 -> 43305 bytes images/splash.svg | 8 +- iracmd.py | 5 +- iramuteq.py | 15 +- openanalyse.py | 8 +- tabverges.py | 88 +++++-- textwordcloud.py | 10 +- 15 files changed, 970 insertions(+), 44 deletions(-) create mode 100644 Rscripts/prototypical.R create mode 100644 dictionnaires/expression_gr.txt create mode 100644 dictionnaires/lexique_gr.txt diff --git a/PrintRScript.py b/PrintRScript.py index 589aabf..636fe9e 100644 --- a/PrintRScript.py +++ b/PrintRScript.py @@ -1117,3 +1117,17 @@ class WordCloudRScript(PrintRScript) : """ % (ffr(self.analyse.pathout['actives_eff.csv']), ffr(self.analyse.pathout['selected.csv']), self.parametres['maxword'], ffr(self.parametres['graphout']), self.parametres['width'], self.parametres['height'], bg_col, self.parametres['maxcex'], self.parametres['mincex'], txt_col) self.add(txt) self.write() + +class ProtoScript(PrintRScript) : + def make_script(self) : + self.sources([self.analyse.parent.RscriptsPath['Rgraph'], self.analyse.parent.RscriptsPath['prototypical.R']]) + self.packages(['wordcloud']) + txt = """ + mat <- read.csv2("%s", header = FALSE, row.names=1, sep='\t', quote='"', dec='.') + open_file_graph("%s",height=600, width=600) + prototypical(mat, mfreq = %s, mrank = %s, cloud = FALSE, cexrange=c(1,2.4), cexalpha= c(0.4, 1)) + dev.off() + """ % (self.analyse.pathout['table.csv'], self.analyse.pathout['proto.png'], self.parametres['limfreq'], self.parametres['limrang']) + self.add(txt) + self.write() + diff --git a/Rscripts/Rgraph.R b/Rscripts/Rgraph.R index 4d94e35..e947a40 100644 --- a/Rscripts/Rgraph.R +++ b/Rscripts/Rgraph.R @@ -477,16 +477,120 @@ make_afc_graph <- function(toplot, classes, clnb, xlab, ylab, cex.txt = NULL, le } } +plot.dendro.prof <- function(tree, classes, chisqtable, nbbycl = 60, type.dendro = "phylogram", from.cmd = FALSE, bw = FALSE, lab = NULL) { + library(ape) + library(wordcloud) + classes<-classes[classes!=0] + classes<-as.factor(classes) + sum.cl<-as.matrix(summary(classes, maxsum=1000000)) + sum.cl<-(sum.cl/colSums(sum.cl)*100) + sum.cl<-round(sum.cl,2) + sum.cl<-cbind(sum.cl,as.matrix(100-sum.cl[,1])) + sum.cl <- sum.cl[,1] + tree.order<- as.numeric(tree$tip.label) + vec.mat<-NULL + row.keep <- select.chi.classe(chisqtable, nbbycl) + toplot <- chisqtable[row.keep,] + lclasses <- list() + for (classe in 1:length(sum.cl)) { + ntoplot <- toplot[,classe] + ntoplot <- ntoplot[order(ntoplot, decreasing = TRUE)] + ntoplot <- round(ntoplot, 0) + ntoplot <- ntoplot[1:nbbycl] + #ntoplot <- ntoplot[order(ntoplot)] + #ntoplot <- ifelse(length(ntoplot) > nbbycl, ntoplot[1:nbbycl], ntoplot) + lclasses[[classe]] <- ntoplot + } + vec.mat <- matrix(1, nrow = 2, ncol = length(sum.cl)) + vec.mat[2,] <- 2:(length(sum.cl)+1) + layout(matrix(vec.mat, nrow=2, ncol=length(sum.cl)),heights=c(1,4)) + if (! bw) { + col <- rainbow(length(sum.cl))[as.numeric(tree$tip.label)] + colcloud <- rainbow(length(sum.cl)) + } + par(mar=c(1,0,0,0)) + label.ori<-tree[[2]] + if (!is.null(lab)) { + tree$tip.label <- lab + } else { + tree[[2]]<-paste('classe ',tree[[2]]) + } + plot.phylo(tree,label.offset=0.1,tip.col=col, type=type.dendro, direction = 'downwards', srt=90, adj = 0) + for (i in tree.order) { + par(mar=c(0,0,1,0),cex=0.7) + #wordcloud(names(lclasses[[i]]), lclasses[[i]], scale = c(1.5, 0.2), random.order=FALSE, colors = colcloud[i]) + yval <- 1.1 + plot(0,0,pch='', axes = FALSE) + vcex <- norm.vec(lclasses[[i]], 0.8, 3) + for (j in 1:length(lclasses[[i]])) { + yval <- yval-(strheight( names(lclasses[[i]])[j],cex=vcex[j])+0.02) + text(-0.9, yval, names(lclasses[[i]])[j], cex = vcex[j], col = colcloud[i], adj=0) + } + } + +} + +plot.dendro.cloud <- function(tree, classes, chisqtable, nbbycl = 60, type.dendro = "phylogram", from.cmd = FALSE, bw = FALSE, lab = NULL) { + library(wordcloud) + library(ape) + classes<-classes[classes!=0] + classes<-as.factor(classes) + sum.cl<-as.matrix(summary(classes, maxsum=1000000)) + sum.cl<-(sum.cl/colSums(sum.cl)*100) + sum.cl<-round(sum.cl,2) + sum.cl<-cbind(sum.cl,as.matrix(100-sum.cl[,1])) + sum.cl <- sum.cl[,1] + tree.order<- as.numeric(tree$tip.label) + vec.mat<-NULL + row.keep <- select.chi.classe(chisqtable, nbbycl) + toplot <- chisqtable[row.keep,] + lclasses <- list() + for (classe in 1:length(sum.cl)) { + ntoplot <- toplot[,classe] + ntoplot <- ntoplot[order(ntoplot, decreasing = TRUE)] + ntoplot <- round(ntoplot, 0) + ntoplot <- ntoplot[1:nbbycl] + ntoplot <- ntoplot[order(ntoplot)] + #ntoplot <- ifelse(length(ntoplot) > nbbycl, ntoplot[1:nbbycl], ntoplot) + lclasses[[classe]] <- ntoplot + } + for (i in 1:length(sum.cl)) vec.mat<-append(vec.mat,1) + v<-2 + for (i in 1:length(sum.cl)) { + vec.mat<-append(vec.mat,v) + v<-v+1 + } + layout(matrix(vec.mat,length(sum.cl),2),widths=c(1,2)) + if (! bw) { + col <- rainbow(length(sum.cl))[as.numeric(tree$tip.label)] + colcloud <- rainbow(length(sum.cl)) + } + par(mar=c(0,0,0,0)) + label.ori<-tree[[2]] + if (!is.null(lab)) { + tree$tip.label <- lab + } else { + tree[[2]]<-paste('classe ',tree[[2]]) + } + plot.phylo(tree,label.offset=0.1,tip.col=col, type=type.dendro) + for (i in rev(tree.order)) { + par(mar=c(0,0,1,0),cex=0.9) + wordcloud(names(lclasses[[i]]), lclasses[[i]], scale = c(4, 0.8), random.order=FALSE, colors = colcloud[i]) + } +} + plot.dendropr <- function(tree, classes, type.dendro="phylogram", histo=FALSE, from.cmd=FALSE, bw=FALSE, lab = NULL, tclasse=TRUE) { classes<-classes[classes!=0] classes<-as.factor(classes) - sum.cl<-as.matrix(summary(classes)) + sum.cl<-as.matrix(summary(classes, maxsum=1000000)) sum.cl<-(sum.cl/colSums(sum.cl)*100) sum.cl<-round(sum.cl,2) sum.cl<-cbind(sum.cl,as.matrix(100-sum.cl[,1])) tree.order<- as.numeric(tree$tip.label) + + if (! bw) { - col = rainbow(nrow(sum.cl))[as.numeric(tree$tip.label)] + col <- rainbow(nrow(sum.cl))[as.numeric(tree$tip.label)] col.bars <- col col.pie <- rainbow(nrow(sum.cl)) #col.vec<-rainbow(nrow(sum.cl))[as.numeric(tree[[2]])] diff --git a/Rscripts/prototypical.R b/Rscripts/prototypical.R new file mode 100644 index 0000000..b5f58fd --- /dev/null +++ b/Rscripts/prototypical.R @@ -0,0 +1,65 @@ + +norm.vec <- function(v, min, max) { + + vr <- range(v) + if (vr[1]==vr[2]) { + fac <- 1 + } else { + fac <- (max-min)/(vr[2]-vr[1]) + } + (v-vr[1]) * fac + min +} + + +#x a table with freq and rank, rownames are words + +prototypical <- function(x, mfreq = NULL, mrank = NULL, cexrange=c(0.8, 3), cexalpha = c(0.5, 1), labfreq = TRUE, labrank = TRUE, cloud = TRUE) { + library(wordcloud) + if (is.null(mfreq)) { + mfreq <- sum(x[,1]) / nrow(x) + } + if (is.null(mrank)) { + mrank <- sum(x[,1] * x[,2]) / sum(x[,1]) + } + print(mfreq) + print(mrank) + + x <- x[order(x[,1], decreasing = TRUE),] + x[,2] <- round(x[,2],1) + ZN <- which(x[,1] >= mfreq & x[,2] <= mrank) + FP <- which(x[,1] >= mfreq & x[,2] > mrank) + SP <- which(x[,1] < mfreq & x[,2] > mrank) + CE <- which(x[,1] < mfreq & x[,2] <= mrank) + mfreq <- round(mfreq, 2) + mrank <- round(mrank, 2) + toplot <- list(ZN, FP, SP, CE) + labcex <- norm.vec(x[,1], cexrange[1], cexrange[2]) + labalpha <- norm.vec(x[,2], cexalpha[2], cexalpha[1]) + labalpha <- rgb(0.1,0.2,0.1, labalpha) + par(oma=c(1,3,3,1)) + layout(matrix(c(1,4,2,3), nrow=2)) + ti <- c("Zone du noyau", "Première périphérie", "Seconde périphérie", "Elements contrastés") + for (i in 1:length(toplot)) { + rtoplot <- toplot[[i]] + if (length(rtoplot)) { + par(mar=c(0,0,2,0)) + if (cloud) { + labels <- paste(rownames(x)[rtoplot], x[rtoplot,1], x[rtoplot,2], sep='-') + wordcloud(labels, x[rtoplot,1], scale = c(max(labcex[rtoplot]), min(labcex[rtoplot])), color = labalpha[rtoplot], random.order=FALSE, rot.per = 0) + box() + } else { + yval <- 1.1 + plot(0,0,pch='', axes = FALSE) + k<- 0 + for (val in rtoplot) { + yval <- yval-(strheight(rownames(x)[val],cex=labcex[val])+0.02) + text(-0.9, yval, paste(rownames(x)[val], x[val,1], x[val,2], sep = '-'), cex = labcex[val], col = labalpha[val], adj=0) + } + box() + } + title(ti[i]) + } + } + mtext(paste('<', mfreq, ' Fréquences ', '>=', mfreq, sep = ' '), side=2, line=1, cex=1, col="red", outer=TRUE) + mtext(paste('<', mrank, ' Rangs ', '>=', mrank, sep = ' '), side=3, line=1, cex=1, col="red", outer=TRUE) +} diff --git a/analysematrix.py b/analysematrix.py index 2a3c88d..7b861a6 100644 --- a/analysematrix.py +++ b/analysematrix.py @@ -59,7 +59,7 @@ class AnalyseMatrix : pass def doR(self, Rscript, wait = False, dlg = None, message = '') : - log.info('R code...') + #log.info('R code...') pid = exec_rcode(self.ira.RPath, Rscript, wait = wait) while pid.poll() is None : if dlg : diff --git a/chemins.py b/chemins.py index 847e5c7..6b124ef 100644 --- a/chemins.py +++ b/chemins.py @@ -62,6 +62,23 @@ def ffr(filename): def FFF(filename): return filename.replace('\\', '/') +RscriptsPath = { + 'Rfunct': 'Rfunct.R', + 'chdfunct': 'chdfunct.R', + 'Rgraph': 'Rgraph.R', + 'plotafcm': 'plotafcm.R', + 'afc_graph' : 'afc_graph.R', + #'CHD': 'CHDPOND.R', + 'CHD': 'CHD.R', + #'CHD' : 'NCHD.R', + 'chdtxt': 'chdtxt.R', + 'chdquest': 'chdquest.R', + 'pamtxt' : 'pamtxt.R', + 'anacor' : 'anacor.R', + #'anacor' : 'Nanacor.R', + 'simi' : 'simi.R', + } + def ConstructRscriptsPath(AppliPath): RScriptsPath = os.path.join(AppliPath, 'Rscripts') #print('@@@@@@@@@@@PONDERATION CHDPOND.R@@@@@@@@@@@@@@@@') diff --git a/dialog.py b/dialog.py index 314700d..4b79f88 100755 --- a/dialog.py +++ b/dialog.py @@ -2687,3 +2687,119 @@ class FreqDialog(wx.Dialog): # end wxGlade +class ProtoDial ( wx.Dialog ): + + def __init__( self, parent, headers ): + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u'Préférences', pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE ) + + self.SetSizeHintsSz( wx.Size( 200,300 ), wx.DefaultSize ) + + bSizer1 = wx.BoxSizer( wx.VERTICAL ) + + fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 ) + fgSizer1.SetFlexibleDirection( wx.BOTH ) + fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) + + self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"Variables", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText1.Wrap( -1 ) + fgSizer1.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) + + self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"Rangs", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText2.Wrap( -1 ) + fgSizer1.Add( self.m_staticText2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) + + variablesChoices = headers + self.variables = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, variablesChoices, wx.LB_MULTIPLE ) + self.variables.SetMinSize( wx.Size( 150,-1 ) ) + + fgSizer1.Add( self.variables, 0, wx.ALL|wx.EXPAND, 5 ) + + rangsChoices = headers + self.rangs = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, rangsChoices, wx.LB_MULTIPLE ) + self.rangs.SetMinSize( wx.Size( 150,-1 ) ) + + fgSizer1.Add( self.rangs, 0, wx.ALL|wx.EXPAND, 5 ) + + + bSizer1.Add( fgSizer1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + fgSizer3 = wx.FlexGridSizer( 0, 2, 0, 0 ) + fgSizer3.SetFlexibleDirection( wx.BOTH ) + fgSizer3.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) + + self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"Limite fréquence", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText3.Wrap( -1 ) + fgSizer3.Add( self.m_staticText3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + bSizer2 = wx.BoxSizer( wx.HORIZONTAL ) + + choix_freqChoices = [ u"automatique (moyenne)", u"manuelle" ] + self.choix_freq = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, choix_freqChoices, 0 ) + self.choix_freq.SetSelection( 0 ) + bSizer2.Add( self.choix_freq, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + self.freqlim = wx.TextCtrl( self, wx.ID_ANY, u"0", wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE ) + self.freqlim.Enable( False ) + self.freqlim.SetMinSize( wx.Size( 100,-1 ) ) + + bSizer2.Add( self.freqlim, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + + fgSizer3.Add( bSizer2, 1, wx.EXPAND, 5 ) + + self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, u"Limite rang", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText4.Wrap( -1 ) + fgSizer3.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + bSizer21 = wx.BoxSizer( wx.HORIZONTAL ) + + choix_rangChoices = [ u"automatique (moyenne)", u"manuelle" ] + self.choix_rang = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, choix_rangChoices, 0 ) + self.choix_rang.SetSelection( 0 ) + bSizer21.Add( self.choix_rang, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + self.ranglim = wx.TextCtrl( self, wx.ID_ANY, u"0", wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE ) + self.ranglim.Enable( False ) + self.ranglim.SetMinSize( wx.Size( 100,-1 ) ) + + bSizer21.Add( self.ranglim, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + + fgSizer3.Add( bSizer21, 1, wx.EXPAND, 5 ) + + self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"Fréquence minimum", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText5.Wrap( -1 ) + fgSizer3.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + self.m_textCtrl4 = wx.TextCtrl( self, wx.ID_ANY, u"2", wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE ) + fgSizer3.Add( self.m_textCtrl4, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) + + + bSizer1.Add( fgSizer3, 1, wx.EXPAND, 5 ) + + m_sdbSizer1 = wx.StdDialogButtonSizer() + self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK ) + m_sdbSizer1.AddButton( self.m_sdbSizer1OK ) + self.m_sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL ) + m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel ) + m_sdbSizer1.Realize(); + + bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 ) + + self.SetSizer( bSizer1 ) + self.Layout() + bSizer1.Fit( self ) + + self.Centre( wx.BOTH ) + + # Connect Events + self.choix_freq.Bind( wx.EVT_CHOICE, self.UpdateText ) + self.choix_rang.Bind( wx.EVT_CHOICE, self.UpdateText ) + + def __del__( self ): + pass + + + # Virtual event handlers, overide them in your derived class + def UpdateText( self, event ): + event.Skip() diff --git a/dictionnaires/expression_gr.txt b/dictionnaires/expression_gr.txt new file mode 100644 index 0000000..e69de29 diff --git a/dictionnaires/lexique_gr.txt b/dictionnaires/lexique_gr.txt new file mode 100644 index 0000000..e59ea82 --- /dev/null +++ b/dictionnaires/lexique_gr.txt @@ -0,0 +1,558 @@ +και και sw +του του sw +το το sw +της της sw +η η sw +την την sw +ο ο sw +από από sw +με με sw +να να sw +που που sw +των των sw +στην στην sw +για για sw +τον τον sw +σε σε sw +στο στο sw +τα τα sw +οι οι sw +τη τη sw +τους τους sw +στη στη sw +τις τις sw +α α sw +ως ως sw +στις στις sw +ή ή sw +ότι ότι sw +στον στον sw +στα στα sw +μια μια sw +π π sw +β β sw +σ σ sw +ενώ ενώ sw +χ χ sw +οποία οποία sw +αν αν sw +δ δ sw +γ γ sw +στους στους sw +ου ου sw +ε ε sw +μία μία sw +κ κ sw +μ μ sw +ένας ένας sw +πιο πιο sw +ν ν sw +σελ σελ sw +ς ς sw +πως πως sw +ενός ενός sw +μα μα sw +ος ος sw +αυτά αυτά sw +κή κή sw +κός κός sw +μου μου sw +σαν σαν sw +δε δε sw +υπό υπό sw +επί επί sw +κι κι sw +εν εν sw +ι ι sw +μη μη sw +μας μας sw +έως έως sw +αφού αφού sw +μιας μιας sw +τ τ sw +προ προ sw +κό κό sw +αυτές αυτές sw +τόσο τόσο sw +ας ας sw +όσο όσο sw +κάτι κάτι sw +ανά ανά sw +τι τι sw +μέσω μέσω sw +λα λα sw +εκ εκ sw +αυτός αυτός sw +είτε είτε sw +μην μην sw +παρά παρά sw +περί περί sw +εδώ εδώ sw +αχα αχα sw +κής κής sw +ήδη ήδη sw +ντε ντε sw +σου σου sw +απ απ sw +ούτε ούτε sw +φ φ sw +αυτού αυτού sw +αυτών αυτών sw +εκδ εκδ sw +όλη όλη sw +χλμ χλμ sw +άνω άνω sw +πάλι πάλι sw +ης ης sw +κού κού sw +εκατομ εκατομ sw +όλοι όλοι sw +σας σας sw +καὶ καὶ sw +λ λ sw +όλο όλο sw +θ θ sw +οποίου οποίου sw +γι γι sw +εις εις sw +αυτούς αυτούς sw +κλπ κλπ sw +εξ εξ sw +κατ κατ sw +αυτοί αυτοί sw +στ στ sw +τομ τομ sw +φκ φκ sw +αντί αντί sw +ό ό sw +αι αι sw +ρ ρ sw +ζ ζ sw +ά ά sw +κά κά sw +απο απο sw +υ υ sw +εάν εάν sw +κές κές sw +πώς πώς sw +ημ ημ sw +ιι ιι sw +κα κα sw +αλ αλ sw +δὲ δὲ sw +αγ αγ sw +βπ βπ sw +ελ ελ sw +δια δια sw +βλ βλ sw +κών κών sw +και και sw +του του sw +της της sw +το το sw +να να sw +την την sw +η η sw +με με sw +που που sw +των των sw +για για sw +ότι ότι sw +τους τους sw +τα τα sw +δεν δεν sw +είναι είναι sw +ο ο sw +από από sw +τη τη sw +οι οι sw +σε σε sw +τον τον sw +τις τις sw +στην στην sw +στο στο sw +απ απ sw +μας μας sw +κι κι sw +στη στη sw +θα θα sw +μια μια sw +αλλά αλλά sw +στα στα sw +αυτό αυτό sw +ένα ένα sw +όχι όχι sw +ή ή sw +μόνο μόνο sw +αυτή αυτή sw +σαν σαν sw +ήταν ήταν sw +στις στις sw +στον στον sw +όπως όπως sw +αν αν sw +όμως όμως sw +σήμερα σήμερα sw +ενώ ενώ sw +γιατί γιατί sw +έχει έχει sw +ν ν sw +λοιπόν λοιπόν sw +σ σ sw +καί καί sw +αφού αφού sw +ούτε ούτε sw +όσο όσο sw +χωρίς χωρίς sw +μετά μετά sw +τόσο τόσο sw +είχε είχε sw +μπορεί μπορεί sw +χώρα χώρα sw +στους στους sw +έτσι έτσι sw +είτε είτε sw +δύο δύο sw +ακόμη ακόμη sw +πιο πιο sw +έχουν έχουν sw +αυτά αυτά sw +όπου όπου sw +όταν όταν sw +πάνω πάνω sw +άλλη άλλη sw +πάρα πάρα sw +χρόνια χρόνια sw +όλα όλα sw +αυτοί αυτοί sw +επί επί sw +αυτές αυτές sw +ένας ένας sw +οποία οποία sw +μέχρι μέχρι sw +βέβαια βέβαια sw +κατά κατά sw +σημερινή σημερινή sw +μη μη sw +αυτός αυτός sw +εδώ εδώ sw +τότε τότε sw +δήθεν δήθεν sw +αυτήν αυτήν sw +πρέπει πρέπει sw +πού πού sw +μην μην sw +ίδια ίδια sw +υπάρχει υπάρχει sw +σας σας sw +δηλαδή δηλαδή sw +κανένα κανένα sw +γι γι sw +πολύ πολύ sw +μ μ sw +αυτής αυτής sw +όλες όλες sw +παρά παρά sw +όλοι όλοι sw +τι τι sw +κάθε κάθε sw +εμείς εμείς sw +πριν πριν sw +καμιά καμιά sw +όσα όσα sw +κ κ sw +δε δε sw +τίς τίς sw +προς προς sw +ποτέ ποτέ sw +παρ παρ sw +κυρίως κυρίως sw +αυτούς αυτούς sw +έχουμε έχουμε sw +μιας μιας sw +κανένας κανένας sw +κάνει κάνει sw +πίσω πίσω sw +πια πια sw +είχαν είχαν sw +αμέσως αμέσως sw +έναν έναν sw +έγινε έγινε sw +γίνεται γίνεται sw +άλλους άλλους sw +άλλο άλλο sw +τίποτε τίποτε sw +πρόκειται πρόκειται sw +ακριβώς ακριβώς sw +ίδιο ίδιο sw +χιλιάδες χιλιάδες sw +περίπου περίπου sw +μπροστά μπροστά sw +επειδή επειδή sw +βρίσκεται βρίσκεται sw +υπάρχουν υπάρχουν sw +τουλάχιστον τουλάχιστον sw +πούναι πούναι sw +οποιαδήποτε οποιαδήποτε sw +πάλι πάλι sw +ενός ενός sw +είχαμε είχαμε sw +ανάμεσα ανάμεσα sw +άλλες άλλες sw +πρώτη πρώτη sw +πρόσφατα πρόσφατα sw +κάνουν κάνουν sw +δεύτερο δεύτερο sw +δεκάδες δεκάδες sw +h h sw +πρώην πρώην sw +πάντα πάντα sw +μόνη μόνη sw +λόγω λόγω sw +αυτών αυτών sw +άλλωστε άλλωστε sw +άλλων άλλων sw +υπήρξε υπήρξε sw +ορισμένες ορισμένες sw +οποίο οποίο sw +δυο δυο sw +ας ας sw +όσοι όσοι sw +σχεδόν σχεδόν sw +μπορούν μπορούν sw +μέρες μέρες sw +μάλιστα μάλιστα sw +δ δ sw +έγιναν έγιναν sw +όλη όλη sw +κάτι κάτι sw +εν εν sw +άλλοι άλλοι sw +φαίνεται φαίνεται sw +τρεις τρεις sw +τρίτου τρίτου sw +πώς πώς sw +λένε λένε sw +κλπ κλπ sw +κάποιος κάποιος sw +κάποια κάποια sw +εκτός εκτός sw +δισεκατομμύρια δισεκατομμύρια sw +γίνει γίνει sw +απέναντι απέναντι sw +σημερινό σημερινό sw +πλέον πλέον sw +πέρα πέρα sw +κανείς κανείς sw +καν καν sw +αυτού αυτού sw +έστω έστω sw +όλους όλους sw +φορές φορές sw +φορά φορά sw +πρόσφατη πρόσφατη sw +περί περί sw +νάχει νάχει sw +νάναι νάναι sw +μεγάλο μεγάλο sw +μεγάλη μεγάλη sw +εξής εξής sw +αυτόν αυτόν sw +έκανε έκανε sw +τέτοιο τέτοιο sw +σημερινές σημερινές sw +π π sw +ορισμένα ορισμένα sw +οποίες οποίες sw +οποίας οποίας sw +καμία καμία sw +διάφορα διάφορα sw +τώρα τώρα sw +τέτοια τέτοια sw +τέτια τέτια sw +τ τ sw +πιστεύουμε πιστεύουμε sw +μία μία sw +θάχε θάχε sw +θ θ sw +βρίσκονται βρίσκονται sw +άλλα άλλα sw +όλων όλων sw +ψέμα ψέμα sw +σχετικά σχετικά sw +πούμε πούμε sw +ποιος ποιος sw +λέγαμε λέγαμε sw +κάποιο κάποιο sw +ιδιαίτερα ιδιαίτερα sw +εκατομμύρια εκατομμύρια sw +ε ε sw +δισεκατομμυρίων δισεκατομμυρίων sw +γ γ sw +αλλού αλλού sw +ίσως ίσως sw +ώστε ώστε sw +όσους όσους sw +όσον όσον sw +τρίτο τρίτο sw +ποιον ποιον sw +μόλις μόλις sw +μεγάλες μεγάλες sw +δεύτερη δεύτερη sw +έχοντας έχοντας sw +έκαναν έκαναν sw +ότου ότου sw +όντας όντας sw +ό ό sw +τρίτη τρίτη sw +συνεχείς συνεχείς sw +συνήθως συνήθως sw +συνέχεια συνέχεια sw +πρώτο πρώτο sw +πέντε πέντε sw +ορισμένοι ορισμένοι sw +μέχρις μέχρις sw +καθένας καθένας sw +καθένα καθένα sw +θέλει θέλει sw +θάταν θάταν sw +επίσης επίσης sw +εκατομμυρίων εκατομμυρίων sw +εισαγγελέα εισαγγελέα sw +β β sw +έμμεση έμμεση sw +άμεσης άμεσης sw +άλλος άλλος sw +eνώ eνώ sw +όλο όλο sw +χιλιάδων χιλιάδων sw +φ φ sw +τί τί sw +στ στ sw +πρώτος πρώτος sw +πρώτα πρώτα sw +πούχουν πούχουν sw +πούχει πούχει sw +ποιο ποιο sw +ποια ποια sw +οποίους οποίους sw +νάχουν νάχουν sw +μεγαλύτερα μεγαλύτερα sw +μεγάλων μεγάλων sw +μεγάλα μεγάλα sw +μήπως μήπως sw +μήνα μήνα sw +λ λ sw +κάπως κάπως sw +ελλ ελλ sw +εκ εκ sw +δεκαετίες δεκαετίες sw +δεκαετία δεκαετία sw +απόλυτα απόλυτα sw +α α sw +ίδιος ίδιος sw +έξω έξω sw +άρα άρα sw +τρία τρία sw +τησ τησ sw +πάσης πάσης sw +πάντες πάντες sw +οποίου οποίου sw +ολόκληρη ολόκληρη sw +μπορούσαν μπορούσαν sw +μεταξύ μεταξύ sw +μεγαλύτερη μεγαλύτερη sw +λέμε λέμε sw +χρειάζεται χρειάζεται sw +χ χ sw +υπό υπό sw +τριών τριών sw +τούτοις τούτοις sw +πρόσφατες πρόσφατες sw +πούχε πούχε sw +λίγο λίγο sw +εξ εξ sw +εκατοντάδων εκατοντάδων sw +εκατοντάδες εκατοντάδες sw +απλή απλή sw +ακόμα ακόμα sw +τισ τισ sw +τέτιο τέτιο sw +τέτιες τέτιες sw +πόσο πόσο sw +παντού παντού sw +ορισμένους ορισμένους sw +οποιοσδήποτε οποιοσδήποτε sw +λλοι λλοι sw +επιπλέον επιπλέον sw +δικό δικό sw +δικούς δικούς sw +δι δι sw +δεκάδων δεκάδων sw +ήδη ήδη sw +άλλου άλλου sw +tόσο tόσο sw +kι kι sw +aν aν sw +υ υ sw +τέτοιες τέτοιες sw +πράγματι πράγματι sw +ποιοι ποιοι sw +πιστεύει πιστεύει sw +παραπάνω παραπάνω sw +οποιασδήποτε οποιασδήποτε sw +μπορέσει μπορέσει sw +μικρό μικρό sw +μερικές μερικές sw +μεγαλύτερες μεγαλύτερες sw +λες λες sw +κάποιου κάποιου sw +κάνοντας κάνοντας sw +ιδίως ιδίως sw +θέλουν θέλουν sw +θάπρεπε θάπρεπε sw +εκεί εκεί sw +ίδιους ίδιους sw +έπρεπε έπρεπε sw +όποιον όποιον sw +όποιο όποιο sw +τρισεκατομμύριο τρισεκατομμύριο sw +τρίτος τρίτος sw +τουσ τουσ sw +στισ στισ sw +σου σου sw +ρα ρα sw +ρ ρ sw +πως πως sw +πολλές πολλές sw +παρότι παρότι sw +πέρσι πέρσι sw +οποίων οποίων sw +νάγινε νάγινε sw +μπορείτε μπορείτε sw +μισού μισού sw +μισή μισή sw +μεγάλης μεγάλης sw +μακριά μακριά sw +λλος λλος sw +λίγες λίγες sw +λίγα λίγα sw +κανέναν κανέναν sw +θάναι θάναι sw +εξίσου εξίσου sw +εντούτοις εντούτοις sw +δια δια sw +δηλ δηλ sw +γύρω γύρω sw +γίνονταν γίνονταν sw +αύριο αύριο sw +αργότερα αργότερα sw +ήξερε ήξερε sw +έχετε έχετε sw +tο tο sw +mε mε sw +eτσι eτσι sw +aπ aπ sw +5ης 5ης sw +50% 50% sw +μή μή sw diff --git a/images/splash.png b/images/splash.png index 5c56b0d27f97e9316897729a21a9d13d5e306c5e..cab4a7bcd85b9fd44c9c8088426b8d7a553e627b 100644 GIT binary patch delta 22160 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 delta 22223 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 KO64ysLjDJ(Z @@ -303,7 +303,7 @@ x="110.10663" y="146.45171" style="font-size:14px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;font-family:gargi;-inkscape-font-specification:gargi Medium" />Version 0.6 alpha 2 Version 0.6 alpha 4 = self.parametres['freqmin']] + with open(self.pathout['table.csv'], 'w') as f : + f.write('\n'.join(['\t'.join(['"' + val[0] +'"', `val[1]`, `val[2]`]) for val in res])) + self.parent.tableau.parametres = self.parent.tableau.parametre + self.parent.tableau.save_tableau(self.pathout['analyse.db']) + + def DoR(self) : + script = ProtoScript(self) + script.make_script() + self.doR(script.scriptout) diff --git a/textwordcloud.py b/textwordcloud.py index 908ba89..bc875bc 100644 --- a/textwordcloud.py +++ b/textwordcloud.py @@ -43,8 +43,8 @@ class WordCloud(AnalyseText): else : return 'NOK' - def make_option(self) : - dial = PrefWordCloud(self.ira) + def make_option(self, fromcluster = False) : + dial = PrefWordCloud(self.ira, fromcluster) dial.CenterOnParent() res = dial.ShowModal() if res == wx.ID_OK : @@ -61,6 +61,8 @@ class WordCloud(AnalyseText): self.parametres['col_bg'] = dial.color_bg.GetColour() self.parametres['mode'] = dial.typeformeschoice.GetSelection() self.parametres['svg'] = svg + if fromcluster : + self.parametres['indice'] = dial.indice.GetSelection() outgraph = os.path.join(os.path.dirname(self.pathout['zipf.png']), 'nuage_') nb = 1 if svg : @@ -84,11 +86,11 @@ class ClusterCloud(WordCloud) : self.parametres['type'] = 'clustercloud' #FIXME limit = 2 - res = self.make_option() + res = self.make_option(True) if res == wx.ID_OK : prof = self.parametres['clusterprof'] del self.parametres['clusterprof'] - if self.parametres.get('unit', 0) == 0 : + if self.parametres['indice'] == 0 : tokeep = 1 else : tokeep = 2 -- 2.7.4