X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=functions.py;h=6373176e139c69407c57c940e74d3399f7082157;hp=7a24001f26ce6941be9592f898dd22a07006d0ac;hb=9b78e6210e7fc88a7e77d178c4090aabb23580d9;hpb=54d801be487adf479497f03b1ad4557863093f88 diff --git a/functions.py b/functions.py index 7a24001..6373176 100644 --- a/functions.py +++ b/functions.py @@ -30,6 +30,15 @@ log = logging.getLogger('iramuteq') indices_simi = [u'cooccurrence' ,'pourcentage de cooccurrence',u'Russel',u'Jaccard', 'Kulczynski1', 'Kulczynski2', 'Mountford', 'Fager', 'simple matching', 'Hamman', 'Faith', 'Tanimoto', 'Dice', 'Phi', 'Stiles', 'Michael', 'Mozley', 'Yule', 'Yule2', 'Ochiai', 'Simpson', 'Braun-Blanquet','Chi-squared', 'Phi-squared', 'Tschuprow', 'Cramer', 'Pearson', 'binomial'] +def normpath_win32(path) : + if not sys.platform == 'win32' : + return path + while '\\\\' in path : + path = path.replace('\\\\', '\\') + if path.startswith('\\') and not path.startswith('\\\\') : + path = '\\' + path + return path + class TGen : def __init__(self, path = None, encoding = 'utf8'): self.path = path @@ -39,7 +48,9 @@ class TGen : def __getitem__(self, key): return self.tgen[key] - def read(self, path): + def read(self, path = None): + if path is None : + path = self.path with codecs.open(path, 'r', self.encoding) as f : tgen = f.read() tgen = [line.split('\t') for line in tgen.splitlines()] @@ -55,6 +66,7 @@ class TGen : def writetable(self, pathout, tgens, totocc): etoiles = totocc.keys() + etoiles.sort() with open(pathout, 'w') as f : line = '\t'.join([u'tgens'] + etoiles) + '\n' f.write(line.encode(self.encoding)) @@ -66,7 +78,7 @@ class TGen : while totname + `i` in tgens : i += 1 totname = totname + `i` - line = '\t'.join([totname] + [`totocc[et]` for et in etoiles]) + line = '\t'.join([totname] + [`totocc[et]` for et in etoiles]) + '\n' f.write(line.encode(self.encoding)) class History : @@ -177,6 +189,19 @@ class History : def rmtab(self, analyse) : del self.opened[analyse['uuid']] + + def update(self, analyse) : + if 'matrix_name' in analyse : + self.matrixanalyse[analyse['uuid']].update(analyse) + elif 'corpus_name' in analyse : + self.corpus[analyse['uuid']].update(analyse) + elif 'corpus' in analyse : + self.analyses[analyse['uuid']].update(analyse) + else : + toupdate = [an for an in self.matrixanalyse[analyse['matrix']]['analyses'] if an['uuid'] == analyse['uuid']] + toupdate[0].update(analyse) + self.write() + self.read() def clean(self) : corpustodel = [corpus for corpus in self.history if not os.path.exists(corpus['ira'])] @@ -196,7 +221,9 @@ class DoConf : def __init__(self, configfile=None, diff = None, parametres = None) : self.configfile = configfile self.conf = ConfigParser() + if configfile is not None : + configfile = normpath_win32(configfile) self.conf.readfp(codecs.open(configfile, 'r', 'utf8')) self.parametres = {} if parametres is not None : @@ -252,8 +279,9 @@ class DoConf : txt += '%s = %s\n' % (option, `parametres[i][option]`) if outfile is None : outfile = self.configfile - with codecs.open(outfile, 'w', 'utf8') as f : - f.write(txt) + outfile = normpath_win32(outfile) + with open(outfile, 'w') as f : + f.write(txt.encode('utf8')) #self.conf.write(f) def totext(self, parametres) : @@ -363,15 +391,8 @@ def treat_line_alceste(i, line) : return [i, int(line[0]), int(line[1]), float(line[2]), float(line[3]), line[6], line[4], line[5]] def ReadProfileAsDico(File, Alceste=False, encoding = sys.getdefaultencoding()): - #print 'lecture des profils : ReadProfileAsDico' - #if Alceste : - # print 'lecture du dictionnaire de type' - # dictlem = {} - # for line in parent.corpus.lem_type_list : - # dictlem[line[0]] = line[1] dictlem = {} print 'lecture des profiles' - #encoding = sys.getdefaultencoding() FileReader = codecs.open(File, 'r', encoding) Filecontent = FileReader.readlines() FileReader.close() @@ -405,17 +426,17 @@ def GetTxtProfile(dictprofile, cluster_size) : return '\n\n'.join(proflist) def formatExceptionInfo(maxTBlevel=5): - cla, exc, trbk = sys.exc_info() - try : - excName = cla.__name__ - except : - excName = 'None' - try: - excArgs = exc.args[0] - except : - excArgs = "" - excTb = traceback.format_tb(trbk, maxTBlevel) - return (excName, excArgs, excTb) + cla, exc, trbk = sys.exc_info() + try : + excName = cla.__name__ + except : + excName = 'None' + try: + excArgs = exc.args[0] + except : + excArgs = "" + excTb = traceback.format_tb(trbk, maxTBlevel) + return (excName, excArgs, excTb) #fonction des etudiants de l'iut @@ -480,6 +501,7 @@ exceptions = {'paragrapheOT' : u"Un problème de formatage (présence d'un marqu 'EmptyText' : u"Texte vide (probablement un problème de formatage du corpus). Le problème est apparu à la ligne ", 'CorpusEncoding' : u"Problème d'encodage.", 'TextBeforeTextMark' : u"Problème de formatage : du texte avant le premier marqueur de texte (****). Le problème est survenu à la ligne ", + 'MissingAnalyse' : u'Aucun fichier à cet emplacement :\n', } def BugReport(parent, error = None): @@ -506,7 +528,7 @@ def BugReport(parent, error = None): txt += u'*************************************\n' txt += '\n'.join(excTb).replace(' ', ' ') txt += excName + '\n' - txt += exc + txt += `exc` title = "Bug" dial = BugDialog(parent, **{'title' : title}) @@ -543,7 +565,10 @@ def ReadLexique(parent, lang = 'french', filein = None): else : parent.lexique = ReadDicoAsDico(filein) else : - parent.lexique = {} + if filein is None : + parent.lexique = {} + else : + parent.lexique = ReadDicoAsDico(filein) def ReadList(filein, encoding = sys.getdefaultencoding(), sep = ';'): #file = open(filein) @@ -675,7 +700,6 @@ def progressbar(self, maxi) : else : parent = self try : - print '###horrible hack progressbar' maxi = int(maxi) except : maxi = 1