Youni Verciti has uploaded a new change for review.
https://gerrit.wikimedia.org/r/279753
Change subject: Rev 0.2.2 Add tools for fr:wv namespaces
......................................................................
Rev 0.2.2 Add tools for fr:wv namespaces
Change-Id: I9dff97af316aecc9c860d8d7b9c496e57d1c2fe2
---
A tools/dpt.py
A tools/fac.py
2 files changed, 219 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/labs/tools/vocabulary-index
refs/changes/53/279753/1
diff --git a/tools/dpt.py b/tools/dpt.py
new file mode 100755
index 0000000..1552607
--- /dev/null
+++ b/tools/dpt.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+### Liste les pages de l'espace de nom "Département" nº 108
+### Liste les Départements dans le fichier local "Départements.csv"
+### Liste les sous-pages. les liens dans leçons par thèmes et leçons par
niveaux
+### Compare les deux liste de liens et les fusionne
+### Verifie si les pages derrière les liens existent
+### Compare le nombre de page d'interface et le nombre de leçons du département
+
+import pywikibot
+lang = 'fr' # prefixe langue
+family = 'wikiversity'
+site = pywikibot.Site(lang, family) # The site we want to run our bot on
+gen_dpt = site.allpages(namespace=108, prefix='p')
+log = ''
+sous_pages = []
+all_sous_pages = [] # DEBUG liste brute des sous_pages
+no_match = []
+data_dpt = {} # [departement] = sous_pages
+curent = u''
+count_all = 0
+for page in gen_dpt:
+ count_all = count_all + 1
+ str_page = str(page) # il faut une chaine
+ if '/' in str_page:
+ all_sous_pages.append(page)
+ prefix = curent[ 0 : -2]
+ if prefix in str_page:
+ sous_pages.append(page) # Incrémente la liste des sous-pages
+ else: # ATTENTION
+ no_match.append(page) # Stock les sous-pages dont le prefix ne
correspond pas
+ log = log + 'Mauvais prefix, '+ str_page + 'n\'est pas une sous-page de
' + str(curent) + '.\n'
+ else: # Pas de separateur donc département
+ departement = page
+ curent = str_page
+ print departement
+ sous_pages = []
+ data_dpt[departement] = sous_pages
+# data_dpt[departement] = sous_pages
+count = 0
+for departement in sorted(data_dpt):
+ count = count + 1
+ print count
+ sous_pages = data_dpt[departement]
+ dpt_params = [sous_pages]
+ list_link_theme = [] # Liste Leçons par Thèmes
+ list_link_niveau = [] # Liste Leçons par Niveaux
+ str_departement = str(departement)
+ theme = str_departement[2:-2] + '/Leçons par thèmes'
+ title = unicode(theme, 'utf-8')
+ page = pywikibot.Page(site, title)
+ exist = page.exists() # Si la page existe
+ if exist:
+ #print 'YES EXIST'
+ gen_lesson_theme = page.linkedPages(namespaces=0) # place les pages liéés
dans un generateur
+ for link_theme in gen_lesson_theme: # chaque element du generateur
+ list_link_theme.append(link_theme) # est stocké dans la liste des leçons
par thèmes
+ dpt_params = [sous_pages, list_link_theme]
+ data_dpt[departement] = dpt_params # la liste est ajoutée au tuple
+ else:
+ log = log + theme + ' NO exist\n'
+ dpt_params = [sous_pages, list_link_theme]
+ data_dpt[departement] = dpt_params
+ niveau = str_departement[2:-2] + '/Leçons par niveaux'
+ title = unicode(niveau, 'utf-8')
+ page = pywikibot.Page(site, title)
+ exist = page.exists()
+ if exist:
+ gen_lesson_niveau = page.linkedPages(namespaces=0) # place les pages liéés
dans un generateur
+ for link_niveau in gen_lesson_niveau: # chaque element du generateur
+ list_link_niveau.append(link_niveau) # est stocké dans la liste des
leçons par
+ dpt_params = [sous_pages, list_link_theme, list_link_niveau]
+ data_dpt[departement] = dpt_params
+ else:
+ log = log + niveau + 'NO exist\n'
+ dpt_params = [sous_pages, list_link_theme, list_link_niveau]
+ data_dpt[departement] = dpt_params
+# LE tuple contient, liste des départements, listes des sous-pages, des leçons
par themes et par niveaux
+
+file_departements_params = open('Départements.csv', 'w') # ouvre le fichier
local en écriture
+line_1 = 'Départements, Sous-pages, Leçons par thèmes, Leçons par niveaux,
Ajouter, Total liens, Page existe, Balance \n'
+file_departements_params.write(line_1)
+#count_sous_pages = 0
+for departement in data_dpt: # chaque departement
+ #count_sous_pages = count_sous_pages + len(sous_pages) # BUG différent du
nombre total de sous-pages
+ dpt_params = data_dpt[departement]
+ [sous_pages, list_link_theme, list_link_niveau] = dpt_params
+ list_link_add = [] # vider à chaque passage
+ list_link_total = [] # vider à chaque passage
+ list_link_exist = [] # vider à chaque passage
+ for link_niveau in list_link_niveau: # chaque leçon par niveau (tester avec
if not)
+ if link_niveau in list_link_theme: # si contenue dans la liste par theme
+ pass
+ else:
+ list_link_add.append(link_niveau) # Sinon ajoute dans la Liste Lien
Additionnel
+ dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add]
+ list_link_total = list_link_theme + list_link_add # Liste des Lien Joints
= leçons par thèmes + par niveaux flitrées
+ dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add,
list_link_total]
+ #data_dpt[departement] = sous_pages, list_link_theme, list_link_niveau,
list_link_add, list_link_total
+ for link in list_link_total:
+ page = link #title #pywikibot.Page(site, title)
+ exist = page.exists() # Si la page existe
+ if exist:
+ list_link_exist.append(link) # Liste des Liens existants (Touched)
+ else:
+ pass
+ dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add,
list_link_total, list_link_exist]
+ balance = len(list_link_exist) - (len(sous_pages) + 1)
+ dpt_params.append(balance)
+ data_dpt[departement] = dpt_params #sous_pages, list_link_theme,
list_link_niveau, list_link_add, list_link_total, list_link_exist, balance
+ csv = '"'+ str(departement) + '", ' + str(len(sous_pages)) + ', ' +
str(len(list_link_theme)) + ', ' + str(len(list_link_niveau) ) + ', ' +
str(len(list_link_add) ) + ', ' + str(len(list_link_total)) + ', ' +
str(len(list_link_exist)) + ', ' + str(balance) + '\n'
+ # Ajouter en en-tête le nombre de pages, sous-pages et total
+ file_departements_params.write(csv) #
+file_departements_params.close()
+print log
+print count_all
+print len(data_dpt)
+print len(all_sous_pages)
+print len(no_match)
diff --git a/tools/fac.py b/tools/fac.py
new file mode 100755
index 0000000..910bedb
--- /dev/null
+++ b/tools/fac.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+########################################################################
+### Création d'une liste de faculté
+### basée sur l'analyse de l'espace de nom "Faculté:" via Pywikibot sur num_id
"106"
+### modifier les var num_id language et api pour obtenir les listes en,de,es,pt
+### le script produit un fichier csv, liste des facultés & départements
associés
+### ATTENTION la page accueil (à déplacere t renommer) et la page Sociologie
(Redirection)
+# voir nb dept Médecine 73 ou 75?
+########################################################################
+
+import pywikibot
+lang = 'fr' # prefixe langue
+family = 'wikiversity'
+site = pywikibot.Site(lang, family) # On obtient très facilement la liste des
pages dans l'espace de nom 106 Faculté via Pywikibot
+gen_fac = site.allpages(namespace=106) #, prefix='a')
+count = 0
+liste_facultes = [] # pages
+liste_sous_pages = [] # sous-pages
+
+for page in gen_fac:
+ str_page = str(page) # il faut une chaine pour re
+ if '/' in str_page: #mosp:
+ liste_sous_pages.append(page) # La liste des sous-pages
+ else:
+ liste_facultes.append(page) # La liste des facultés
+print str(len(liste_facultes)) + ' Facultés\nListe des départements pour
chaque faculté'
+
+fFac = open('Fac.csv', 'w')
+fFac.write('Faculté, Nombre département(s)\n') # Liste des départements
+totalDpt = 0 # Ce total ne tient pas compte des doublons ( 1 dept=> +2 Fac)
+
+data_fac = {} # key = faculté ; value = fac_params
+for faculte in liste_facultes: # pour chaque faculté
+ fac_params = [] # liste contenanat celle des departements (gen_dpt) puis
nombre_departement
+ sous_page_fac = [] # Liste les sous_pages de chaque faculté dans ns
+ str_faculte = str(faculte)
+ str_faculte = str_faculte[0:-2] + '/' # tronque les crochets fermants et
Ajoute le separateur
+ for sous_page in liste_sous_pages: # Attribue les sous-pages sur la base
du prefix
+ str_sous_page = str(sous_page) #
+ if str_faculte in str_sous_page: # en comparant les deux chaines
+ sous_page_fac.append(sous_page) # Pas d'autre verification...
+ fac_params.append(sous_page_fac) # Affecte la liste sp_fac comme
premier elemnt de liste fac_params
+ gen_dpt = faculte.linkedPages(namespaces=108)
+ fac_params.append(gen_dpt)
+ nombre_departement = 0 # Initialise le compteut de département
+ texte = ''
+ for departement in gen_dpt: # Pour chaque lien dans le generateur PWB
+ nombre_departement = nombre_departement + 1 # Compte les départements
+ #texte = (texte + str(departement) + ' ; ') # ATTENTION impression
liste des departements désactivé
+ ### Pour enregistrer localement coder les chaines en string!
+ fac_params.append(nombre_departement) # Le nombre de dṕartement par faculté
+ data_fac[faculte] = fac_params
+ nb_sous_page = len(sous_page_fac)
+ s_nb_sp = str(nb_sous_page)
+ texte = str(nombre_departement) + ', ' + s_nb_sp
+ fFac.write(str(faculte) + ', ' + texte + '\n') # Imprime une faculté,
nb_departement, nb sous-page
+ ### Imprimer une liste supplémentaire
+ ### titre de la page = ../Liste des départements par faculté
+ ### == Faculté ==
+ ### * Departement 1
+ ### * Departement 2...
+ totalDpt = totalDpt + nombre_departement
+ print nombre_departement
+fFac.close()
+print str(totalDpt) + ' dept répartis dans les facultés'
+# data_fac[faculte] = fac_params (sous_page_fac, gen_dpt, nombre_departement)
+
+### Pour obtenir le nombre departements, les facultés associées et leur nombre
+### Nous inversons le dictionnaire (Liste des facultés par département)
+dpt_fac = {} # Tuple invere
+for page in data_fac: # Pour Chaque faculté
+ fac_params = data_fac[page] # une liste de parametres
+ [sous_page_fac, gen_dpt, nombre_departement] = fac_params # Liste des
parametre deja dans le tuple
+ for departement in gen_dpt: # pour chaque departement dans cette faculté
+ if not departement in dpt_fac: # Si le departement n'est pas dans le
tuple inverse
+ l_fac = [] # Initialise Liste des faculté pour ce departement
+ l_fac.append(page) # Ajoute la faculté dans la liste
+ dpt_fac[departement] = l_fac # enregistre clé valeur dans le tuple
invers
+ else: # Le departement est deja dans le tuple inverse
+ l_fac = dpt_fac[departement] # Recupere la liste
+ l_fac.append(page) # Ajoute la faculté dans la liste
+
+f_dpt_fac = open('dpt_fac.csv', 'w')
+f_dpt_fac.write('Departement, Nombre Faculté(s), Liste des Facultés\n')
+for dpt in dpt_fac:
+ l_fac = dpt_fac[dpt]
+ nb_fac_dep = len(l_fac)
+ dpt_params = [nb_fac_dep, l_fac]
+ dpt_fac[dpt] = dpt_params
+ texte = '"' + str(dpt) + '", ' # + str(len(l_fac)) + ', '
+ print_fac = ''
+ for fac in l_fac:
+ print_fac = print_fac + str(fac) + ' - '
+ f_dpt_fac.write(texte + str(nb_fac_dep) + ', ' + print_fac + '\n')
+f_dpt_fac.close()
+print len(dpt_fac)
+### Imprimer le tableau directement dans une page distincte
+### titre page = ../Liste des facultés par département
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/279753
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9dff97af316aecc9c860d8d7b9c496e57d1c2fe2
Gerrit-PatchSet: 1
Gerrit-Project: labs/tools/vocabulary-index
Gerrit-Branch: master
Gerrit-Owner: Youni Verciti <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits