Branches de langues et arborescence

Fermé
RidaNafir - 8 nov. 2019 à 14:41
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 8 nov. 2019 à 22:24
Bonjour,
j'ai le code suivant pour traiter les branches des langues et j'ai eu des résultats avec des dupliques. voici le code que j'ai fait :
from bs4 import BeautifulSoup
import json
import os

"""Trouver les langues d'une branche"""
#variables
os.chdir("projet_Embarki/Embarki-Data/")
directory_name = "projet_Embarki/Embarki-Data/Branches/"
listBranches = os.listdir("Branches/")
file1=open("text.txt","w")
os.chdir("Branches/")
dico={}
for i in listBranches:
soup=BeautifulSoup(open(i).read(),"lxml")
finder=soup.find_all("a")
dico[i.replace(".html","")]={j.string for j in finder if j["href"].endswith("html")}
dico2={}
for i,j in dico.items():
for a,b in dico.items():
if j.issubset(b) and a!=i:
#print(i,a)
if a not in dico2:
dico2[a]=[i]
else: dico2[a].append(i)
dico3={}
for i,j in dico2.items():
dico3[i]=[{a:list(dico[a]) for a in j}]
file1.write("%s\n"%(i))
for k in j:
file1.write("\t%s\n\t\t%s\n"%(k,"\n\t\t".join(dico[k])))
os.chdir("..")
monFichier= open("branches.json", "w")
json.dump(dico3,monFichier)
monFichier.close()
file1.close()

comment je peut supprimer les résultats répétés sans avoir un résultats faux ?
voici un exemple de mon résultats :
Austronesian
Oceanic
HAWAIIAN
Oceanic
Austronesian
HAWAIIAN
East Malayo-Polynesian
Austronesian
HAWAIIAN
Oceanic
HAWAIIAN
merci :)



Configuration: Windows / Chrome 77.0.3865.120

3 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 nov. 2019 à 14:50
Bonjour,

Essayer de comprendre un code Python présenté sans les indentations, c'est complètement vain.
Pourriez-vous modifier votre message pour utiliser les balises <code python > afin d'avoir la coloration syntaxique ? (Les balises doivent encadrer le code source, et on les trouve sur le bouton à côté des boutons de mise en forme B I S au dessus de la zone de saisie)

Merci,

Xavier
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
8 nov. 2019 à 16:38
bonjour, pourrais-tu donner des noms explicites à tes variables, ajouter des commentaires pour expliquer ce que tu penses que ton programme fait, et ajouter des print() pour vérifier et nous montrer ce que fait ton programme?
le résultat que tu donnes en exemple, est-ce le contenu d'un fichier? si oui, lequel?
peux-tu également donner le contenu des fichiers lus par ton programme?
0
<gras>Bonjour, en fait ma mission est de normaliser une liste de langues et de branches de langues qui prennent le format html, il prend chaque langue et il la met sous la branche elle appartient, sauf que j'ai pas mal de cas où une langue se répete plusieurs fois sous plusieurs branches différentes : par exemple supposant que le programme m'affiche que le Français appartient à la famille indoueuropéénne et la famille sémitique aussi ce qui est faux. j'arrive pas a modifier dans ce code afin qu'il élémine les réseultats dupliqués et me rend un résultats correcte. j'ai fait le code suivant :


from bs4 import BeautifulSoup
import json
import os

"""Trouver les langues d'une branche"""

<os.chdir("projet_Embarki/Embarki-Data/") # le dossier qui contient les fichiers html
directory_name = "projet_Embarki/Embarki-Data/Branches/"
listBranches = os.listdir("Branches/")
file1=open("text.txt","w")
os.chdir("Branches/")
dicctionnaire={}
for i in listBranches:
soup=BeautifulSoup(open(i).read(),"lxml")
finder=soup.find_all("a")
dictionnaire[i.replace(".html","")]={j.string for j in finder if j["href"].endswith("html")} # ce code est pour trouver un fichier qui s'appelle (href) et le modifier par un fichier que son nom se termine par html (pour que le programme puisse le trouver)
dictionnaire2={}
for i,j in dicctionnaire.items():
for a,b in dicctionnaire.items():
if j.issubset(b) and a!=i:
#print(i,a)
if a not in dicctionnaire2:
dicctionnaire2[a]=[i]
else: dicctionnaire2[a].append(i)
dictionnaire3={}
for i,j in dicctionnaire2.items():
dicctionnaire3[i]=[{a:list(dico[a]) for a in j}]
file1.write("%s\n"%(i))
for k in j:
file1.write("\t%s\n\t\t%s\n"%(k,"\n\t\t".join(dicctionnaire[k])))
os.chdir("..")
monFichier= open("branches.json", "w")
json.dump(dicctionnaire3,monFichier)
monFichier.close()
file1.close()
 />


en fin j'ai eu un réslutat comme suite :
Austronesian : # branche de langue qui contient :
Oceanic : #sous branche qui contient :
HAWAIIAN : #langue
Oceanic: # ici il considere cette sous branche comme une branche:
Austronesian : #le contraire du 1er resultat
HAWAIIAN: #langue
East Malayo-Polynesian: #une branche
Austronesian: #sous branche
HAWAIIAN : une langue
Oceanic: #branche
HAWAIIAN : #cette langue par ex se répète pour la 4eme fois
aidez moi svp et j'espère que j'ai bien expliqué !!
<code><code>
</code></code>
merci :)
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
8 nov. 2019 à 22:17
comme tu peux le voir, le code que tu as posté est illisible. tu n'as pas correctement utilisé les balises de code.
tu n'as que très partiellement appliqué mes suggestions en #2.
0
Désolé je ne maîtrise pas les codes dans ce site je vais essayer de poster des captures d'écran si possible merci
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Ridanafir
8 nov. 2019 à 22:24
je te suggère de prendre le temps de maîtriser les balises de code sur ce site.
tu n'as que très partiellement appliqué mes suggestions en #2.
0