new frutch + spirale
[iramuteq] / textsimi.py
index acb85a3..ea1d05a 100644 (file)
@@ -1,23 +1,18 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2013 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
 
 from chemins import ffr, simipath
-#from corpus import Corpus
 import os
 from analysetxt import AnalyseText
-#from ConfigParser import RawConfigParser
-#from guifunct import getPage, getCorpus
-from dialog import StatDialog
-from guifunct import SelectColumn, PrepSimi
-from functions import indices_simi, progressbar, treat_var_mod, read_list_file, print_liste
-#from tableau import Tableau
-#from tabsimi import DoSimi
-from PrintRScript import PrintSimiScript
+from guifunct import PrepSimi
+from functions import indices_simi, progressbar, treat_var_mod, read_list_file, print_liste, DoConf, exec_rcode, check_Rresult
+from PrintRScript import PrintSimiScript 
 import wx
 from copy import copy
-
+from operator import itemgetter
+import codecs
 import logging
 
 log = logging.getLogger('iramuteq.textsimi')
@@ -27,23 +22,33 @@ class SimiTxt(AnalyseText):
         self.parametres['type'] = 'simitxt'
         self.pathout.basefiles(simipath)
         self.indices = indices_simi
-        self.makesimiparam()
+        if self.dlg :
+            self.makesimiparam()
         #FIXME
         self.actives = self.corpus.make_actives_limit(3)
         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
         continu = False
         if self.dlg :
-            #cont = SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'], dlg = self.dlg)
-            #if cont.ok :
             self.listet = self.corpus.make_etoiles()
             self.listet.sort()
             self.stars = copy(self.listet)
             self.parametres['stars'] = copy(self.listet)
             self.parametres['sfromchi'] = False
+            self.dlg.Destroy()
             prep = PrepSimi(self.ira, self, self.parametres, self.pathout['selected.csv'], self.actives, indices_simi, wordlist=dictcol)
             if prep.val == wx.ID_OK :
                 continu = True
                 self.parametres = prep.parametres
+                self.dlg = progressbar(self.ira, 4)
+            else :
+                return False
+        else :
+            order_actives = [[i, act, self.corpus.getlemeff(act)] for i, act in enumerate(self.actives)]
+            order_actives = sorted(order_actives, key=itemgetter(2), reverse = True)
+            with open(self.pathout['selected.csv'], 'w') as f :
+                f.write('\n'.join([`order_actives[val][0]` for val in self.parametres['selected']]))
+            continu = True
+            
         if continu :
             self.makefiles()
             script = PrintSimiScript(self)
@@ -52,31 +57,20 @@ class SimiTxt(AnalyseText):
                 log.info('Problem')
                 return False
             if self.parametres['type_graph'] == 1:
+                if self.parametres['svg'] :
+                    filename, ext = os.path.splitext(script.filename)
+                    fileout = filename + '.svg'                    
+                else :
+                    fileout = script.filename
                 if os.path.exists(self.pathout['liste_graph']):
                     graph_simi = read_list_file(self.pathout['liste_graph'])
-                    graph_simi.append([os.path.basename(script.filename), script.txtgraph])
+                    graph_simi.append([os.path.basename(fileout), script.txtgraph])
                 else :
-                    graph_simi = [[os.path.basename(script.filename), script.txtgraph]]
+                    graph_simi = [[os.path.basename(fileout), script.txtgraph]]
                 print_liste(self.pathout['liste_graph'], graph_simi)
         else : 
             return False
 
-#    def preferences(self) :
-#        dial = StatDialog(self, self.parent)
-#        dial.CenterOnParent()
-#        val = dial.ShowModal()
-#        if val == 5100 :
-#            if dial.radio_lem.GetSelection() == 0 :
-#                lem = 1
-#            else :
-#                lem = 0            
-#            self.parametres['lem'] = lem
-#            dial.Destroy()
-#            return self.parametres
-#        else :
-#            dial.Destroy()
-#            return None
-
     def makesimiparam(self) :
         self.paramsimi = {'coeff' : 0,
                           'layout' : 2,
@@ -105,7 +99,7 @@ class SimiTxt(AnalyseText):
                           'height' : 1000,
                           'bystar' : False,
                           'first' : True,
-                          'keep_coord' : True,
+                          'keep_coord' : False,
                           'alpha' : 20,
                           'film': False,
                           'svg' : 0,
@@ -126,11 +120,14 @@ class SimiTxt(AnalyseText):
             f.write('\n'.join(self.actives).encode(self.ira.syscoding))
 
 class SimiFromCluster(SimiTxt) :
-    def __init__(self, ira, corpus, actives, numcluster, parametres = None, dlg = False) :
+    def __init__(self, ira, corpus, actives, lfreq, lchi, numcluster, parametres = None, dlg = False) :
         self.actives = actives
         self.numcluster = numcluster
+        self.lfreq = lfreq
+        self.lchi = lchi
         parametres['name'] = 'simi_classe_%i' % (numcluster + 1)
-        SimiTxt.__init__(self, ira, corpus, parametres, dlg, lemdial = False)
+        dlg.Destroy()
+        SimiTxt.__init__(self, ira, corpus, parametres, dlg=True, lemdial = False)
     
     def preferences(self) :
         return self.parametres
@@ -139,17 +136,18 @@ class SimiFromCluster(SimiTxt) :
         self.parametres['type'] = 'clustersimitxt'
         self.pathout.basefiles(simipath)
         self.indices = indices_simi
-        self.makesimiparam()
+        if self.dlg  :
+            self.makesimiparam()
         if 'bystar' in self.parametres :
             del self.parametres['bystar']
         dictcol = dict([[i, [act, self.corpus.getlemclustereff(act, self.numcluster)]] for i, act in enumerate(self.actives)]) 
         continu = True
+        #print self.dlg
         if self.dlg :
-            #self.listet = self.corpus.make_etoiles()
-            #self.listet.sort()
+            self.dlg.Destroy()
             self.stars = []#copy(self.listet)
-            self.parametres['stars'] = False#copy(self.listet)
-            self.parametres['sfromchi'] = True
+            self.parametres['stars'] = 0#copy(self.listet)
+            self.parametres['sfromchi'] = 1
             prep = PrepSimi(self.ira, self, self.parametres, self.pathout['selected.csv'], self.actives, indices_simi, wordlist=dictcol)
             if prep.val == wx.ID_OK :
                 continu = True
@@ -157,7 +155,9 @@ class SimiFromCluster(SimiTxt) :
             else :
                 continu = False
         if continu :
+            self.dlg = progressbar(self.parent, 3)
             self.makefiles()
+            self.parametres['type'] = 'clustersimitxt'
             script = PrintSimiScript(self)
             script.make_script()
             if not self.doR(script.scriptout, dlg = self.dlg, message = 'R ...') :
@@ -167,7 +167,7 @@ class SimiFromCluster(SimiTxt) :
                     filename, ext = os.path.splitext(script.filename)
                     fileout = filename + '.svg'                    
                 else :
-                    fileout = self.script.filename
+                    fileout = script.filename
                 if os.path.exists(self.pathout['liste_graph']):
                     graph_simi = read_list_file(self.pathout['liste_graph'])
                     graph_simi.append([os.path.basename(fileout), script.txtgraph])
@@ -184,3 +184,11 @@ class SimiFromCluster(SimiTxt) :
         self.corpus.make_and_write_sparse_matrix_from_classe(self.actives, self.corpus.lc[self.numcluster], self.pathout['mat01.csv'])
         with open(self.pathout['actives.csv'], 'w') as f :
             f.write('\n'.join(self.actives).encode(self.ira.syscoding))        
+        with open(self.pathout['actives_nb.csv'], 'w') as f :
+            f.write('\n'.join([`val` for val in self.lfreq]))
+        with open(self.pathout['actives_chi.csv'], 'w') as f :
+            f.write('\n'.join([`val` for val in self.lchi]))
+
+
+
+                
\ No newline at end of file