#!/bin/bash
# Réduit un texte à une $classes de mots
# avec $1 : texte, $2 : nom du dossier / texte source, $3 : "log" ou rien.

# chemin de travail
work=$PWD
pwd=$PWD
txt="$1"
name="$2"
log="$3"

if [ "$name" == "log" ]
then
	name=""
	log="log"
fi

# param1 : texte à classer
if [ -d "$txt" ]
then
	txt=/home/hulin/Desktop/analyse_biophar/notes-reduit
fi


# param2 : nom du dossier de travail
if [ -d "$name" ]
then
	name=txt
	classes=classes-$(echo "$name" | sed -e "s/\///g" -e "s/\.//g")
else
	classes=classes-$(echo $name | sed -e "s/\.\.\///g" -e "s/\///g")
fi
echo "CLASSES : $classes"
echo "NAME :  $name"
# prépare le dossier de travail '$classes'


# mais txt doit comporter son chemin !
test=$(echo $txt | sed -e "s/\///g")
if [ "$test" = "$txt" ]
then
	txt=$pwd/$txt
fi

# retrouve le chemin du fichier au besoin
if [ -f $txt ]
then
	cp $txt ../cp_txt -f
else
	txt=$pwd/$txt
	cp $txt ../cp_txt -f
fi

# param2 : journalisation
if [ -n log ]
then
	if [ -f log ]
	then
		rm log
	fi
fi

if [ -d "$work/$classes" ]
then
	if [ -f log ]
	then
		echo "mv "$work/$classes" "$work/$classes.$(date +%F.%H.%M.%S)""
# 		echo "mkdir $work/$classes"
	fi
	mv "$work/$classes" "$work/$classes.$(date +%F.%H.%M.%S)"
fi
mkdir $work/$classes

cd $work/$classes

# convertit le texte avec une phrase par ligne
cat $txt | erg-phrases  > tmp_lignes

# convertit le texte en une tmp_liste de mots, avec et sans occurences
cat tmp_lignes  | erg-mots | uniq  -ic | sort -nr  > tmp_liste-occ
cat tmp_liste-occ | erg-suppr_num > tmp_liste
# cat tmp_listecode

# boucle de production de $classes tant que tmp_liste est non vide
while [  -s tmp_liste ]
do
	
	# lit le premier mot de la tmp_liste
	mot="$(cat tmp_liste | head -n 1 )"

	# log
	actuel=$(wc -l tmp_liste | cut -f1 -d " ") 
	echo -e "\n# Classe '$mot' faite de $actuel mots ($mot.tmp_liste-before)"
	
	# test d'erreur
	if [ -f $mot-suppr_occ ]
	then
		echo "# ERREUR : classe déjà formée !"
		exit
	fi

	# lit les lignes qui contiennent ce mot
	cat tmp_lignes | grep -wi "$mot" > tmp_mot_voc

	# log
	#echo -e "\n# cat tmp_lignes | grep -wi '$mot' > tmp_mot_voc" >> log2
	#echo -e "\ncat tmp_lignes | grep -wi '$mot' > tmp_mot_voc"
	#cat tmp_lignes | grep -wi $mot  >> log2
	
	# crée la classe des mots ainsi obtenue
	
	# 1 Dresse la liste des mots à supprimer
	cat tmp_mot_voc | erg-mots | uniq  -i | sort -nr > $mot-suppr_list
# 	# cat tmp_mot_voc | erg-mots | uniq  -ic | sort -nr > $mot-suppr_occ

	# 2. Récupère les occurences issues du fichier total
	cat $mot-suppr_list | while read l
	do
		echo "$(cat tmp_liste-occ |  grep " $l$" )" >> $mot-suppr_occ
		# LOG : cat $mot-suppr_occ | tail -n 1
	done

	# log
	suppr=$(wc -l $mot-suppr_list | cut -f1 -d " ")
	echo "# À supprimer ($mot-suppr_list) : $suppr mots."
	echo "# Il doit donc rester $[ $actuel - $suppr ] mots."

	# backup pour debug
	cp tmp_liste $mot.tmp_liste-before
	cp tmp_lignes $mot.tmp_lignes-before
	cp tmp_mot_voc $mot.tmp_mot_voc

	# REDUCTION
	# supprime de la tmp_liste la classe des mots obtenue dans $mot-suppr_list

	# log
	echo "erg-reduc $mot.tmp_liste-before $mot-suppr_list >  tmp_backup-liste."

	# 3. Suppression des mots classés de la liste
	erg-reduc tmp_liste $mot-suppr_list  >  tmp_backup-liste

	# log
	echo "erg-reduc $mot.tmp_lignes-before $mot-suppr_list >  tmp_backup-liste."

	# 4. Suppression des mots classés des lignes
	erg-reduc tmp_lignes $mot-suppr_list  >  tmp_backup-lignes

	# backup après
	cp tmp_backup-liste $mot.tmp_liste-after
	cp  tmp_backup-lignes $mot.tmp_lignes-after

	# log
	echo "# Il reste (tmp_backup-liste) $(wc -l  tmp_backup-liste| cut -f1 -d " ") mots."

	# 5. les tmp_lignes et tmp_listes des mots réduits deviennent ceux à réduire
	cat  tmp_backup-lignes > tmp_lignes
	cat  tmp_backup-liste > tmp_liste
done

mv tmp_liste tmp_liste.bak
# Nettoyage
if [ -n log ]
then
	echo "# Fichiers à supprimer : \c"
fi
ls | grep  -v "_occ" | while read file
do

	if [ -n log ]
	then
		echo -e " $file \c"
	fi
	rm "$file"
done
if [ -n log ]
then
	echo "."
fi
# optionnel :
erg-fusion-total
# erg-vide_historiques

cd $pwd