lot of things :)
authorPierre <ratinaud@univ-tlse2.fr>
Thu, 21 Mar 2013 15:37:43 +0000 (16:37 +0100)
committerPierre <ratinaud@univ-tlse2.fr>
Thu, 21 Mar 2013 15:37:43 +0000 (16:37 +0100)
15 files changed:
PrintRScript.py
Rscripts/Rgraph.R
Rscripts/prototypical.R [new file with mode: 0644]
analysematrix.py
chemins.py
dialog.py
dictionnaires/expression_gr.txt [new file with mode: 0644]
dictionnaires/lexique_gr.txt [new file with mode: 0644]
images/splash.png
images/splash.svg
iracmd.py
iramuteq.py
openanalyse.py
tabverges.py
textwordcloud.py

index 589aabf..636fe9e 100644 (file)
@@ -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()
+
index 4d94e35..e947a40 100644 (file)
@@ -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 (file)
index 0000000..b5f58fd
--- /dev/null
@@ -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)
+}
index 2a3c88d..7b861a6 100644 (file)
@@ -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 :
index 847e5c7..6b124ef 100644 (file)
@@ -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@@@@@@@@@@@@@@@@')
index 314700d..4b79f88 100755 (executable)
--- 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 (file)
index 0000000..e69de29
diff --git a/dictionnaires/lexique_gr.txt b/dictionnaires/lexique_gr.txt
new file mode 100644 (file)
index 0000000..e59ea82
--- /dev/null
@@ -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
index 5c56b0d..cab4a7b 100644 (file)
Binary files a/images/splash.png and b/images/splash.png differ
index 4804629..f7759e2 100644 (file)
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="false"
-     inkscape:window-width="1155"
-     inkscape:window-height="998"
+     inkscape:window-width="1018"
+     inkscape:window-height="1030"
      inkscape:window-x="0"
-     inkscape:window-y="27"
+     inkscape:window-y="18"
      inkscape:window-maximized="0" />
   <metadata
      id="metadata7">
            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" /></flowRegion><flowPara
-         id="flowPara3866">Version 0.6 alpha 2</flowPara></flowRoot>    <flowRoot
+         id="flowPara3866">Version 0.6 alpha 4</flowPara></flowRoot>    <flowRoot
        xml:space="preserve"
        id="flowRoot3868"
        style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Bitstream Vera Sans;font-style:normal;font-weight:normal;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
index 81a3910..dd883f8 100644 (file)
--- a/iracmd.py
+++ b/iracmd.py
@@ -46,7 +46,8 @@ else:
 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
 
 class CmdLine :
-    def __init__(self, args = None) :
+    def __init__(self, args = None, AppliPath = None) :
+        AppliPath = AppliPath
         self.DictPath = ConstructDicoPath(AppliPath)
         self.ConfigPath = ConstructConfigPath(UserConfigPath)
         self.syscoding = sys.getdefaultencoding()
@@ -175,5 +176,5 @@ class CmdLine :
 
 if __name__ == '__main__':
     __name__ = 'Main'
-    CmdLine()
+    CmdLine(AppliPath = AppliPath)
 
index 1f7b17e..d1b6077 100644 (file)
@@ -49,9 +49,8 @@ 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 AnalysePam
 from textstat import Stat
@@ -64,7 +63,7 @@ from openanalyse import OpenAnalyse
 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 chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
 from tools import Extract
 
@@ -96,6 +95,7 @@ ID_RESULT = wx.NewId()
 ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
+ID_proto = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -164,7 +164,9 @@ class IraFrame(wx.Frame):
         self.AppliPath = AppliPath
         self.images_path = os.path.join(AppliPath,'images')
         self.UserConfigPath = UserConfigPath
-        self.RscriptsPath = ConstructRscriptsPath(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
@@ -244,6 +246,7 @@ class IraFrame(wx.Frame):
         analyse_menu.AppendMenu(-1, u"Classification", menu_classif)
         #analyse_menu.Append(ID_AFCM, u"AFCM")
         analyse_menu.Append(ID_SIMI, u"Analyse de similitudes")
+        analyse_menu.Append(ID_proto, _(u"Prototypical analysis"))
         ID_RCODE = wx.NewId()
         analyse_menu.Append(ID_RCODE, u"Code R...")
 
@@ -369,6 +372,7 @@ class IraFrame(wx.Frame):
         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.OnTextStat, id=ID_TEXTSTAT)
@@ -874,6 +878,9 @@ 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'
index 5de5aa2..77d08a7 100644 (file)
@@ -5,13 +5,13 @@
 #Lisense: GNU/GPL
 
 from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
-from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout
+from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
-import shelve
+#import shelve
 #from tabsimi import DoSimi
-from functions import BugReport, DoConf, progressbar
+from functions import DoConf
 from tableau import Tableau
 import logging
 
@@ -140,4 +140,6 @@ class OpenAnalyse():
         elif self.conf['type'] == 'simimatrix' :
             #self.parent.ShowMenu(_("Spreadsheet analysis"))
             SimiMatLayout(self.parent, corpus, self.conf)
+        elif self.conf['type'] == 'proto' :
+            ProtoLayout(self.parent, corpus, self.conf)
         
index b9e4ee3..12f4a61 100644 (file)
@@ -10,45 +10,85 @@ import wx
 import os
 import sys
 import tempfile
-from chemins import ffr,FFF
+from chemins import ffr,FFF, ConstructPathOut
 import wx.lib.sized_controls as sc
 from time import sleep
-from functions import exec_rcode, check_Rresult
-from dialog import ChiDialog
+from functions import exec_rcode, check_Rresult, progressbar
+from PrintRScript import ProtoScript
+from analysematrix import AnalyseMatrix
+from dialog import ProtoDial
 
-class Verges :
-    def __init__(self,parent):
+class Prototypical(AnalyseMatrix) :
+    def __init__(self, parent, parametres):
         self.parent = parent
         self.tableau = self.parent.tableau
-        chioption = { 'valobs' : True,
-                      'valtheo' : True,
-                      'resi' : False,
-                      'contrib' : True,
-                      'pourcent' : False,
-                      'pourcentl' : True,
-                      'pourcentc' : True,
-                      'graph' : True,
-                      }
-        self.dlg = ChiDialog(parent, -1, u"Chi2", chioption, size=(400, 350),
-                     style = wx.DEFAULT_DIALOG_STYLE
-                     )
-        self.dlg.CenterOnParent()
-        self.check_val()
+        self.parametres = parametres
+        self.parametres['filename'] = parent.tableau.parametre['filename']
+        self.parametres['pathout'] = ConstructPathOut(parent.tableau.parametre['filename'], 'proto')
+        self.parametres['type'] = 'proto'
+        dlg = progressbar(self.parent, 2)
+        self.colnames = self.tableau.get_colnames()
+        AnalyseMatrix.__init__(self, parent, parent.tableau, self.parametres, dlg = dlg)
+    
+    def doanalyse(self) :
+        res = self.check_val()
+        return res
 
     def check_val(self) :
-        self.val = self.dlg.ShowModal()
+        self.dial = ProtoDial(self.ira, self.colnames)
+        self.dial.CenterOnParent()
+
+        self.val = self.dial.ShowModal()
         if self.val==wx.ID_OK :
-                self.ColSel1 = self.dlg.list_box_1.GetSelections()
-                self.ColSel2 = self.dlg.list_box_2.GetSelections()
+                self.ColSel1 = self.dial.variables.GetSelections()
+                self.ColSel2 = self.dial.rangs.GetSelections()
+
                 if len(self.ColSel1) != len(self.ColSel2) :
                     print 'pas meme taille'
                     self.check_val()
                 else :
-                    self.dotable()
+                    if self.dial.choix_freq.GetSelection() == 0 :
+                        self.parametres['limfreq'] = 'NULL'
+                    else :
+                        self.parametres['limfreq'] = self.dial.freqlim.GetValue()
+                    if self.dial.choix_rang.GetSelection() == 0 :
+                        self.parametres['limrang'] = 'NULL'
+                    else :
+                        self.parametres['limrang'] = self.dial.ranglim.GetValue()
+                    self.parametres['freqmin'] = int(self.dial.m_textCtrl4.GetValue())
+                    table_assoc, table_rank = self.dotable()
+                    self.makedatas(table_assoc, table_rank)
+                    self.DoR()
+        else :
+             return 'stop'
 
     def dotable(self) :
         table_assoc = self.tableau.select_col(self.ColSel1)
         table_rank = self.tableau.select_col(self.ColSel2)
-        
+        return table_assoc, table_rank
+
+    def makedatas(self, table_assoc, table_rank) :
+        words = {}
+        for i in range(0, len(table_assoc)) :
+            for j, word in enumerate(table_assoc[i]) :
+                if word in words :
+                    words[word][0] += 1
+                    if table_rank[i][j] != '' :
+                        words[word][1].append(int(table_rank[i][j]))
+                else :
+                    if table_rank[i][j] != '' :
+                        words[word] = [1, [int(table_rank[i][j])]]
+                    else :
+                         words[word] = [1, []]
+        res = [[word, words[word][0], float(sum(words[word][1])) / len(words[word][1])] for word in words if len(words[word][1]) != 0 and words[word][0] >= 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) 
         
                 
index 908ba89..bc875bc 100644 (file)
@@ -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