# coding: utf-8
# Auteurs : Yagmur Ozturk, Oscar Moreno. En nous inspirant du script de Corentin Vialar 2020
# Fonction : Ce script prend en entrée une fichier comportant le tagage en POS format XML, 
#un fichier comportant les suites de patrons à trouver et il renvoie en sortie un fichier txt avec 
#les résultats de la recherche. 
import sys, os, re
from lxml import etree 


# extraction  des contenus textuelles
# On parcours l'arborescence et on crée deux liste, une avec le POS et une autre avec le contenu texuel
# Si on rencontre une POS comportant ":" on le divise et on ne prend que l'indice 0
def extract_xml(nom_file):

	tree = etree.parse(nom_file)
	list_text, list_pos = [], []
	for a in tree.xpath("//data[@type='type']"):
		txt = a.text
		if ":" in txt:
			twt = (txt.split(":"))[0]
			list_pos.append(twt)
		else:
			list_pos.append(txt)
	for a in tree.xpath("//data[@type='string']"):
		list_text.append(a.text)
	return [(list_text[x], list_pos[x]) for x in range(len(list_text))]
	
# Traitement des listes en tenant compte du pratron recherché

def obt_patron(pat, text_pos):
	resultat_patrons = []
	for i in range(len(text_pos)):
		if (text_pos[i][1] == pat[0]) and (i + len(pat) <= len(text_pos)): 
			if (pat == [text_pos[y+i][1] for y in range(len(pat))]): 
				found_pat = " ".join([text_pos[i+y][0] for y in range (len(pat))])
				resultat_patrons.append(found_pat)
	
	return resultat_patrons
#ecriture du résultat dans un fichier
def ecrire_txt(contenu_patrons, output):
	with open(output, "a") as f:
		for items in contenu_patrons:
			f.write("{}\n".format(items))


#traitement des arguments et consolidation du fichier sortie.
patron_file = sys.argv[2]
tt_file = sys.argv[1]
text_pos = extract_xml(tt_file)
with open (patron_file, "r") as f:
	file = f.readlines()
	for line in file:
		patron = line.split(" ")
		suite_patrons = obt_patron(patron,text_pos)
		ecrire_txt(suite_patrons,"extraction_patron_tout.txt")




