#!/usr/bin/env python
import sys
import re
from collections import Counter

#-----------------------------------------------------------
#Auteur : Santiago HY
#Usage exemple : python BaO3-dep.py fichier-udpipe.xml "NOUN ADJ"
#Le programme prend en entrée le fichier étiqueté par UDpipe dans sa forme xml, le nom du fichier de sortie et la relation de dépendance
#-----------------------------------------------------------
#argv[1] = fichier d'entrée
#argv[2] = fichier de sortie
#argv[3] = pattern 
#-----------------------------------------------------------

# Lecture d'un fichier pour stocker chaque ligne dans une liste "lines"
with open (sys.argv[1], encoding="utf-8") as file: lines = file.readlines()

# Ouverture du fichier de sortie
output = open(sys.argv[2], 'w', encoding='utf-8')

# Liste avec chaque élément du pattern de POS
pattern = re.split(r"[_\W]+",sys.argv[3])

pos_list = []
tokens_list = []
extractions_list = []

# On parcourt la liste de lignes et si celle-là a du contenu textuel, on l´extrait dans une liste de tokens et dans une liste de POS. 
for line in lines:
	if re.match(r"^\d+\t", line):
		line = line.split("\t")
		tokens_list.append(line[1])
		pos_list.append(line[3])

# On parcourt toute la longueur de la liste de POS
for i in range(len(pos_list)):
	# Si la séquence de POS de la même longueur que le pattern est égale au pattern, on récupérer la séquence de POS.
	if pos_list[i:i+len(pattern)] == pattern[:len(pattern)]:
		extractions_list.append(" ".join(tokens_list[i:i+len(pattern)]).lower())
		#output.write(" ".join(tokens_list[i:i+len(pattern)]) + "\n")

# A partir d'un dictionnaire "Counter", on calcule le nombre d'occurrences et on trie le résultat.
extractions_count = Counter(extractions_list)
for key, value in sorted(extractions_count.items(), key=lambda x: x[1], reverse=True):
	output.write("{} {}\n".format(value,key))

output.close()
