Discussion utilisateur:Orlodrim/OrikriBot

Archivage automatique des sections traitées modifier

« La discussion n'est pas close, il reste encore un programme à réaliser : celui de l'archivage automatique des sections traitées. La rapidité de Liny surpassera-t-elle la stratégie d'Orlodrim ? Ce script reste à étudier ! »

— Orikrin1998

Ok, allons-y donc ! On peut commencer par une fonction qui teste si une section est traitée, à partir du texte de la section. As-tu des idées pour faire cela ? Orlodrim [discuter] 5 avril 2013 à 22:34 (CEST)Répondre

Je ne m'y connais pas assez pour te donner la voie, mais j'imaginais que Python pouvait vérifier si l'espace entre la section
{{En-tête section PàS|' + str(dayNum)+ '|' + month[monthNum - 1] + '|' + str(year) + '}}'
et la boîte déroulante
{Boîte déroulante/début|titre=Requêtes traitées}}
était vide, moyennant un script complexe qui pourrait être mis en échec par la présence éventuelle de sauts à la ligne superflus, voire hyperflus, ou justement par la non présence de ces sauts...Cette fonction impliquerait, il me semble, un codage similaire à ce bloc du programme actuel d'OrikriBot :
        delimiter = u'= <small>Avertissements</small> =\n'
        pageTempBegin, pageTempEnd = pageTemp.split(delimiter) 
        pageTempEnd = delimiter + pageTempEnd
--Orikrin1998 (+) blablatoir 6 avril 2013 à 13:47 (CEST)Répondre
Ok. Regarder le texte entre l'en-tête et la boîte déroulante est une bonne idée. Admettons que tu as extrait ce texte dans une variable.
Comme tu l'as dit, tester si ce texte est complètement vide ou non ne serait pas très fiable. As-tu quelque chose de plus sûr ?
Orlodrim [discuter] 6 avril 2013 à 15:00 (CEST)Répondre
Le faire dans le sens inverse, c'est-à-dire vérifier si le nombre de lignes dans la boîte déroulante est égal au nombre de lignes qu'il y avait hors de la boîte, le soir du jour qu'elle prend en compte, à 23:59...Je n'ai rien trouvé de mieux, et là on rentre vraiment dans un code complexe. --Orikrin1998 (+) blablatoir 6 avril 2013 à 15:09 (CEST)Répondre

Je pensais à quelque chose de beaucoup plus simple. Mais je suis sûr que ce sera un meilleur entraînement si tu trouves l'idée  . Voilà trois exemples de texte qu'il pourrait y avoir entre l'en-tête et la boîte :

Exemple 1 :

*{{L|Masanori Akita}} (musicien)
*{{L|Olivier Moinnet}} (homme politique)

Exemple 2 :


Exemple 3 :

* {{L|Nancy L. Green}} (sociologue) 
* {{L|Sonia Dayan-Herzbrun}} (philosophe et sociologue)

Exemple 4 :






Quel critère utiliser pour distinguer :

  • d'une part, les cas (1) et (3) où il reste des pages
  • d'autre part, les cas (2) et (4) où il n'y a plus rien ? — Le message qui précède, non signé, a été déposé par Orlodrim (discuter) On s'en doute mais bon...
C'est une histoire de regex j'imagine. Voilà ce que je dirais :
  • pour le relevé des cas 1 et 3 :
     * \{\{(l|L)\|[^\]]+\}\} *(\s|\([^\]]+\))
    
  • pour le relevé des cas 2 et 4 :
    \n+
    
--Orikrin1998 (+) blablatoir 6 avril 2013 à 18:19 (CEST)Répondre
Parfait. En fait, il suffit de la première regexp (tu testes si elle est dans le texte. Si oui, c'est pas vide. Sinon, c'est vide). Ce n'est pas vraiment utile de regarder dans la regexp ce qu'il y a après l'ouverture du modèle {{L}}, donc tester juste
\* ?\{\{(l|L)\|
devrait marcher.
Maintenant, si tu as une variable texte_section qui contient tout le code wiki d'une section, boîte déroulante comprise, comment extraire ce qu'il y a avant "{{Boîte déroulante" ?
Voilà une liste de fonctions que tu peux utiliser (oui, je repompe à peu près ce que j'ai écrit à Hawk-Eye  )
# Recherche de sous-chaîne
'abcccbd'.find('a')    # la première occurrence de 'a' dans 'abcccbd' est en position 0
>>> 0
'abcccbd'.find('cc')   # la première occurrence de 'cc' dans 'abcccbd' est en position 2
>>> 4
'abcccbd'.find('b', 2) # la première occurrence de 'b' dans 'abcccbd' après les deux premiers caractères est en position 5
>>> 5
'abcccbd'.find('ac')   # sous-chaîne 'ac' n'existe pas dans 'abcccbd'
>>> -1
# Découpage
'abcccbd'.split('b')   # découpe la chaîne en tableau en utilisant 'b' comme délimiteur.
>>> ['a', 'ccc', 'd']
'abcccbd'.split('b')[0]
>>> 'a'
'abcccbd'.split('b')[1]
>>> 'ccc'
# Extraction d'une sous-chaîne
'abcccbd'[0]
>>> 'a'
'abcccbd'[1]
>>> 'b'
'abcccbd'[:3]
>>> 'abc'
'abcccbd'[1:3]
>>> 'bc'
'abcccbd'[-1]
>>> 'd'
'abcccbd'[-2]
>>> 'b'
'abcccbd'[-2:]
>>> 'bd'
# Longueur
len('abcccbd')
>>> 7

Orlodrim [discuter] 6 avril 2013 à 19:07 (CEST)Répondre

Du moment qu'on entre là-dedans, je ne comprends rien.  
Que suis-je censé faire ?   --Orikrin1998 (+) blablatoir 6 avril 2013 à 20:17 (CEST)Répondre
Alors en découpant en sous-étapes, ça peut donner :
  1. Trouver la première occurrence de '{{Boîte déroulante' dans texte_section
  2. Extraire ce qui se trouve avant '{{Boîte déroulante', c'est-à-dire la sous-chaîne de texte_section correspondant au segment [0:la position trouvée à l'étape 1].
  3. Chercher ton expression régulière dans le texte extrait à l'étape 2.
Pour le (1) et (2), tu peux utiliser les exemples au-dessus. Orlodrim [discuter] 9 avril 2013 à 22:03 (CEST)Répondre
Hum, admettons. Je t'avoue que je suis un peu perdu, et je me demande pourquoi tu fais durer ; je pense que je comprendrai quand le script sera fait. Néanmoins, j'apprécie tes efforts.
Je t'annonce également que Linedwell a l'intention de travailler sur ce programme (j'ai un peu l'impression, désagréable, d'être votre chef).
Amicalement, --Orikrin1998 (+) blablatoir 10 avril 2013 à 11:26 (CEST)Répondre
Comme je l'avais dit au début, je ne te fournirai pas de script prêt à l'emploi. Je peux te guider pour que tu y parviennes, ce qui m'intéresse est que tu comprennes comment écrire un tel script et que tu puisses te débrouiller ensuite. À toi de décider : tu veux continuer ou Linedwell écrit le programme ? Orlodrim [discuter] 11 avril 2013 à 01:12 (CEST)Répondre

Orlodrim, je suis sincèrement désolé de te l'annoncer, mais Linedwell a déjà écrit mon script. Je n'ai donc plus besoin de ton aide. Je suis navré que celui qui fasse le plus d'efforts aboutisse au plus petit résultat, mais sache que je les respecte et que j'ai apprécié les moments passés avec toi sur cette page. Si j'ai un problème avec le python, je me dirigerai vers toi avant quiconque. Merci encore.

  Une récompense de compensation pour avoir déçu tes peines ici. Aucun effort n'est inutile ! Merci d'y avoir cru.

--Orikrin1998 (+) blablatoir 12 avril 2013 à 14:06 (CEST)Répondre

Retour à la page de l’utilisateur « Orlodrim/OrikriBot ».