#-------- Importation des modules utilisé pour le BAO-2 et pour le rubrique c'est 3476 "Cinema" --------- import re, sys, spacy_udpipe from pathlib import Path udpipe = spacy_udpipe.load("fr-sequoia") # RegEx pour checher le titre et le description regex_item = re.compile("(.*?)<\/title>.*?<description>(.*?)<\/description>") #--------------Sous-Programme-Nettoyage---------------- # nettoyage du texte pour se debarasser des balaises et d'avoir un texte propore def nettoyage(texte): texte_net = re.sub("<!\[CDATA\[(.*?)\]\]>", "\\1", texte) return texte_net #--------------Sous-Programme-Anaylse_TXT-------------- # Analyser le texte pour avoir la forme, le lemma et le POS # pour chaque token du texte. def analyse_txt(texte): # On analyse le texte par UDpipe doc = udpipe(texte) # Chaine vide pour stocker le resultat result="" for token in doc: result += f"{token.text}\t{token.lemma_}\t{token.pos_}\n" # Stockage de la forme, le lemma et le POS pour chaque token return result # Renvoie le resultat #--------------Sous-Programme-Token2XML-------------- # Stockage de la forme, le lemma et le POS pour chaque token dans les balises XML def token2xml(token): return f'<element><data type="type">{token.pos_}</data><data type="lemma">{token.lemma_}</data><data type="string">{token.text}</data></element>\n' #--------------Sous-Programme-Anaylse_XML-------------- # Stockage des tokens avec sa forme, POS, Lemme dans les balise XML def analyse_xml(texte): doc = udpipe(texte) result="" for token in doc: result+=token2xml(token) # Formatage des tokens dans les balises XML return result #--------------Sous-Programme-Extraction_de_Fil-------------- # Extraction des titres et descriptions d'un fichier RSS, argument-1: Fichier RSS, 2: Fichier XML, 3: Fichier TXT def extract_un_fil(fichier_rss, output_xml, output_txt): with open(fichier_rss, "r") as input_rss: # Ouverture de fichier RSS en mode lecture. lignes=input_rss.readlines() # Lire le ficher ligne par ligne texte="".join(lignes) # Jointure des lignes for m in re.finditer(regex_item, texte): titreNet = nettoyage(m.group(1)) # Netoyer le titre et le stocker comme titreNet # 0 correspond à l'intégralité et 1 correspond au premier groupe de parenthèses du match. descriptionNet = nettoyage(m.group(2)) # Netoyer la description et le stocker comme descriptionNet # On fait passer le titreNet et descriptionNet dans la fonctionne "analyse_txt" et on les stock dans le fichier TXT et XML avec des balises output_txt.write(analyse_txt(titreNet)), output_txt.write(analyse_txt(descriptionNet)) output_txt.write("#-------------------------------#\n") output_xml.write(f"<item><titre>\n{analyse_xml(titreNet)}</titre><description>\n{analyse_xml(descriptionNet)}</description></item>\n") #--------------Sous-Programme-Parcours-------------- # La fonction parcours prend en arguments-1: le chemin, 2: Fichier XML, 3: Fichier TXT, 4: Numéro de rubrique qu'est 3476 "Cinema" def parcours(dossier:Path, fichier_xml, fichier_txt, rubrique): print(f"On traite {dossier}") for sub in sorted(dossier.iterdir()): if sub.is_dir(): # Verification du dossier parcours(sub, fichier_xml, fichier_txt, rubrique) if sub.is_file() and sub.name.endswith(".xml") and rubrique in sub.name: # Verification du fichier XML print(f"On appelle extract_un_fil sur {sub}") extract_un_fil(sub, fichier_xml, fichier_txt) #--------------Sous-Programme-main-------------- def main(): # Poru lancer le scrpt avec de parametres dans le terminal. dossier = Path(sys.argv[1]) # Assigner le ARGV rubrique=sys.argv[2] with open("annotationUD"+rubrique+".xml", "w") as fichier_xml: # Ouverture de fichier XML et TXT en mode écriture with open("annotationUD"+rubrique+".txt", "w") as fichier_txt: fichier_xml.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n") # Creation de balise corpus dans le fichier XML parcours(dossier, fichier_xml, fichier_txt, rubrique) # Ecriture dans le fichier XML et TXL fichier_xml.write("</corpus>\n") # Fermeture de balise corpus dans le fichier XML #--------------Lancement des Sous-Programmes-------------- # Lancement de fonctionne "main" if __name__=="__main__": main()