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()
         """ % (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)
 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)
        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) {
     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]])]
         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 = '') :
         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 :
         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('\\', '/')
 
 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@@@@@@@@@@@@@@@@')
 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
 
   
         # 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: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-x="0"
-     inkscape:window-y="27"
+     inkscape:window-y="18"
      inkscape:window-maximized="0" />
   <metadata
      id="metadata7">
      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
            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
        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 :
 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()
         self.DictPath = ConstructDicoPath(AppliPath)
         self.ConfigPath = ConstructConfigPath(UserConfigPath)
         self.syscoding = sys.getdefaultencoding()
@@ -175,5 +176,5 @@ class CmdLine :
 
 if __name__ == '__main__':
     __name__ = 'Main'
 
 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 tabchdalc import AnalyseQuest
 from tabsimi import DoSimi
 from tabrsimple import InputText
-from tabverges import Verges
+from tabverges import Prototypical
 #from textafcuci import AfcUci
 #from textafcuci import AfcUci
-#from textchdalc import AnalyseAlceste
 from analysetxt import Alceste
 from textdist import AnalysePam
 from textstat import Stat
 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 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
 
 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_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
+ID_proto = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
 ##########################################################
 #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.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
         #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.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...")
 
         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.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)
         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)
                 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'
 
     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
 #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
 from corpus import Corpus, copycorpus
 from tableau import Tableau
 import os
-import shelve
+#import shelve
 #from tabsimi import DoSimi
 #from tabsimi import DoSimi
-from functions import BugReport, DoConf, progressbar
+from functions import DoConf
 from tableau import Tableau
 import logging
 
 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'] == '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
 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
 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
         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) :
 
     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 :
         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 :
                 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)
 
     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'
     
         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 :
         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
             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 :
             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
         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 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
                 tokeep = 1
             else : 
                 tokeep = 2