# -*- coding: utf-8 -*-
#----------------------------------------------------------------------------
# Name: ListCtrl.py
# Author: Pierre Ratinaud
#
#comes from ListCtrl.py from the demo tool of wxPython:
# Author: Robin Dunn & Gary Dumer
#
# Created:
# Copyright: (c) 1998 by Total Control Software
# Licence: wxWindows license
#----------------------------------------------------------------------------
import os
import sys
import wx
import wx.lib.mixins.listctrl as listmix
from tabsimi import DoSimi
from listlex import ListForSpec
from chemins import ConstructPathOut, ffr
from dialog import PrefExport, PrefUCECarac, SearchDial
from tableau import Tableau
from search_tools import SearchFrame
import webbrowser
import cStringIO
import tempfile
import codecs
from functions import exec_rcode, MessageImage, progressbar, treat_var_mod
from PrintRScript import barplot
from textclassechd import ClasseCHD
from shutil import copyfile
#---------------------------------------------------------------------------
class ProfListctrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
def __init__(self, parent, ID, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
listmix.ListCtrlAutoWidthMixin.__init__(self)
class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
def __init__(self, parent, gparent, ProfClasse, Alceste=False, cl=0):
self.parent = parent
classe = ProfClasse
self.cl = cl
self.Source = gparent
if 'tableau' in dir(self.Source):
self.tableau = self.Source.tableau
self.Alceste = Alceste
self.var_mod = {}
wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
search_id = wx.NewId()
searchall_id = wx.NewId()
self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
(wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
self.SetAcceleratorTable(self.accel_tbl)
self.il = wx.ImageList(16, 16)
# self.idx1 = self.il.Add(images.getSmilesBitmap())
self.sm_up = self.il.Add(getSmallUpArrowBitmap())
self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
tID = wx.NewId()
self.list = ProfListctrl(self, tID,
style=wx.LC_REPORT
| wx.BORDER_NONE
| wx.LC_EDIT_LABELS
| wx.LC_SORT_ASCENDING
)
line1 = classe[0]
limit = 0
limitsup = 0
i = 0
dictdata = {}
limit = [i for i,b in enumerate(classe[1:]) if b[0] == '*']
if limit != [] :
limit = limit[0] - 1
limitsup = [i for i,b in enumerate(classe[1:]) if b[0] == '*****']
if limitsup == [] :
limitsup = 0
else :
limitsup = limitsup[0]
classen = [line for line in classe[1:] if line[0] != '*' and line[0] != '*****']
if limit == [] :
limit = len(classen) - 1
dictdata = dict(zip([i for i in range(0,len(classen))], classen))
#if not self.Alceste :
# limit = limit + 1
self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
self.PopulateList(dictdata, limit, limitsup, Alceste)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
# for wxMSW
self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
# for wxGTK
self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
self.itemDataMap = dictdata
listmix.ColumnSorterMixin.__init__(self, 8)
self.do_greyline()
#-----------------------------------------------------------------------------------------
def PopulateList(self, dictdata, limit, limitsup, Alceste):
# for normal, simple columns, you can add them like this:
self.list.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
self.list.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
for key in dictdata : #.iteritems():
index = self.list.InsertStringItem(sys.maxint, '%4i' % key)
i = 1
for val in dictdata[key][1:]:
self.list.SetStringItem(index, i, str(dictdata[key][i]))
i += 1
self.list.SetItemData(index, key)
self.list.SetColumnWidth(0, 60)
self.list.SetColumnWidth(1, 70)
self.list.SetColumnWidth(2, 80)
self.list.SetColumnWidth(3, 100)
self.list.SetColumnWidth(4, 70)
self.list.SetColumnWidth(5, wx.LIST_AUTOSIZE)
self.list.SetColumnWidth(6, wx.LIST_AUTOSIZE)
self.list.SetColumnWidth(7, wx.LIST_AUTOSIZE)
# show how to change the colour of a couple items
if limitsup != 0 :
for i in range(limitsup, limit):
item = self.list.GetItem(i)
item.SetTextColour(wx.RED)
self.list.SetItem(item)
else :
limit=limit+1
for i in range(limit, len(dictdata)):
item = self.list.GetItem(i)
item.SetTextColour(wx.BLUE)
self.list.SetItem(item)
if limitsup != 0 :
self.la = [self.getColumnText(i,6) for i in range(0, limitsup-1)]
self.lchi = [float(self.getColumnText(i,4)) for i in range(0, limitsup-1)]
self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, limitsup-1)]
else :
self.la = [self.getColumnText(i,6) for i in range(0, limit)]
self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, limit)]
self.lchi = [float(self.getColumnText(i,4)) for i in range(0, limit)]
def do_greyline(self):
for row in xrange(self.list.GetItemCount()):
if row % 2 :
self.list.SetItemBackgroundColour(row, (230, 230, 230))
else :
self.list.SetItemBackgroundColour(row, wx.WHITE)
# Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
def GetListCtrl(self):
return self.list
# Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
def GetSortImages(self):
return (self.sm_dn, self.sm_up)
def OnRightDown(self, event):
x = event.GetX()
y = event.GetY()
item, flags = self.list.HitTest((x, y))
if flags & wx.LIST_HITTEST_ONITEM:
self.list.Select(item)
event.Skip()
def getColumnText(self, index, col):
item = self.list.GetItem(index, col)
return item.GetText()
def OnItemSelected(self, event):
self.currentItem = event.m_itemIndex
event.Skip()
def onsearch(self, evt) :
self.dial = SearchDial(self, self, 6, True)
self.dial.CenterOnParent()
self.dial.ShowModal()
self.dial.Destroy()
def onsearchall(self, evt) :
if 'FrameSearch' not in dir(self.Source) :
self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
self.dial.CenterOnParent()
self.dial.ShowModal()
self.dial.Destroy()
def OnRightClick(self, event):
# only do this part the first time so the events are only bound once
if self.Alceste:
if not hasattr(self, "popupID1"):
self.popupID1 = wx.NewId()
self.popupID2 = wx.NewId()
self.popupID3 = wx.NewId()
self.popupID4 = wx.NewId()
self.popupID5 = wx.NewId()
self.popupID6 = wx.NewId()
self.popupID7 = wx.NewId()
self.popupID8 = wx.NewId()
self.popupID9 = wx.NewId()
#self.popupID10 = wx.NewId()
self.popupIDgraph = wx.NewId()
self.idseg = wx.NewId()
self.iducecarac = wx.NewId()
self.idtablex = wx.NewId()
self.idchimod = wx.NewId()
self.idwordgraph = wx.NewId()
self.popup_proxe = wx.NewId()
self.idlexdendro = wx.NewId()
self.idexport = wx.NewId()
# self.export_classes = wx.NewId()
self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
#self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
# self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
# self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
# make a menu
menu = wx.Menu()
menu.Append(self.popupID1, u"Formes associées")
menu.Append(self.idtablex, u"Chi2 par classe")
menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
menu.Append(self.idchimod, u"Chi2 modalités de la variable")
menu.Append(self.idwordgraph, u"Graphe du mot")
#menu.Append(self.export_classes, u"Exporter le corpus...")
#menu.Append(self.popupID10, u"Spécificités")
menu_conc = wx.Menu()
menu_conc.Append(self.popupID2, u"dans les uce de la classe")
menu_conc.Append(self.popupID3, u"dans les uce classées")
menu_conc.Append(self.popupID4, u"dans toutes les uce")
menu.AppendMenu(-1, u"Concordancier", menu_conc)
menu_cnrtl = wx.Menu()
menu_cnrtl.Append(self.popupID5, u"Définition")
menu_cnrtl.Append(self.popupID6, u"Etymologie")
menu_cnrtl.Append(self.popupID7, u"Synonymie")
menu_cnrtl.Append(self.popupID8, u"Antonymie")
menu_cnrtl.Append(self.popupID9, u"Morphologie")
menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
menu.AppendSeparator()
menu.Append(self.popupIDgraph, u"Graphe de la classe")
menu.Append(self.idseg, u"Segments répétés")
menu.Append(self.iducecarac, u"UCE caractéristiques")
menu.Append(self.idexport, 'Partitionner...')
#menu.Append(self.popupID2, u"Concordancier")
# menu.Append(self.popupID3, "recharger")
self.PopupMenu(menu)
menu.Destroy()
elif 'tableau' in dir(self.Source) :
if not hasattr(self, "pop1"):
self.pop1 = wx.NewId()
self.pop2 = wx.NewId()
self.pop3 = wx.NewId()
self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
menu = wx.Menu()
menu.Append(self.pop2, u"Chi2 par classe")
menu.Append(self.pop3, u"Chi2 modalités de la variable")
menu.AppendSeparator()
menu.Append(self.pop1, u"Graph de la classe")
self.PopupMenu(menu)
menu.Destroy()
def onexport(self, evt) :
if 'corpus' in dir(self.Source):
corpus = self.Source.corpus
ClasseCHD(self.parent, corpus, self.cl)
def quest_var_mod(self, evt) :
if 'corpus' in dir(self.Source):
corpus = self.Source.corpus
if self.var_mod == {} :
self.var_mod = treat_var_mod([val for val in corpus.make_etoiles()])
else :
corpus = self.Source.tableau
if self.var_mod == {} :
self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
title = chistable[0]
title.pop(0)
chistable.pop(0)
vchistable = [line[1:] for line in chistable]
fchistable = [line[0] for line in chistable]
word = self.getColumnText(self.list.GetFirstSelected(), 6)
if len(word.split('_')) > 1 :
var = word.split('_')[0]
words = [word for word in self.var_mod[var]]
words.sort()
tableout = []
kwords = []
for word in words :
if word in fchistable :
tableout.append(vchistable[fchistable.index(word)])
kwords.append(word)
tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
file = open(tmpscript,'w')
file.write(txt)
file.close()
exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
win.addsaveimage(tmpgraph)
txt = "" % tmpgraph
win.HtmlPage.SetPage(txt)
win.Show(True)
else :
dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
dial.CenterOnParent()
dial.ShowModal()
dial.Destroy()
def quest_simi(self, evt) :
tableau = self.Source.tableau
tab = tableau.make_table_from_classe(self.cl, self.la)
pathout = ConstructPathOut(self.Source.pathout+'/', 'simi_classe_%i' %self.cl)
self.filename = os.path.join(pathout,'mat01.csv')
tableau.printtable(self.filename, tab)
del tab
paramsimi = {'coeff' : 0,
'layout' : 2,
'type' : 1,
'arbremax' : 1,
'coeff_tv' : 1,
'coeff_tv_nb' : 0,
'tvprop' : 0,
'tvmin' : 5,
'tvmax' : 30,
'coeff_te' : 1,
'coeff_temin' : 1,
'coeff_temax' : 10,
'label_v': 1,
'label_e': 1,
'vcex' : 0,
'vcexmin' : 10,
'vcexmax' : 25,
'cex' : 10,
'cexfromchi' : True,
'sfromchi': False,
'seuil_ok' : 0,
'seuil' : 1,
'cols' : (255,0,0),
'cola' : (200,200,200),
'width' : 1000,
'height' : 1000,
'first' : True,
'keep_coord' : True,
'alpha' : 20,
'film': False,
}
# self.tableau.actives = {}
# self.tableau.lchi = self.lchi
# self.tableau.chi = {}
# for i, val in enumerate(self.la) :
# self.tableau.actives[val] = [self.lfreq[i]]
# self.tableau.chi[val] = [self.lchi[i]]
act = {}
self.tableau.chi = {}
self.tableau.lchi = self.lchi
self.tableau.parametre['fromprof'] = True
for i, val in enumerate(self.la) :
act[val] = [self.lfreq[i]]
self.tableau.chi[val] = [self.lchi[i]]
DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
def onwordgraph(self, evt):
word = self.getColumnText(self.list.GetFirstSelected(), 6)
dlg = progressbar(self, 2)
corpus = self.Source.corpus
uces = corpus.lc[self.cl-1]
dlg.Update(1, u'Tableau...')
#tab = corpus.make_table_with_classe(uces, self.la)
pathout = ConstructPathOut(self.Source.pathout.dirout + '/' , 'simi_%s' % word)
self.filename = os.path.join(pathout,'mat01.csv')
dlg.Update(2, u'Ecriture...')
#corpus.write_tab(tab, self.filename)
#del tab
corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
dlg.Destroy()
paramsimi = {'coeff' : 0,
'layout' : 2,
'type' : 1,
'arbremax' : 0,
'coeff_tv' : 1,
'coeff_tv_nb' : 0,
'tvprop' : 0,
'tvmin' : 5,
'tvmax' : 30,
'coeff_te' : 1,
'coeff_temin' : 1,
'coeff_temax' : 10,
'label_v': 1,
'label_e': 0,
'vcex' : 1,
'vcexmin' : 10,
'vcexmax' : 25,
'cex' : 10,
'seuil_ok' : 1,
'seuil' : 1,
'cols' : (255,0,0),
'cola' : (200,200,200),
'width' : 600,
'height' : 600,
'first' : True,
'keep_coord' : True,
'alpha' : 20,
'film': False,
}
self.tableau = Tableau(self.parent, '')
self.tableau.listactives = self.la
self.tableau.actives = {}
for i, val in enumerate(self.la) :
self.tableau.actives[val] = [self.lfreq[i]]
DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
def OnPopupOne(self, event):
corpus = self.Source.corpus
#print 'ATTENTION PRINT ET TABLE'
#corpus.make_et_table()
word = self.getColumnText(self.list.GetFirstSelected(), 6)
lems = corpus.getlems()
uces = corpus.lc[self.cl-1]
rep = []
#FIXME : donner aussi eff reel a la place de nb uce
for forme in lems[word].formes :
ucef = list(set(corpus.getworduces(forme)).intersection(uces))
#ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
if ucef != [] :
nb = len(ucef)
rep.append([corpus.getforme(forme).forme, nb])
win = message(self, -1, u"Formes associées", size=(300, 200), style=wx.DEFAULT_FRAME_STYLE)
win.html = '\n' + '
'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n'
win.HtmlPage.SetPage(win.html)
win.Show(True)
def on_graph(self, evt):
dlg = progressbar(self, 2)
corpus = self.Source.corpus
uces = corpus.lc[self.cl-1]
dlg.Update(1, u'Tableau...')
#tab = corpus.make_table_with_classe(uces, self.la)
pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
self.filename = os.path.join(pathout,'mat01.csv')
dlg.Update(2, u'Ecriture...')
#corpus.write_tab(tab, self.filename)
#del tab
corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
dlg.Destroy()
paramsimi = {'coeff' : 0,
'layout' : 2,
'type' : 1,
'arbremax' : 1,
'coeff_tv' : 1,
'coeff_tv_nb' : 0,
'tvprop' : 0,
'tvmin' : 5,
'tvmax' : 30,
'coeff_te' : 1,
'coeff_temin' : 1,
'coeff_temax' : 10,
'label_v': 1,
'label_e': 0,
'vcex' : 0,
'vcexmin' : 10,
'vcexmax' : 25,
'cex' : 10,
'cexfromchi' : True,
'sfromchi': False,
'seuil_ok' : 0,
'seuil' : 1,
'cols' : (255,0,0),
'cola' : (200,200,200),
'width' : 1000,
'height' : 1000,
'first' : True,
'keep_coord' : True,
'alpha' : 20,
'film': False,
}
self.tableau = Tableau(self.parent, '')
self.tableau.listactives = self.la
self.tableau.actives = {}
self.tableau.lchi = self.lchi
self.tableau.chi = {}
self.tableau.parametre['fromprof'] = True
for i, val in enumerate(self.la) :
self.tableau.actives[val] = [self.lfreq[i]]
self.tableau.chi[val] = [self.lchi[i]]
DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
def on_segments(self,evt) :
dlg = progressbar(self, 2)
corpus = self.Source.corpus
uces = corpus.lc[self.cl-1]
l = []
dlg.Update(1, u'Segments...')
for i in range(2,10) :
li = corpus.find_segments_in_classe(uces, i, 1000)
if li == [] :
break
else :
l += li
l.sort(reverse = True)
d = {}
dlg.Update(2, 'Tri...')
for i, line in enumerate(l) :
d[i] = [line[1],line[0], line[2]]
first = ['','','']
para={'dico': d,'fline':first}
dlg.Destroy()
win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
win.Show(True)
def on_uce_carac(self,evt) :
dial = PrefUCECarac(self, self.parent)
dial.CenterOnParent()
if dial.ShowModal() == wx.ID_OK :
limite = dial.spin_eff.GetValue()
atype = dial.radio_type.GetSelection()
dlg = progressbar(self,maxi = 4)
corpus = self.Source.corpus
uces = corpus.lc[self.cl-1]
tab = corpus.make_table_with_classe(uces, self.la)
tab.pop(0)
dlg.Update(2, u'score...')
if atype == 0 :
ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
else :
ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
del ntab
ntab2.sort(reverse = True)
ntab2 = ntab2[:limite]
nuces = [val[1] for val in ntab2]
dlg.Update(3, u'concordancier...')
#ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
ucestxt1 = [row for row in corpus.getconcorde(nuces)]
ucestxt = []
ucis_txt = []
for uce in ucestxt1 :
ucetxt = ' '+uce[1]+' '
ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '
')
for lem in self.la :
listmot = corpus.getlems()[lem].formes
for id in listmot :
forme = corpus.getforme(id).forme
ucetxt = ucetxt.replace(' '+forme+' ', ' ' + forme + ' ')
ucestxt.append(ucetxt)
#ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
dlg.Update(4, u'texte...')
#ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
win = message(self, -1, u"UCE caractéristiques - Classe %i" % self.cl, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
win.html = '\n' + '
'.join(['
'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n'
win.HtmlPage.SetPage(win.html)
dlg.Destroy()
win.Show(True)
def on_tablex(self, evt):
if 'corpus' in dir(self.Source):
corpus = self.Source.corpus
else :
corpus = self.Source.tableau
with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
title = chistable[0]
title.pop(0)
chistable.pop(0)
vchistable = [line[1:] for line in chistable]
fchistable = [line[0] for line in chistable]
words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
tableout = [vchistable[fchistable.index(words[0])]]
last = self.list.GetFirstSelected()
while self.list.GetNextSelected(last) != -1:
last = self.list.GetNextSelected(last)
word = self.getColumnText(last, 6)
words.append(word)
tableout.append(vchistable[fchistable.index(word)])
tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
nbcl = len(title)
txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
file = open(tmpscript,'w')
file.write(txt)
file.close()
exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
win.addsaveimage(tmpgraph)
txt = "" % tmpgraph
win.HtmlPage.SetPage(txt)
win.Show(True)
def onlexdendro(self, evt):
if 'corpus' in dir(self.Source):
corpus = self.Source.corpus
else :
corpus = self.Source.tableau
with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
title = chistable[0]
title.pop(0)
chistable.pop(0)
vchistable = [line[1:] for line in chistable]
fchistable = [line[0] for line in chistable]
words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
tableout = [vchistable[fchistable.index(words[0])]]
last = self.list.GetFirstSelected()
while self.list.GetNextSelected(last) != -1:
last = self.list.GetNextSelected(last)
word = self.getColumnText(last, 6)
words.append(word)
tableout.append(vchistable[fchistable.index(word)])
tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
rownames = 'c("' + '","'.join(words) + '")'
colnames = 'c("' + '","'.join(title) + '")'
nbcl = len(title)
rownb = len(words)
txt = """
load("%s")
di <- matrix(data=%s, nrow=%i, byrow = TRUE)
rownames(di)<- %s
colnames(di) <- %s
library(ape)
source("%s")
height <- (30*ncol(di)) + (15*nrow(di))
height <- ifelse(height <= 400, 400, height)
width <- 500
open_file_graph("%s", width=width, height=height)
plot.dendro.lex(tree.cut1$tree.cl, di)
""" % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
file = open(tmpscript,'w')
file.write(txt)
file.close()
exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
win.addsaveimage(tmpgraph)
txt = "" % tmpgraph
win.HtmlPage.SetPage(txt)
win.Show(True)
def make_concord(self, uces, title, color = 'red') :
corpus = self.Source.corpus
ListWord = [self.getColumnText(self.list.GetFirstSelected(), 6)]
last = self.list.GetFirstSelected()
while self.list.GetNextSelected(last) != -1:
last = self.list.GetNextSelected(last)
ListWord.append(self.getColumnText(last, 6))
listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
toshow = ['\n