X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=tools.py;h=669337b548f5296f800066bfea5f34c14df6736d;hp=3b1b0d9c7d674a0e9c203de8251c89cf28f8dfbf;hb=eb6087e90df00aee22d69cada9ef473331e85344;hpb=7fb5b2b86f6c9a0617208ee85211177c23d12f47 diff --git a/tools.py b/tools.py index 3b1b0d9..669337b 100644 --- a/tools.py +++ b/tools.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- #Author: Pierre Ratinaud #Copyright (c) 2008-2013, Pierre Ratinaud -#Lisense: GNU GPL +#License: GNU GPL import codecs import os @@ -22,6 +22,12 @@ def istext(line) : else : return False +def isthem(line): + if line.startswith(u'-*') : + return True + else : + return False + def testvar(line, variable) : line = line.split() varmod = [val.split('_') for val in line[1:]] @@ -48,8 +54,16 @@ class Extract : parametres = dial.make_param() if option == 'splitvar' : SplitFromVar(parametres) - else : + elif option == 'mods' : ExtractMods(parametres) + elif option == 'them' : + SplitFromThem(parametres) + dial.Destroy() + dial = wx.MessageDialog(parent, 'Done !', style = wx.OK) + dial.ShowModal() + dial.Destroy() + else : + dial.Destroy() class SplitFromVar : def __init__(self, parametres) : @@ -64,22 +78,59 @@ class SplitFromVar : keepline = False filedict = {} with codecs.open(self.filein, 'r', self.encodein) as fin : - for line in fin : - if istext(line) : - varmod = testvar(line, self.var) - if varmod : - keepline = True - if varmod not in filedict : - filename = os.path.join(self.basepath, varmod + '.txt') - filedict[varmod] = open(filename, 'w') - fileout = filedict[varmod] - else : - keepline = False - if keepline : - fileout.write(line.encode(self.encodeout)) + for line in fin : + if istext(line) : + varmod = testvar(line, self.var) + if varmod : + keepline = True + if varmod not in filedict : + filename = os.path.join(self.basepath, varmod + '.txt') + filedict[varmod] = open(filename, 'w') + fileout = filedict[varmod] + else : + keepline = False + if keepline : + fileout.write(line.encode(self.encodeout)) for f in filedict : filedict[f].close() +class SplitFromThem : + def __init__(self, parametres) : + self.filein = parametres['filein'] + self.them = parametres['them'] + self.encodein = parametres['encodein'] + self.encodeout = parametres['encodeout'] + self.basepath = os.path.dirname(self.filein) + self.pathout = os.path.join(self.basepath, '_'.join([them.replace(u'-*','') for them in self.them])) + self.fileout = open(self.pathout, 'w') + self.doparse() + self.fileout.close() + + def doparse(self): + text = '' + keepline = False + lastet = '' + with codecs.open(self.filein, 'r', self.encodein) as fin : + for line in fin : + if istext(line) : + self.writetext(self.fileout, lastet, text) + text = '' + lastet = line + if isthem(line) : + l = line.strip().rstrip('\n\r') + if l in self.them : + keepline = True + else : + keepline = False + if keepline : + text += line + self.writetext(self.fileout, lastet, text) + + def writetext(self, fileout, lastet, text): + if text != '' : + self.fileout.write(lastet.encode(self.encodeout) + text.encode(self.encodeout)) + + class ExtractMods : def __init__(self, parametres) : self.onefile = parametres.get('onefile', False) @@ -97,22 +148,22 @@ class ExtractMods : keepline = False filedict = {} with codecs.open(self.filein, 'r', self.encodein) as fin : - for line in fin : - if istext(line) : - modinline = testmod(line, self.mods) - if modinline : - keepline = True - if not self.onefile : + for line in fin : + if istext(line) : + modinline = testmod(line, self.mods) + if modinline : + keepline = True + if not self.onefile : if modinline not in filedict : filename = os.path.join(self.basepath, modinline + '.txt') filedict[modinline] = open(filename, 'w') fileout = filedict[modinline] - else : - fileout = self.fileout - else : - keepline = False - if keepline : - fileout.write(line.encode(self.encodeout)) + else : + fileout = self.fileout + else : + keepline = False + if keepline : + fileout.write(line.encode(self.encodeout)) if not self.onefile : for f in filedict : filedict[f].close() @@ -146,7 +197,16 @@ class SubCorpus(Corpus) : def getlemuces(self, lem) : return list(set(self.sgts).intersection(self.corpus.getlemuces(lem))) - +def converttabletocorpus(table, fileout, enc='UTF8') : + var = table.pop(0) + var = var[0:len(var)-1] + print var + et = [zip(var, line[0:len(line)-1]) for line in table] + et = ['**** ' + ' '.join(['*' + '_'.join(val) for val in line]) for line in et] + txt = ['\n'.join([et[i], line[-1]]) for i, line in enumerate(table)] + print '\n'.join(txt) + #with open(fileout, 'w') as f : + @@ -154,3 +214,4 @@ class SubCorpus(Corpus) : if __name__ == '__main__' : #SplitFromVar(parametres) ExtractMods(parametres, True) + #end