b220d9e44abdceb882c75337d5b1852c050ad9d2
[iramuteq] / textwordcloud.py
1 #!/bin/env python
2 # -*- coding: utf-8 -*-
3 #Author: Pierre Ratinaud
4 #Copyright (c) 2008-2009 Pierre Ratinaud
5 #Lisense: GNU/GPL
6
7 from analysetxt import AnalyseText
8 from guifunct import getPage, getCorpus, SelectColumn
9 from ConfigParser import RawConfigParser
10 from functions import sortedby, progressbar, CreateIraFile, exec_rcode, check_Rresult, MessageImage
11 from dialog import StatDialog, PrefWordCloud
12 from PrintRScript import WordCloudRScript
13 #from ttparser import * 
14 import tempfile
15 from time import sleep
16 import wx
17 import os
18 import logging
19
20 logger = logging.getLogger('iramuteq.textwordcloud')
21
22
23 class WordCloud(AnalyseText):
24     def doanalyse(self) :
25         self.parametres['type'] = 'wordcloud'
26         #FIXME
27         limit = 3
28         self.make_option()
29         if self.parametres['mode'] == 2 :
30             self.actives = self.corpus.make_actives_limit(limit, 1)
31             self.actives += self.corpus.make_actives_limit(limit, 2)
32         elif self.parametres['mode'] == 0 :
33             self.actives = self.corpus.make_actives_limit(limit, 1)
34         elif self.parametres['mode'] == 1 :
35             self.actives = self.corpus.make_actives_limit(limit, 2)
36         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
37         SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'], dlg = True)
38         self.make_wordcloud()
39         script = WordCloudRScript(self)
40         script.make_script()
41         self.doR(script.scriptout, dlg = self.dlg, message = 'R...')
42     
43     def make_option(self) :
44         dial = PrefWordCloud(self.ira)
45         dial.CenterOnParent()
46         res = dial.ShowModal()
47         if res == wx.ID_OK :
48             self.parametres['width'] = dial.spin_L.GetValue()
49             self.parametres['height'] = dial.spin_H.GetValue()
50             self.parametres['maxword'] = dial.spin_maxword.GetValue()
51             self.parametres['mincex'] = float(dial.spin_mincex.GetValue())/float(10)
52             self.parametres['maxcex'] = float(dial.spin_maxcex.GetValue())/float(10)
53             self.parametres['col_text'] = dial.color_text.GetColour()
54             self.parametres['col_bg'] = dial.color_bg.GetColour()
55             self.parametres['mode'] = dial.typeformeschoice.GetSelection()
56             outgraph = os.path.join(os.path.dirname(self.pathout['zipf.png']), 'nuage_')
57             nb = 1
58             while os.path.exists(outgraph + str(nb) + '.png') :
59                 nb += 1
60             self.parametres['graphout'] = outgraph + str(nb) + '.png'
61         dial.Destroy()
62
63
64     def make_wordcloud(self) :
65         act = ['\t'.join([act, `self.corpus.getlemeff(act)`]) for act in self.actives]
66         with open(self.pathout['actives_eff.csv'], 'w') as f :
67             f.write('\n'.join(act).encode(self.ira.syscoding))