[dataio] Implements split_file() (closes #116931)

To speed up the alignement and use a cache system, we need a function to split huge files into smaller ones. This function does the job.

authorSimon Chabot <simon.chabot@logilab.fr>
changeset6afc3891e633
branchdefault
phasepublic
hiddenno
parent revision#97900fe196c9 [doc] Typo + a litte text about the online demo. (closes #116939)
child revision#4b6119e623cf [aligner] Add the alignall_iterative() function (closes #116932)
files modified by this revision
dataio.py
test/data/file2split
test/test_alignment.py
# HG changeset patch
# User Simon Chabot <simon.chabot@logilab.fr>
# Date 1360921059 -3600
# Fri Feb 15 10:37:39 2013 +0100
# Node ID 6afc3891e63336ad8d8fe9fc9dae2f2c22648b4d
# Parent 97900fe196c948f4962abfb7bcf52ae07977689b
[dataio] Implements split_file() (closes #116931)

To speed up the alignement and use a cache system, we need a function to split
huge files into smaller ones. This function does the job.

diff --git a/dataio.py b/dataio.py
@@ -14,10 +14,11 @@
1  #
2  # You should have received a copy of the GNU Lesser General Public License along
3  # with this program. If not, see <http://www.gnu.org/licenses/>.
4 
5  from os.path import exists as fileexists
6 +from os import path as osp
7 
8  import csv
9  import urllib
10 
11  try:
@@ -170,5 +171,37 @@
12                                               else alignid,
13                       targetid.encode('utf-8') if isinstance(targetid, basestring)
14                                                else targetid,
15                       dist
16                       ))
17 +
18 +
19 +def split_file(filename, outputdir, nblines=60000):
20 +    """ Split `filename` into smaller files of ``nblines`` lines. Files are
21 +        written into `outputdir`.
22 +
23 +        Return the list of files
24 +    """
25 +    NEW = object()
26 +
27 +    def readlines(fobj, nblines):
28 +        """ yield all lines of the file, and
29 +        at split-file boundaries, yield a NEW marker
30 +        """
31 +        for index, line in enumerate(fobj):
32 +            if index and index % nblines == 0:
33 +                yield NEW
34 +            yield line
35 +
36 +    count = 0
37 +    with open(filename, 'rb') as fobj:
38 +        outfile = open(osp.join(outputdir, '%s' % count), 'wb')
39 +        for line in readlines(fobj, nblines):
40 +            if line is NEW:
41 +                outfile.close()
42 +                count += 1
43 +                outfile = open(osp.join(outputdir, '%s' % count), 'wb')
44 +                continue
45 +            outfile.write(line)
46 +        outfile.close()
47 +        count += 1
48 +    return map(str, xrange(count))
diff --git a/test/data/file2split b/test/data/file2split
@@ -0,0 +1,1000 @@
49 +cambrant	cambrer
50 +dégrafa	dégrafer
51 +adorerais	adorer
52 +participiales	participial
53 +coronales	coronal
54 +amorcera	amorcer
55 +titanesques	titanesque
56 +Gymniques	gymnique
57 +Postérieurement	postérieurement
58 +lingual	lingual
59 +stomacal	stomacal
60 +décalitre	décalitre
61 +photomaton	photomaton
62 +éclates	éclater
63 +manteau	manteau
64 +majorés	majoré
65 +pleurants	pleurant
66 +appartenances	appartenance
67 +dégoûta	dégoûter
68 +chantournement	chantournement
69 +randonné	randonner
70 +réalisent	réaliser
71 +raffole	raffoler
72 +descendirent	descendre
73 +lubrifient	lubrifier
74 +transsibérien	transsibérien
75 +Rythmant	rythmer
76 +perquisitionnés	perquisitionner
77 +étampe	étampe
78 +islamismes	islamisme
79 +nitra	nitrer
80 +canéphores	canéphore
81 +aïeules	aïeul
82 +Mythologiques	mythologique
83 +piaillent	piailler
84 +destiné	destiner
85 +mélanoses	mélanose
86 +Otalgie	otalgie
87 +Déduite	déduire
88 +Épisiotomie	épisiotomie
89 +téléphonistes	téléphoniste
90 +Pourcentages	pourcentage
91 +milliaire	milliaire
92 +décortiquera	décortiquer
93 +correcteur	correcteur
94 +exhalera	exhaler
95 +inocybe	inocybe
96 +grenouillard	grenouillard
97 +coopéreront	coopérer
98 +tartignolles	tartignolle
99 +mesures	mesure
100 +défoliations	défoliation
101 +Viens	venir
102 +holothuries	holothurie
103 +cambriolés	cambrioler
104 +chansonniers	chansonnier
105 +sudorales	sudoral
106 +sursirent	surseoir
107 +ferronickel	ferronickel
108 +frotton	frotton
109 +énuclée	énucléer
110 +dépiste	dépister
111 +tondeurs	tondeur
112 +Jeannette	Jeannette
113 +Sanctifiés	sanctifier
114 +glisses	glisser
115 +diamine	diamine
116 +niqué	niquer
117 +culbutée	culbuter
118 +Taons	taon
119 +scripturales	scriptural
120 +coulomb	coulomb
121 +hémicycle	hémicycle
122 +paralysé	paralyser
123 +badine	badin
124 +abrège	abréger
125 +européanisant	européaniser
126 +Bouteilles	bouteille
127 +rétrécissement	rétrécissement
128 +glamour	glamour
129 +incorpore	incorporer
130 +prolétariser	prolétariser
131 +lointaine	lointain
132 +bigarrés	bigarré
133 +gril	gril
134 +infracteur	infracteur
135 +Regard	regard
136 +Divas	diva
137 +allonge	allonger
138 +muté	muter
139 +linéale	linéal
140 +répliquait	répliquer
141 +Lairds	laird
142 +démastiquer	démastiquer
143 +flandricismes	flandricisme
144 +endoparasites	endoparasite
145 +Einstein	Einstein
146 +héliotropes	héliotrope
147 +rétribuée	rétribuer
148 +fessant	fesser
149 +Carottiers	carottier
150 +âcres	âcre
151 +déroutantes	déroutant
152 +CAHUTE	cahute
153 +Pie-mère	pie-mère
154 +PIRES	pire
155 +célibataire	célibataire
156 +Durits	durit
157 +dévergondage	dévergondage
158 +Reprends	reprendre
159 +labourant	labourer
160 +dales	dale
161 +concrétisations	concrétisation
162 +atermoyer	atermoyer
163 +sautâmes	sauter
164 +crée	créer
165 +nide	nider
166 +adossant	adosser
167 +passiflores	passiflore
168 +asomatognosies	asomatognosie
169 +Fier-à-bras	fier-à-bras
170 +Talmudiste	talmudiste
171 +Ferrets	ferret
172 +surprofit	surprofit
173 +répercuteront	répercuter
174 +syngnathes	syngnathe
175 +polarographique	polarographique
176 +Hulten	Hulten
177 +braiments	braiment
178 +mondialisés	mondialiser
179 +flagellation	flagellation
180 +baptistes	baptiste
181 +fusaïole	fusaïole
182 +houspille	houspiller
183 +nacrée	nacrer
184 +fréquentée	fréquenter
185 +dérobées	dérobé
186 +Démunie	démuni
187 +pneus	pneu
188 +Rosaires	rosaire
189 +Gangrène	gangrène
190 +nymphaux	nymphal
191 +froideurs	froideur
192 +Plongeuse	plongeur
193 +meringues	meringue
194 +aplastique	aplastique
195 +débloquons	débloquer
196 +heptagonales	heptagonal
197 +Sécheresse	sécheresse
198 +successoraux	successoral
199 +aéronef	aéronef
200 +brillèrent	briller
201 +surgeler	surgeler
202 +arboristes	arboriste
203 +augustinisme	augustinisme
204 +détruisirent	détruire
205 +calquant	calquer
206 +roulé	rouler
207 +panis	panis
208 +manipules	manipule
209 +silicocalcaires	silicocalcaire
210 +cohésion	cohésion
211 +réunît	réunir
212 +spirilles	spirille
213 +FORS	fors
214 +milicienne	milicien
215 +édificateur	édificateur
216 +annale	annal
217 +Cologne	Cologne
218 +décherrai	déchoir
219 +décrassant	décrasser
220 +élucident	élucider
221 +impatientait	impatienter
222 +purpurines	purpurin
223 +fantastiques	fantastique
224 +polysynthétiques	polysynthétique
225 +sécherie	sécherie
226 +sacro-coccygien	sacro-coccygien
227 +entonnant	entonner
228 +Empoisonneurs	empoisonneur
229 +MARION	Marion
230 +polluante	polluant
231 +surfondue	surfondu
232 +Atropos	atropos
233 +Urbanisé	urbaniser
234 +corégents	corégent
235 +Bénis	bénir
236 +tétraédriques	tétraédrique
237 +goûteux	goûteux
238 +Orsay	Orsay
239 +épiceries	épicerie
240 +interalliées	interallié
241 +minot	minot
242 +bité	biter
243 +vidéoclub	vidéoclub
244 +catégorielle	catégoriel
245 +Gueules	gueuler
246 +fonctionnalités	fonctionnalité
247 +relayaient	relayer|relayer
248 +encenseur	encenseur
249 +parsemé	parsemer
250 +bavardes	bavard
251 +parvenions	parvenir
252 +Fascinant	fasciner
253 +Furias	furia
254 +mirlitonnant	mirlitonner
255 +abouche	aboucher
256 +discounts	discount
257 +Nord-Américaine	Nord-Américain
258 +Ébaucher	ébaucher
259 +fouiner	fouiner
260 +réanimeront	réanimer
261 +Bugaku	bugaku
262 +gorgerins	gorgerin
263 +commenterait	commenter
264 +shi'ite	shi'ite
265 +Scriptural	scriptural
266 +débrouillarde	débrouillard
267 +aziliens	azilien
268 +USDB	USDB
269 +intoxinations	intoxination
270 +assiérait	asseoir
271 +marcaires	marcaire
272 +pelée	pelé
273 +Acéphales	acéphale
274 +Tagals	tagal
275 +lovées	lover
276 +comptable	comptable
277 +ralentissent	ralentir
278 +IDES	ide|ides
279 +psycholinguistique	psycholinguistique
280 +vicissitudes	vicissitude
281 +scolarisés	scolariser
282 +Interroger	interroger
283 +apportions	apporter
284 +iraquiennes	iraquien
285 +baissa	baisser
286 +convulsivothérapie	convulsivothérapie
287 +assis	asseoir
288 +vitriolage	vitriolage
289 +amadouait	amadouer
290 +croîtraient	croître
291 +Cafetiers	cafetier
292 +crevez	crever
293 +abandonneras	abandonner
294 +incroyances	incroyance
295 +décapsidation	décapsidation
296 +lorgnaient	lorgner
297 +occupasse	occuper
298 +décimétriques	décimétrique
299 +radiaire	radiaire
300 +assaillent	assaillir
301 +molestant	molester
302 +hauteurs	hauteur
303 +concéder	concéder
304 +glissées	glisser
305 +déblaiement	déblaiement
306 +arbalestiers	arbalestier
307 +repus	repaître
308 +stromboliennes	strombolien
309 +mycéliens	mycélien
310 +Rebouteux	rebouteux
311 +fécondent	féconder
312 +trypanosome	trypanosome
313 +EXACTE	exact
314 +ennuiera	ennuyer
315 +troublante	troublant
316 +Trémolites	trémolite
317 +parage	parage
318 +Perpète	perpète
319 +consumèrent	consumer
320 +entamure	entamure
321 +Maudites	maudit
322 +dévitrification	dévitrification
323 +Éclaboussé	éclabousser
324 +opposa	opposer
325 +maux	mal
326 +localisent	localiser
327 +déchainent	déchainer
328 +boxé	boxer
329 +bonzerie	bonzerie
330 +rigolard	rigolard
331 +Hématome	hématome
332 +polémiste	polémiste
333 +gigoteuse	gigoteur
334 +protecteurs	protecteur
335 +syriaques	syriaque
336 +Damas	Damas
337 +perfectibles	perfectible
338 +masures	masure
339 +monosexués	monosexué
340 +martiennes	martien
341 +habituée	habituer
342 +éventrera	éventrer
343 +surfaits	surfait
344 +révolutionnariste	révolutionnariste
345 +gémit	gémir
346 +Dieux	Dieu
347 +fluctua	fluctuer
348 +mâchonnaient	mâchonner
349 +propageaient	propager
350 +intégrèrent	intégrer
351 +joncha	joncher
352 +Empirisme	empirisme
353 +modulateurs	modulateur
354 +Absurdité	absurdité
355 +moelleuse	moelleux
356 +congruence	congruence
357 +déjeuna	déjeuner
358 +tamponner	tamponner
359 +hyperactif	hyperactif
360 +rebutés	rebuter
361 +coxalgique	coxalgique
362 +laborantins	laborantin
363 +crosnes	crosne
364 +sisymbre	sisymbre
365 +papillons	papillon
366 +CHÂTEAU	Château
367 +défoncements	défoncement
368 +surnommés	surnommer
369 +crochu	crochu
370 +Rectifications	rectification
371 +rouquins	rouquin
372 +trébuchantes	trébuchant
373 +rémissible	rémissible
374 +absorbants	absorbant
375 +Obéissant	obéir
376 +Délignage	délignage
377 +chasuble	chasuble
378 +Rabâcher	rabâcher
379 +dactylographes	dactylographe
380 +bues	boire
381 +Véhicules	véhicule
382 +toussaint	toussaint
383 +hautes	haut
384 +Surprise-Partie	surprise-partie
385 +aluni	alunir
386 +Pétéchial	pétéchial
387 +consultée	consulter
388 +sublimées	sublimer
389 +aboutirons	aboutir
390 +peupleraient	peupler
391 +bicarbonates	bicarbonate
392 +charreterie	charreterie
393 +divergeassent	diverger
394 +mesurât	mesurer
395 +bressan	bressan
396 +Talonnade	talonnade
397 +dioscures	dioscures
398 +Inhumanité	inhumanité
399 +édicta	édicter
400 +Pédiatre	pédiatre
401 +enseignent	enseigner
402 +Bises	bis
403 +RIChelieu	Richelieu
404 +induvies	induvie
405 +dizain	dizain
406 +Revêtue	revêtir
407 +chanfreiné	chanfreiner
408 +surchauffés	surchauffé
409 +regorgeraient	regorger
410 +pèseraient	peser
411 +stérigmates	stérigmate
412 +tuée	tuer
413 +panachure	panachure
414 +Curieusement	curieusement
415 +contrôlée	contrôler
416 +whigs	whig
417 +portraiturés	portraiturer
418 +Accessibles	accessible
419 +brouet	brouet
420 +aliénèrent	aliéner
421 +vampirise	vampiriser
422 +Hyperfonctionnement	hyperfonctionnement
423 +autodestruction	autodestruction
424 +élastiquement	élastiquement
425 +Multinationale	multinational
426 +marcottages	marcottage
427 +enrayeraient	enrayer
428 +fatigants	fatigant
429 +soutes	soute
430 +détentrices	détenteur
431 +JOSÉPHINE	joséphine
432 +Cueilleuse	cueilleur
433 +Pilotant	piloter
434 +golgotha	golgotha
435 +innovés	innover
436 +reléguées	reléguer
437 +jalaps	jalap
438 +interdis	interdire
439 +cténoïde	cténoïde
440 +Postale	postal
441 +camelotes	camelote
442 +Présenter	présenter
443 +horodaté	horodaté
444 +mandement	mandement
445 +encombrerait	encombrer
446 +louves	louve
447 +inhalateurs	inhalateur
448 +sautillants	sautillant
449 +prodiguera	prodiguer
450 +déchirante	déchirant
451 +appellerions	appeler
452 +espadrilles	espadrille
453 +ressac	ressac
454 +coopérants	coopérant
455 +surcharge	surcharge
456 +meurtries	meurtrir
457 +transsude	transsuder
458 +dictera	dicter
459 +vissa	visser
460 +exciterait	exciter
461 +pastoureaux	pastoureaux
462 +amplifies	amplifier
463 +polyèdre	polyèdre
464 +ÉLEVÉ	élever
465 +épistate	épistate
466 +socio-affectifs	socio-affectif
467 +jaquets	jaquet
468 +chargeaient	charger
469 +versera	verser
470 +extradurales	extradural
471 +Idéologue	idéologue
472 +formalismes	formalisme
473 +exaspérait	exaspérer
474 +Marathon	Marathon
475 +partisan	partisan
476 +distinctes	distinct
477 +lanterniste	lanterniste
478 +revole	revoler
479 +bupreste	bupreste
480 +égareront	égarer
481 +cavalières	cavalier
482 +englober	englober
483 +bétoires	bétoire
484 +dédommager	dédommager
485 +ministères	ministère
486 +périlleux	périlleux
487 +Duteil	Duteil
488 +malinoise	malinois
489 +assécherait	assécher
490 +pintas	pinter
491 +homosexualités	homosexualité
492 +reprocherez	reprocher
493 +Actuariat	actuariat
494 +retransmettaient	retransmettre
495 +effarer	effarer
496 +protéiniques	protéinique
497 +lavages	lavage
498 +Arguant	arguer
499 +accouplements	accouplement
500 +Pénale	pénal
501 +Angoras	angora
502 +orang	orang
503 +démoralisé	démoraliser
504 +néo-fascismes	néo-fascisme
505 +reproduites	reproduire
506 +confusionniste	confusionniste
507 +frugalité	frugalité
508 +laryngites	laryngite
509 +orthocentrique	orthocentrique
510 +monocarpiques	monocarpique
511 +élèvera	élever
512 +Ressourcer	ressourcer
513 +mirabellier	mirabellier
514 +cristallisait	cristalliser
515 +microlithiques	microlithique
516 +faisaient	faire
517 +Soldats	soldat
518 +métencéphale	métencéphale
519 +Brise-Ménage	brise-ménage
520 +Tablées	tablée
521 +bimétallique	bimétallique
522 +redevenons	redevenir
523 +signora	signora
524 +appareillages	appareillage
525 +retracent	retracer
526 +muscardine	muscardine
527 +Shintoïsme	shintoïsme
528 +architecturaux	architectural
529 +cannibalisées	cannibaliser
530 +fil-de-fériste	fil-de-fériste
531 +fumoirs	fumoir
532 +démontrassent	démontrer
533 +connaîtra	connaître
534 +sénéchaux	sénéchal
535 +lagotriche	lagotriche
536 +Prestation	prestation
537 +Dilatations	dilatation
538 +non-possédants	non-possédant
539 +sémaphores	sémaphore
540 +expertes	expert
541 +SuCRE	sucre
542 +plus-que-parfait	plus-que-parfait
543 +charretées	charretée
544 +caléidoscope	caléidoscope
545 +proposables	proposable
546 +IdE	ide
547 +AUGMENTE	augmenter
548 +panislamique	panislamique
549 +boisons	boiser
550 +huipils	huipil
551 +gémissant	gémir
552 +rétorquent	rétorquer
553 +tirettes	tirette
554 +détissait	détisser
555 +honorifique	honorifique
556 +idéophone	idéophone
557 +archine	archine
558 +diocèse	diocèse
559 +biotype	biotype
560 +pourriez	pouvoir
561 +Paramilitaires	paramilitaire
562 +Latéralisation	latéralisation
563 +atomisme	atomisme
564 +infecta	infecter
565 +Éclaircissons	éclaircir
566 +remîmes	remettre
567 +influera	influer
568 +langouste	langouste
569 +pallieraient	pallier
570 +livresque	livresque
571 +Déclencher	déclencher
572 +Insectarium	insectarium
573 +allantoïde	allantoïde
574 +doux	doux
575 +sursaut	sursaut
576 +Meurthe	Meurthe
577 +nuirez	nuire
578 +paît	paître
579 +indiciblement	indiciblement
580 +frayes	fraye
581 +aveuglée	aveugler
582 +antistatique	antistatique
583 +Ombragée	ombrager
584 +Jeûnez	jeûner
585 +manuellement	manuellement
586 +PROCÉDÉ	procédé
587 +Isonomie	isonomie
588 +dactylographier	dactylographier
589 +Suivons	suivre
590 +prendrions	prendre
591 +libériens	libérien
592 +dramatisé	dramatiser
593 +frottantes	frottant
594 +Toussaint-Louverture	Toussaint-Louverture
595 +bimétalliques	bimétallique
596 +déferré	déferrer
597 +amollit	amollir
598 +cachez	cacher
599 +spiders	spider
600 +allodiaux	allodial
601 +lithographiée	lithographier
602 +violentent	violenter
603 +Modernisateur	modernisateur
604 +proscrivant	proscrire
605 +islamiste	islamiste
606 +cyclotouriste	cyclotouriste
607 +parviendrait	parvenir
608 +rayée	rayer|rayer
609 +dyslexie	dyslexie
610 +Suivait	suivre
611 +tambourins	tambourin
612 +désherbés	désherber
613 +technicisé	techniciser
614 +rasantes	rasant
615 +démantèlements	démantèlement
616 +enveloppeuse	enveloppeur
617 +nettoyez	nettoyer
618 +antérieure	antérieur
619 +exempts	exempt
620 +Totalisant	totaliser
621 +tractoire	tractoire
622 +CIMES	cime
623 +shoot	shoot
624 +Poursuivent	poursuivre
625 +Organigramme	organigramme
626 +Bruyante	bruyant
627 +latinisent	latiniser
628 +Trieuse	trieuse
629 +logis	logis
630 +Bulle	bulle
631 +Napoléoniens	napoléonien
632 +gêneraient	gêner
633 +colombine	colombine
634 +huîtrières	huîtrière
635 +festonnée	festonner
636 +ménagers	ménager
637 +richement	richement
638 +Préposée	préposer
639 +pragmatistes	pragmatiste
640 +jaffas	jaffer
641 +Vice-recteur	vice-recteur
642 +navigations	navigation
643 +commerciale	commercial
644 +ménageront	ménager
645 +porte-objet	porte-objet
646 +coulon	coulon
647 +ferromagnétiques	ferromagnétique
648 +Messagers	messager
649 +nasalisé	nasaliser
650 +blatère	blatérer
651 +Oiseuse	oiseux
652 +exceptionnelles	exceptionnel
653 +fédéraux	fédéral
654 +revisitera	revisiter
655 +flasher	flasher
656 +Écluses	écluse
657 +Pompons	pompon
658 +brushings	brushing
659 +cristallisés	cristalliser
660 +épaulaient	épauler
661 +Vigoureusement	vigoureusement
662 +ressemblance	ressemblance
663 +contrebalancé	contrebalancer
664 +inspecteur	inspecteur
665 +Turbidite	turbidite
666 +imprévisions	imprévision
667 +chicotin	chicotin
668 +gouaches	gouache
669 +désencombrement	désencombrement
670 +Progression	progression
671 +Dédoublement	dédoublement
672 +cryoniques	cryonique
673 +Déchristianisation	déchristianisation
674 +anosmiques	anosmique
675 +Salamine	Salamine
676 +suturant	suturer
677 +Présidents	président
678 +échancrée	échancrer
679 +anticyclone	anticyclone
680 +amollies	amollir
681 +Rétrospectives	rétrospectif
682 +bancable	bancable
683 +Infidèlement	infidèlement
684 +ravissaient	ravir
685 +amphibole	amphibole
686 +pât	pât
687 +Déformations	déformation
688 +usagères	usager
689 +paravalanche	paravalanche
690 +kriegspiels	kriegspiel
691 +assurable	assurable
692 +adjugent	adjuger
693 +bouzine	bouzine
694 +Paraplégie	paraplégie
695 +atteignons	atteindre
696 +affronteront	affronter
697 +macro-instructions	macro-instruction
698 +inséparable	inséparable
699 +éphémères	éphémère
700 +Utilise	utiliser
701 +nidificatrices	nidificateur
702 +ophidienne	ophidien
703 +entremêlement	entremêlement
704 +égalisés	égaliser
705 +étruscologue	étruscologue
706 +matons	maton
707 +demanderiez	demander
708 +Pitt	Pitt
709 +flamboyaient	flamboyer
710 +Nunchaku	nunchaku
711 +Harcelez	harceler
712 +générât	générer
713 +aldéhyde	aldéhyde
714 +psalmodie	psalmodie
715 +fesses	fesse
716 +demi-espaces	demi-espace
717 +lût	lire
718 +Écloseries	écloserie
719 +Abouter	abouter
720 +sclérifiée	sclérifier
721 +lardées	larder
722 +TRInité	trinité
723 +soudage	soudage
724 +voltages	voltage
725 +provenances	provenance
726 +gambadaient	gambader
727 +Semblaient	sembler
728 +inaperçu	inaperçu
729 +bousculades	bousculade
730 +comblanchien	comblanchien
731 +Démonique	démonique
732 +archières	archière
733 +renouer	renouer
734 +ennuya	ennuyer
735 +mugissement	mugissement
736 +quadrilobés	quadrilobé
737 +spore	spore
738 +ESPACE	espace
739 +élaboreront	élaborer
740 +instigateurs	instigateur
741 +stéatites	stéatite
742 +Soviétisation	soviétisation
743 +Tauromachies	tauromachie
744 +valorisés	valoriser
745 +Aches	ache
746 +défausse	défausse
747 +revivifier	revivifier
748 +triplace	triplace
749 +Parotidectomie	parotidectomie
750 +ostioles	ostiole
751 +Protègements	protègement
752 +tabellaire	tabellaire
753 +galgal	galgal
754 +auto-adhésifs	auto-adhésif
755 +Avant-Guerre	avant-guerre
756 +raconteras	raconter
757 +neuropharmacologie	neuropharmacologie
758 +antisoviétisme	antisoviétisme
759 +spectrogrammes	spectrogramme
760 +sacrement	sacrement
761 +Pensiez	penser
762 +politicaillerie	politicaillerie
763 +attarderai	attarder
764 +jojos	jojo
765 +Aller	aller
766 +ameublissait	ameublir
767 +incinérés	incinérer
768 +éliminant	éliminer
769 +baptisera	baptiser
770 +orphisme	orphisme
771 +artisanes	artisane
772 +nuageuses	nuageux
773 +harmoniserait	harmoniser
774 +centrifuges	centrifuge
775 +désenchantent	désenchanter
776 +agrandissement	agrandissement
777 +pédale	pédale
778 +reliez	relier
779 +physiognomonique	physiognomonique
780 +devant	devant
781 +obscurcissait	obscurcir
782 +redresse	redresser
783 +Criminelle	criminel
784 +saperas	saper
785 +désorganisés	désorganiser
786 +manufacturer	manufacturer
787 +pommerais	pommer
788 +sous-exposées	sous-exposer
789 +adonnés	adonner
790 +compléta	compléter
791 +canthares	canthare
792 +Jessica	Jessica
793 +prolongerons	prolonger
794 +salées	salé
795 +prodiguent	prodiguer
796 +remballe	remballer
797 +matricée	matricer
798 +conversait	converser
799 +rocheux	rocheux
800 +glanduleuse	glanduleux
801 +présidentialiste	présidentialiste
802 +taupinière	taupinière
803 +Peignoir	peignoir
804 +transmisses	transmettre
805 +périhélies	périhélie
806 +Difficiles	difficile
807 +Spirantes	spirant
808 +érotomane	érotomane
809 +Patrouilleur	patrouilleur
810 +Dérives	dérive
811 +ennéagones	ennéagone
812 +isosonie	isosonie
813 +Reformuler	reformuler
814 +pâtissière	pâtissier
815 +Prompt	prompt
816 +sanctifies	sanctifier
817 +Liseurs	liseur
818 +redémoli	redémolir
819 +gagman	gagman
820 +toxicogène	toxicogène
821 +miraillé	mirailler
822 +Implantez	implanter
823 +bêche-de-mer	bêche-de-mer
824 +prêtes	prêt
825 +contraindre	contraindre
826 +Impliquant	impliquer
827 +dépensèrent	dépenser
828 +subsidiaire	subsidiaire
829 +favisme	favisme
830 +courçon	courçon
831 +électives	électif
832 +comprimés	comprimé
833 +gallo-romaine	gallo-romain
834 +réaménagea	réaménager
835 +tartines	tartine
836 +sanguine	sanguin
837 +échaliers	échalier
838 +maltraitait	maltraiter
839 +urgente	urgent
840 +exposa	exposer
841 +directoriale	directorial
842 +offrais	offrir
843 +astronomie	astronomie
844 +avant-pays	avant-pays
845 +Muflier	muflier
846 +mélasse	mélasse
847 +névroptère	névroptère
848 +holorime	holorime
849 +Reprenant	reprendre
850 +JASMIN	jasmin
851 +réductones	réductone
852 +démissionneront	démissionner
853 +transies	transi
854 +Synéchies	synéchie
855 +vêlages	vêlage
856 +ypérite	ypérite
857 +fidélités	fidélité
858 +abaissera	abaisser
859 +Polyalcool	polyalcool
860 +Duumvirat	duumvirat
861 +oxalide	oxalide
862 +greluches	greluche
863 +Saint-Cyr	Saint-Cyr
864 +virga	virga
865 +figement	figement
866 +sensuel	sensuel
867 +défoulement	défoulement
868 +Hydrographique	hydrographique
869 +interprétatives	interprétatif
870 +simulant	simuler
871 +fredons	fredon
872 +Barnacle	barnacle
873 +dynasties	dynastie
874 +gémissait	gémir
875 +Contre-pied	contre-pied
876 +synchronisées	synchroniser
877 +écorné	écorner
878 +aussière	aussière
879 +méharistes	méhariste
880 +perhydrol	perhydrol
881 +Passing-shot	passing-shot
882 +millimes	millime
883 +Palmée	palmer
884 +bougeoirs	bougeoir
885 +Dévoiler	dévoiler
886 +pavez	paver
887 +Grassette	grassette
888 +alourdira	alourdir
889 +XXXVIIe	XXXVIIe
890 +procures	procure
891 +médiats	médiat
892 +tends	tendre
893 +Hyperespace	hyperespace
894 +panels	panel
895 +déblocage	déblocage
896 +ecclésiastique	ecclésiastique
897 +recrutèrent	recruter
898 +Élan	élan
899 +confucianiste	confucianiste
900 +sertit	sertir
901 +Sacrifiant	sacrifier
902 +chefS	chef
903 +Créant	créer
904 +unissant	unir
905 +Répression	répression
906 +antibourgeoise	antibourgeois
907 +introjectées	introjecter
908 +radioguidage	radioguidage
909 +épilés	épiler
910 +poireauter	poireauter
911 +signalisés	signaliser
912 +sublinguale	sublingual
913 +irréalisée	irréalisé
914 +édulcorer	édulcorer
915 +Lavoir	lavoir
916 +pointeries	pointerie
917 +dyades	dyade
918 +ragusaine	ragusain
919 +balustra	balustrer
920 +historicisme	historicisme
921 +Encan	encan
922 +éthiopiens	éthiopien
923 +émietter	émietter
924 +expirée	expirer
925 +récompensait	récompenser
926 +piété	piété
927 +Reformulé	reformuler
928 +aryballes	aryballe
929 +déchant	déchant
930 +RER	RER
931 +transférerait	transférer
932 +poursuivraient	poursuivre
933 +Arrière-Pays	arrière-pays
934 +misérable	misérable
935 +Désinences	désinence
936 +aval	aval
937 +forçant	forcer
938 +fritter	fritter
939 +décollable	décollable
940 +Brouetteur	brouetteur
941 +coloriés	colorier
942 +mendigot	mendigot
943 +gaussa	gausser
944 +thrombosé	thrombosé
945 +ministre-présidente	ministre-président
946 +prothésistes	prothésiste
947 +Imams	imam
948 +aboutissants	aboutissant
949 +Radome	radome
950 +corinthien	corinthien
951 +qualifiez	qualifier
952 +enfermement	enfermement
953 +féline	félin
954 +sanctionnerait	sanctionner
955 +domestiquées	domestiqué
956 +raccommode	raccommoder
957 +paravertébrale	paravertébral
958 +ignorées	ignorer
959 +xanthie	xanthie
960 +bossués	bossuer
961 +contactait	contacter
962 +jalonnaient	jalonner
963 +Notoire	notoire
964 +Niant	nier
965 +feuillardier	feuillardier
966 +Leucite	leucite
967 +désaltéra	désaltérer
968 +Impérialismes	impérialisme
969 +balivernes	baliverne
970 +herpétiques	herpétique
971 +brûlaient	brûler
972 +bouvière	bouvier|bouvière
973 +jaffe	jaffe
974 +propulsèrent	propulser
975 +dépilant	dépiler
976 +contactez	contacter
977 +omnisport	omnisport
978 +coutils	coutil
979 +incarcéreront	incarcérer
980 +effraient	effrayer
981 +salops	salop
982 +Touchons	toucher
983 +biparti	biparti
984 +sûre	sûr
985 +superposées	superposer
986 +roideur	roideur
987 +mulâtresse	mulâtre
988 +front	front
989 +officialisera	officialiser
990 +trilobée	trilobé
991 +trempage	trempage
992 +stationnerait	stationner
993 +extinctif	extinctif
994 +parr	parr
995 +va-vite	va-vite
996 +pelliculées	pelliculé
997 +progéniteurs	progéniteur
998 +concourir	concourir
999 +récusables	récusable
1000 +luttez	lutter
1001 +Coquins	coquin
1002 +mahaleb	mahaleb
1003 +gravèrent	graver
1004 +Pachas	pacha
1005 +alkyles	alkyle
1006 +SYNAPSE	synapse
1007 +étayait	étayer|étayer
1008 +Défini	définir
1009 +haïmes	haïr
1010 +élis	élire
1011 +géologiquement	géologiquement
1012 +Écoutant	écouter
1013 +escalator	escalator
1014 +tombantes	tombant
1015 +farads	farad
1016 +compensons	compenser
1017 +planteraient	planter
1018 +présidentiel	présidentiel
1019 +Réinterprétés	réinterpréter
1020 +persuadaient	persuader
1021 +digères	digérer
1022 +fermentées	fermenter
1023 +acquissiez	acquérir
1024 +mouds	moudre
1025 +accoupla	accoupler
1026 +autodestructeurs	autodestructeur
1027 +inconnaissable	inconnaissable
1028 +Congratulé	congratuler
1029 +viscaria	viscaria
1030 +faustiens	faustien
1031 +cordial	cordial
1032 +tour-opérateur	tour-opérateur
1033 +Briquer	briquer
1034 +Bureaux	bureau
1035 +aquariums	aquarium
1036 +Rogueries	roguerie
1037 +porte-savon	porte-savon
1038 +faisons	faire
1039 +fourra	fourrer
1040 +conspuent	conspuer
1041 +taise	taire
1042 +Déduits	déduit
1043 +Tentacules	tentacule
1044 +procure	procurer
1045 +race	race
1046 +helvétisme	helvétisme
1047 +radioastronomique	radioastronomique
1048 +BOB	Bob
diff --git a/test/test_alignment.py b/test/test_alignment.py
@@ -15,30 +15,45 @@
1049  #
1050  # You should have received a copy of the GNU Lesser General Public License along
1051  # with this program. If not, see <http://www.gnu.org/licenses/>.
1052 
1053  import unittest2
1054 +import sys, os
1055  import random
1056  random.seed(6) ### Make sure tests are repeatable
1057  import numpy as np
1058 +import shutil
1059 +from contextlib import contextmanager
1060 
1061  from os import path
1062 +from tempfile import mkdtemp
1063  from dateutil import parser as dateparser
1064 
1065  from nazca.distances import (levenshtein, soundex, soundexcode,   \
1066                                   jaccard, temporal, euclidean,        \
1067                                   geographical)
1068  from nazca.normalize import (lunormalize, loadlemmas, lemmatized, \
1069                                   roundstr, rgxformat, tokenize, simplify)
1070  import nazca.matrix as am
1071  from nazca.minhashing import Minlsh
1072 -from nazca.dataio import parsefile, autocasted
1073 +from nazca.dataio import parsefile, autocasted, split_file
1074  import nazca.aligner as alig
1075 
1076 
1077  TESTDIR = path.dirname(__file__)
1078 
1079 +@contextmanager
1080 +def tempdir():
1081 +    try:
1082 +        temp = mkdtemp()
1083 +        yield temp
1084 +    finally:
1085 +        try:
1086 +            shutil.rmtree(temp)
1087 +        except:
1088 +            pass
1089 +
1090  class DistancesTest(unittest2.TestCase):
1091      def test_levenshtein(self):
1092          self.assertEqual(levenshtein('niche', 'chiens'), 5)
1093          self.assertEqual(levenshtein('bonjour', 'bonjour !'), 1)
1094          self.assertEqual(levenshtein('bon', 'bonjour'), 4)
@@ -257,10 +272,29 @@
1095          self.assertEqual(autocasted('1,2'), 1.2)
1096          self.assertEqual(autocasted('1,2X'), '1,2X')
1097          self.assertEqual(autocasted(u'tété'), u'tété')
1098          self.assertEqual(autocasted('tété', encoding='utf-8'), u'tété')
1099 
1100 +    def test_split_file(self):
1101 +        NBLINES = 190
1102 +        with tempdir() as outputdir:
1103 +            file2split = path.join(TESTDIR, 'data', 'file2split')
1104 +            files = split_file(file2split, outputdir, nblines=NBLINES)
1105 +
1106 +            alllines = []
1107 +            nbfiles = len(files)
1108 +            for num, localpath in enumerate(sorted(files)):
1109 +                fullpath = path.join(outputdir, localpath)
1110 +                with open(fullpath) as fobj:
1111 +                    lines = fobj.readlines()
1112 +                # All files, except the last one, must be NBLINES-length.
1113 +                if num < nbfiles - 1:
1114 +                    self.assertEqual(len(lines), NBLINES)
1115 +                alllines.extend(lines)
1116 +
1117 +            with open(file2split) as fobj:
1118 +                self.assertEqual(fobj.readlines(), alllines)
1119 
1120  class AlignerTestCase(unittest2.TestCase):
1121 
1122      def test_findneighbours_kdtree(self):
1123          alignset = [['V1', 'label1', (6.14194444444, 48.67)],