# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2012, Pierre Ratinaud
#License: GNU GPL
import wx
import os
import webbrowser
import wx.lib.agw.customtreectrl as CT
import logging
from openanalyse import OpenAnalyse
from corpus import Corpus, copycorpus
from tableau import Tableau, copymatrix
from functions import DoConf, GetTxtProfile, TGen, BugReport, open_folder, translateprofile, ReadProfileAsDico, write_translation_profile, progressbar, doconcorde
from profile_segment import ProfileSegment, ProfilType
from search_tools import SearchFrame
from dialog import PrefSimpleFile, PrefExport, SearchCorpus, translate_dialog, PrefUCECarac
from layout import open_antiprofil, TgenLayout
from guifunct import TGenFrame
from textaslexico import TgenSpec
from textreinert import TgenProf
from mergeclustergraph import MergeClusterGraph
log = logging.getLogger('iramuteq.tree')
def buildmenu(menu, parent_menu):
for i in range(parent_menu.GetMenuItemCount()) :
item = parent_menu.FindItemByPosition(i)
itemid = item.GetId()
itemtext = item.GetText()
itemicon = item.GetBitmap()
nitem = wx.MenuItem(menu, itemid, itemtext)
nitem.SetBitmap(itemicon)
if item.IsSubMenu() :
nmenu = wx.Menu()
for val in item.GetSubMenu().GetMenuItems() :
itemid = val.GetId()
itemtext = val.GetText()
itemicon = val.GetBitmap()
nitem = wx.MenuItem(menu, itemid, itemtext)
nitem.SetBitmap(itemicon)
nmenu.AppendItem(nitem)
menu.AppendMenu(-1, item.GetText(), nmenu)
else :
menu.AppendItem(nitem)
class InfoDialog ( wx.Dialog ):
def __init__( self, parent, txt, parametres ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Informations", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
if len(parametres) > 30 :
nb = 4
else :
nb = 2
self.SetSizeHintsSz( wx.Size( 500,200 ), wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_panel2 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
bSizer2 = wx.BoxSizer( wx.VERTICAL )
self.m_staticText4 = wx.StaticText( self.m_panel2, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText4.Wrap( -1 )
bSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
self.m_panel2.SetSizer( bSizer2 )
self.m_panel2.Layout()
bSizer2.Fit( self.m_panel2 )
bSizer1.Add( self.m_panel2, 0, wx.EXPAND |wx.ALL, 5 )
self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL|wx.VSCROLL )
fgSizer1 = wx.FlexGridSizer( 0, nb, 0, 0 )
fgSizer1.AddGrowableCol( 1 )
if nb == 4 :
fgSizer1.AddGrowableCol( 3 )
fgSizer1.SetFlexibleDirection( wx.BOTH )
fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_NONE )
txtctrl = []
for val in parametres :
fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[0], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
#fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
txtctrl.append( wx.TextCtrl( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, (450, 20), wx.TE_READONLY ) )
txtctrl[-1].SetBackgroundColour('#DDE8EB')
#wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
fgSizer1.Add( txtctrl[-1], 0, wx.ALL|wx.EXPAND, 0)
#fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 0)
#fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND|wx.ALL, 0)
self.m_panel1.SetSizer( fgSizer1 )
self.m_panel1.Layout()
fgSizer1.Fit( self.m_panel1 )
bSizer1.Add( self.m_panel1, 1, wx.EXPAND|wx.ALL, 3 )
m_sdbSizer1 = wx.StdDialogButtonSizer()
self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
m_sdbSizer1.Realize();
bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
self.SetSizer( bSizer1 )
self.Layout()
bSizer1.Fit( self )
self.Centre( wx.BOTH )
def __del__( self ):
pass
class LeftTree(CT.CustomTreeCtrl):
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
agwStyle=CT.TR_HIDE_ROOT|CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT):
CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)
#FIXME : test for bigger font on HIDPI screen
font = wx.Font(pointSize=12, family=wx.DEFAULT, style=wx.NORMAL, weight=wx.FONTWEIGHT_NORMAL,
underline=False, face="", encoding=wx.FONTENCODING_DEFAULT)
self.SetFont(font)
##################
self.log = log
alldata = dir(CT)
treestyles = []
events = []
for data in alldata:
if data.startswith("TR_"):
treestyles.append(data)
elif data.startswith("EVT_"):
events.append(data)
self.parent = parent
self.ira = parent
self.events = events
self.styles = treestyles
self.item = None
self.il = wx.ImageList(16, 16)
self.ild = {}
for img in self.ira.images_analyses :
self.ild[img] = self.il.Add(self.ira.images_analyses[img])
self.SetImageList(self.il)
self.count = 0
self.log = log
self.history = parent.history
self.h = self.history.history
idopenfolder = wx.NewId()
#accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('E'), idopenfolder)])
self.Bind(wx.EVT_MENU, self.OnOpenFolder, id=idopenfolder)
idsearchcorpus = wx.NewId()
accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('E'), idopenfolder), (wx.ACCEL_CTRL, ord('F'), idsearchcorpus)])
self.Bind(wx.EVT_MENU, self.OnSearchCorpus, id=idsearchcorpus)
self.SetAcceleratorTable(accel_tbl)
self.root = self.AddRoot("Iramuteq")
if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
self.SetPyData(self.root, None)
self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
self.textroot = self.AppendItem(self.root, _(u'Textual corpus'))
self.SetPyData(self.textroot, {'uuid': 'textroot'})
self.SetItemImage(self.textroot, self.ild['textroot'], CT.TreeItemIcon_Normal)
self.SetItemImage(self.textroot, self.ild['textroot'], CT.TreeItemIcon_Expanded)
for corpus in reversed(self.h) :
child = self.AppendItem(self.textroot, corpus['corpus_name'])
self.SetPyData(child, corpus)
self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Normal)
self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Expanded)
if 'analyses' in corpus :
for y in corpus['analyses'] :
last = self.AppendItem(child, y['name'], ct_type=0)
self.SetPyData(last, y)
if y['type'] in self.ild :
img = self.ild[y['type']]
else :
img = 24
self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
self.matroot = self.AppendItem(self.root, _(u'Matrix'))
self.SetPyData(self.matroot, {'uuid': 'matroot'})
self.SetItemImage(self.matroot, self.ild['matroot'], CT.TreeItemIcon_Normal)
self.SetItemImage(self.matroot, self.ild['matroot'], CT.TreeItemIcon_Expanded)
orphmat = []
for matrix in reversed(self.history.matrix) :
if 'matrix_name' in matrix :
child = self.AppendItem(self.matroot, matrix['matrix_name'])
self.SetPyData(child, matrix)
self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Normal)
self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Expanded)
if 'analyses' in matrix :
for y in matrix['analyses'] :
last = self.AppendItem(child, y['name'], ct_type=0)
self.SetPyData(last, y)
if y['type'] in self.ild :
img = self.ild[y['type']]
else :
img = 24
self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
else :
orphmat.append(matrix)
self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
#self.Bind(wx.EVT_IDLE, self.OnIdle)
self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
mainframe = wx.GetTopLevelParent(self)
if not hasattr(mainframe, "leftpanel"):
#self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
#self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
else:
for combos in mainframe.treeevents:
self.BindEvents(combos)
if hasattr(mainframe, "leftpanel"):
self.ChangeStyle(mainframe.treestyles)
if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
self.SelectItem(self.root)
self.Expand(self.root)
def BindEvents(self, choice, recreate=False):
value = choice.GetValue()
text = choice.GetLabel()
evt = "CT." + text
binder = self.eventdict[text]
if value == 1:
if evt == "CT.EVT_TREE_BEGIN_RDRAG":
self.Bind(wx.EVT_RIGHT_DOWN, None)
self.Bind(wx.EVT_RIGHT_UP, None)
self.Bind(eval(evt), binder)
else:
self.Bind(eval(evt), None)
if evt == "CT.EVT_TREE_BEGIN_RDRAG":
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
def ChangeStyle(self, combos):
style = 0
for combo in combos:
if combo.GetValue() == 1:
style = style | eval("CT." + combo.GetLabel())
if self.GetAGWWindowStyleFlag() != style:
self.SetAGWWindowStyleFlag(style)
def OnCompareItems(self, item1, item2):
t1 = self.GetItemText(item1)
t2 = self.GetItemText(item2)
if t1 < t2:
return -1
if t1 == t2:
return 0
return 1
def OnIdle(self, event):
# if self.gauge:
# try:
# if self.gauge.IsEnabled() and self.gauge.IsShown():
# self.count = self.count + 1
# if self.count >= 50:
# self.count = 0
# self.gauge.SetValue(self.count)
# except:
# self.gauge = None
event.Skip()
def CloseItem(self, itemParent = None, uuid = None) :
if itemParent is None :
itemParent = self.root
child, cookie = self.GetFirstChild(itemParent)
while child :
pydata = self.GetPyData(child)
if pydata['uuid'] == uuid :
self.SetItemBold(child, False)
break
self.CloseItem(child, uuid)
child, cookie = self.GetNextChild(itemParent, cookie)
def GiveFocus(self, itemParent = None, uuid = None, bold = False) :
if itemParent is None :
itemParent = self.root
child, cookie = self.GetFirstChild(itemParent)
while child :
pydata = self.GetPyData(child)
if pydata['uuid'] == uuid :
self.SelectItem(child)
if bold :
self.SetItemBold(child, True)
return
self.GiveFocus(child, uuid, bold)
child, cookie = self.GetNextChild(itemParent, cookie)
def IsInTree(self, itemParent = None, uuid = None) :
if itemParent is None :
itemParent = self.root
child, cookie = self.GetFirstChild(itemParent)
while child :
pydata = self.GetPyData(child)
if pydata['uuid'] == uuid :
return True
self.GiveFocus(child, uuid)
child, cookie = self.GetNextChild(itemParent, cookie)
return False
def OnRightDown(self, event):
pt = event.GetPosition()
item, flags = self.HitTest(pt)
if item:
self.item = item
#self.log.info("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
self.SelectItem(item)
def OnRightUp(self, event):
item = self.item
if not item:
event.Skip()
return
if not self.IsItemEnabled(item):
event.Skip()
return
# Item Text Appearance
ishtml = self.IsItemHyperText(item)
back = self.GetItemBackgroundColour(item)
fore = self.GetItemTextColour(item)
isbold = self.IsBold(item)
font = self.GetItemFont(item)
# Icons On Item
normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
# Enabling/Disabling Windows Associated To An Item
haswin = self.GetItemWindow(item)
# Enabling/Disabling Items
enabled = self.IsItemEnabled(item)
# Generic Item's Info
children = self.GetChildrenCount(item)
itemtype = self.GetItemType(item)
text = self.GetItemText(item)
pydata = self.GetPyData(item)
self.pydata = pydata
self.current = item
self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
"font": font, "normal": normal, "selected": selected, "expanded": expanded,
"selexp": selexp, "haswin": haswin, "children": children,
"itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
if not item in [self.textroot, self.matroot] :
menu = wx.Menu()
info = wx.MenuItem(menu, wx.ID_ANY, _(u"Informations").decode('utf8'))
info.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
menu.AppendItem(info)
rename = wx.MenuItem(menu, wx.ID_ANY, _(u"Rename").decode('utf8'))
rename.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_TIP, size = (16,16)))
menu.AppendItem(rename)
openfolder = wx.MenuItem(menu, wx.ID_ANY, _(u"Open directory").decode('utf8'))
openfolder.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FOLDER_OPEN, size = (16,16)))
menu.AppendItem(openfolder)
menu.AppendSeparator()
if 'corpus_name' in pydata :
buildmenu(menu, self.parent.text_menu)
menu.AppendSeparator()
elif 'matrix_name' in pydata :
buildmenu(menu, self.parent.matrix_menu)
menu.AppendSeparator()
elif pydata.get('type', False) == 'alceste' and pydata['uuid'] in self.parent.history.opened :
openmenu = wx.Menu()
antipro = openmenu.Append(wx.ID_ANY, _(u"Antiprofiles").decode('utf8'))
menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
translate = menu.Append(wx.ID_ANY, _(u"Translate Profile").decode('utf8'))
profsr = menu.Append(wx.ID_ANY, _(u"Repeated segments profiles").decode('utf8'))
profgram = menu.Append(wx.ID_ANY, _(u"POS profiles").decode('utf8'))
stcaract = menu.Append(wx.ID_ANY, _(u"Typical text segments").decode('utf8'))
tgen = menu.Append(wx.ID_ANY, _(u"Tgen Editor").decode('utf8'))
computetgen = menu.Append(wx.ID_ANY, _(u"Compute Tgen").decode('utf8'))
mergeclustergraph = menu.Append(wx.ID_ANY, _(u"Merge Cluster Graph").decode('utf8'))
export_corpus = menu.Append(wx.ID_ANY, _(u"Export corpus").decode('utf8'))
colored = menu.Append(wx.ID_ANY, _(u"Colored corpus").decode('utf8'))
navig = menu.Append(wx.ID_ANY, _(u"Navigator").decode('utf8'))
statclasse = menu.Append(wx.ID_ANY, _(u"Clusters statistics").decode('utf8'))
rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
export_classes = menu.Append(wx.ID_ANY, _(u"Export clusters").decode('utf8'))
subcorpusfromcl = menu.Append(wx.ID_ANY, _(u"Sub corpus from clusters").decode('utf8'))
menu.AppendSeparator()
self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
self.Bind(wx.EVT_MENU, self.OnTranslate, translate)
self.Bind(wx.EVT_MENU, self.OnProfSR, profsr)
self.Bind(wx.EVT_MENU, self.OnProfGram, profgram)
self.Bind(wx.EVT_MENU, self.OnStCaract, stcaract)
self.Bind(wx.EVT_MENU, self.OnTgenEditor, tgen)
self.Bind(wx.EVT_MENU, self.OnTgenCompute, computetgen)
self.Bind(wx.EVT_MENU, self.OnMergeClusterGraph, mergeclustergraph)
self.Bind(wx.EVT_MENU, self.OnExportCorpus, export_corpus)
self.Bind(wx.EVT_MENU, self.OnColored, colored)
self.Bind(wx.EVT_MENU, self.OnNavig, navig)
self.Bind(wx.EVT_MENU, self.StatClasse, statclasse)
self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
self.Bind(wx.EVT_MENU, self.OnExportClasses, export_classes)
self.Bind(wx.EVT_MENU, self.OnSubCorpusFromClusters, subcorpusfromcl)
elif pydata.get('type', False) == 'stat' and pydata['uuid'] in self.parent.history.opened :
export_dictionary = menu.Append(wx.ID_ANY, _(u"Export dictionary").decode('utf8'))
export_lems = menu.Append(wx.ID_ANY, _(u"Export lemma dictionary").decode('utf8'))
export_cut_corpus = menu.Append(wx.ID_ANY, _(u"Export segmented corpus").decode('utf8'))
self.Bind(wx.EVT_MENU, self.OnExportDictionary, export_dictionary)
self.Bind(wx.EVT_MENU, self.OnExportLems, export_lems)
self.Bind(wx.EVT_MENU, self.OnExportCutCorpus, export_cut_corpus)
menu.AppendSeparator()
elif pydata.get('type', False) == 'spec' and pydata['uuid'] in self.parent.history.opened :
tgen = menu.Append(wx.ID_ANY, _(u"Tgen Editor").decode('utf8'))
computetgen = menu.Append(wx.ID_ANY, _(u"Compute Tgen").decode('utf8'))
self.Bind(wx.EVT_MENU, self.OnTgenEditor, tgen)
self.Bind(wx.EVT_MENU, self.OnTgenCompute, computetgen)
menu.AppendSeparator()
elif pydata.get('type', False) == 'reinertmatrix' and pydata['uuid'] in self.parent.history.opened :
openmenu = wx.Menu()
antipro = openmenu.Append(wx.ID_ANY, _(u"antiprofiles").decode('utf8'))
rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
itemdelete = wx.MenuItem(menu, wx.ID_ANY, _(u"Delete from history").decode('utf8'))
itemdelete.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_DELETE, size = (16,16)))
menu.AppendItem(itemdelete)
#item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
#item12 = menu.Append(wx.ID_ANY, "Append An Item")
#self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
#self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
#self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
#self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
#self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
#self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
#self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
#self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
self.Bind(wx.EVT_MENU, self.OnRename, rename)
self.Bind(wx.EVT_MENU, self.OnItemDelete, itemdelete)
self.Bind(wx.EVT_MENU, self.OnOpenFolder, openfolder)
#self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
#self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
self.PopupMenu(menu)
menu.Destroy()
def getcorpus(self):
busy = wx.BusyInfo(_("Please wait...Reading corpus").decode('utf8'), self.parent)
wx.SafeYield()
if self.pydata['uuid'] in self.parent.history.openedcorpus :
corpus = copycorpus(self.parent.history.openedcorpus[self.pydata['uuid']])
elif 'corpus_name' in self.pydata :
corpus = Corpus(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('corpus'), read = True)
else :
cuuid = self.pydata['corpus']
if cuuid in self.parent.history.openedcorpus :
corpus = copycorpus(self.parent.history.openedcorpus[cuuid])
else :
irapath = self.parent.history.corpus[cuuid]['ira']
corpus = Corpus(self.parent, parametres = DoConf(irapath).getoptions('corpus'), read = True)
del busy
return corpus
def getmatrix(self):
if 'matrix_name' in self.pydata :
matrix = Tableau(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('matrix'))
matrix.open()
return copymatrix(matrix)
else :
cuuid = self.pydata['matrix']
matrix = Tableau(self.parent, parametres = DoConf(self.history.matrixanalyse[cuuid]['ira']).getoptions('matrix'))
matrix.open()
return copymatrix(matrix)
def OnSpec(self, evt) :
self.parent.OnTextSpec(evt, self.getcorpus())
def OnStat(self, evt) :
self.parent.OnTextStat(evt, self.getcorpus())
def OnReinert(self, evt) :
self.parent.OnTextReinert(evt, self.getcorpus())
def OnPam(self, evt) :
self.parent.OnPamSimple(evt, self.getcorpus())
def OnSimiTxt(self, evt) :
self.parent.OnSimiTxt(evt, self.getcorpus())
def OnWordCloud(self, evt) :
self.parent.OnWordCloud(evt, self.getcorpus())
# def OnFreq(self, evt):
# self.parent.OnFreq(evt, self.getmatrix())
# def OnChiSquare(self, evt):
# self.parent.OnChi2(evt, self.getmatrix())
# def OnSimiTab(self, evt):
# self.parent.OnSimiTab(evt, self.getmatrix())
# def OnProto(self, evt):
# self.parent.OnProto(evt, self.getmatrix())
# def OnSplitFromVar(self, evt):
# self.parent.OnSplitVar(evt, self.getmatrix())
# def OnCHDReinert(self, evt):
# self.parent.OnCHDReinert(evt, self.getmatrix())
#def OnSubTextFromMeta(self, evt):
# self.parent.OnSubText(self.getcorpus(), parametres = {'frommeta' : True})
#def OnSubTextFromTheme(self, evt):
# self.parent.OnSubText(self.getcorpus(), parametres = {'fromtheme' : True})
def OnProfSR(self, evt) :
ProfileSegment(self.parent, self.page.dictpathout, self.page.parametres, self.page.corpus)
def OnProfGram(self, evt) :
ProfilType(self.parent, self.page.corpus, self.page.parametres)
def OnMergeClusterGraph(self, evt) :
MergeClusterGraph(self.parent, self.page.corpus, self.page.parametres)
print 'merge done !'
def OnStCaract(self, evt) :
dial = PrefUCECarac(self, self.parent)
dial.CenterOnParent()
if self.page.parametres['classif_mode'] != 2 :
uci = False
else :
uci = True
if dial.ShowModal() == wx.ID_OK :
limite = dial.spin_eff.GetValue()
atype = dial.radio_type.GetSelection()
dial.Destroy()
corpus = self.page.corpus
dlg = progressbar(self.ira, maxi = len(corpus.lc))
dlg.Update(1, 'wait...')
for i in range(0, len(corpus.lc)) :
page = self.page.ProfNB.GetPage(i)
rcl = page.cl - 1
dlg.Update(i, u'Cluster %i' % (i+1))
uces = corpus.lc[rcl]
tab = corpus.make_table_with_classe(uces, page.la, uci = uci)
tab.pop(0)
if atype == 0 :
ntab = [round(sum([page.lchi[j] for j, word in enumerate(line) if word == 1]),2) for line in tab]
else :
ntab = [round(sum([page.lchi[j] for j, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
ntab2 = [[ntab[j], uces[j]] for j, val in enumerate(ntab)]
del ntab
ntab2.sort(reverse = True)
ntab2 = ntab2[:limite]
nuces = [val[1] for val in ntab2]
ucis_txt, ucestxt = doconcorde(corpus, nuces, page.la, uci = uci)
items = ['
'.join([ucis_txt[j], '
score : %.2f |