qualiwiki/wiki_compare/CHANGES_DEADEND_PAGES.md

7.6 KiB

Ajout de la fonctionnalité de suivi des pages "France" sans catégorie

Description

Cette fonctionnalité permet de suivre les pages du wiki OpenStreetMap commençant par "France" qui n'ont pas de catégorie (pages sans issues). Ces pages sont identifiées à partir de la liste des "DeadendPages" du wiki OSM. La fonctionnalité suggère également des catégories pour ces pages et suit leur évolution lorsqu'elles sont catégorisées.

Modifications apportées

1. Ajout de constantes dans wiki_compare.py

WIKI_DEADEND_PAGES_URL = "https://wiki.openstreetmap.org/w/index.php?title=Special:DeadendPages&limit=500&offset=1000"
DEADEND_PAGES_FILE = "deadend_pages.json"

2. Ajout de la fonction suggest_categories dans wiki_compare.py

Cette fonction analyse le titre et le contenu d'une page pour suggérer des catégories pertinentes :

def suggest_categories(page_title, page_url):
    """
    Suggest categories for an uncategorized page based on its title and content
    
    Args:
        page_title (str): Title of the page
        page_url (str): URL of the page
        
    Returns:
        list: List of suggested categories
    """
    # Logique de suggestion de catégories basée sur le titre et le contenu de la page

3. Ajout de la fonction fetch_deadend_pages dans wiki_compare.py

Cette fonction récupère les pages commençant par "France" depuis la liste des DeadendPages :

def fetch_deadend_pages():
    """
    Fetch pages starting with "France" from the DeadendPages list
    
    Returns:
        list: List of dictionaries containing page information
    """
    # Logique de récupération des pages depuis la liste des DeadendPages
    # Filtrage des pages commençant par "France"
    # Suggestion de catégories pour chaque page

4. Modification de la fonction main dans wiki_compare.py

Ajout d'une section pour traiter les pages sans catégorie et suivre leur évolution :

# Fetch pages starting with "France" from the DeadendPages list
deadend_pages = fetch_deadend_pages()

if deadend_pages:
    # Load existing deadend pages data to compare with history
    existing_data = load_json_data(DEADEND_PAGES_FILE)
    
    # Initialize history if it doesn't exist
    if 'history' not in existing_data:
        existing_data['history'] = {}
        
    # Get the most recent history entry
    sorted_timestamps = sorted(existing_data.get('history', {}).keys())
    previous_pages = []
    if sorted_timestamps:
        latest_timestamp = sorted_timestamps[-1]
        previous_pages = existing_data['history'][latest_timestamp].get('pages', [])
    
    # Find pages that were in the previous list but are no longer in the current list
    previous_urls = [page['url'] for page in previous_pages]
    current_urls = [page['url'] for page in deadend_pages]
    
    categorized_pages = []
    for url in previous_urls:
        if url not in current_urls:
            # Find the page in previous_pages
            for page in previous_pages:
                if page['url'] == url:
                    # This page is no longer in the DeadendPages list, which means it has been categorized
                    categorized_pages.append(page)
                    break
    
    # Create a timestamp for the current data
    current_timestamp = datetime.now().isoformat()
    
    # Create the history entry
    history_entry = {
        'pages': deadend_pages,
        'categorized_pages': categorized_pages
    }
    
    # Add the entry to history with timestamp as key
    existing_data['history'][current_timestamp] = history_entry
    
    # Update the current data
    existing_data['pages'] = deadend_pages
    existing_data['categorized_pages'] = categorized_pages
    existing_data['last_updated'] = current_timestamp
    
    # Save the updated data
    save_to_json(existing_data, DEADEND_PAGES_FILE)

5. Modification du contrôleur WikiController.php

Ajout du chargement des données des pages sans catégorie :

// Load deadend pages (pages starting with "France" from the DeadendPages list)
$deadendPages = [];
$categorizedPages = [];
$deadendPagesFile = $this->getParameter('kernel.project_dir') . '/wiki_compare/deadend_pages.json';
if (file_exists($deadendPagesFile)) {
    $deadendPagesData = json_decode(file_get_contents($deadendPagesFile), true);
    if (isset($deadendPagesData['pages']) && is_array($deadendPagesData['pages'])) {
        $deadendPages = $deadendPagesData['pages'];
    }
    if (isset($deadendPagesData['categorized_pages']) && is_array($deadendPagesData['categorized_pages'])) {
        $categorizedPages = $deadendPagesData['categorized_pages'];
    }
}

Ajout des données à la vue :

return $this->render('admin/wiki.html.twig', [
    // Autres données...
    'deadend_pages' => $deadendPages,
    'categorized_pages' => $categorizedPages
]);

6. Ajout de sections dans le template admin/wiki.html.twig

Ajout d'une section pour afficher les pages sans catégorie :

{% if deadend_pages is defined and deadend_pages|length > 0 %}
    <div class="card mb-4">
        <div class="card-header bg-danger text-white">
            <h2>Pages "France" sans catégorie ({{ deadend_pages|length }})</h2>
        </div>
        <div class="card-body">
            <p>Ces pages wiki commençant par "France" n'ont pas de catégorie. Vous pouvez contribuer en ajoutant des catégories à ces pages.</p>
            <div class="table-responsive">
                <table class="table table-striped table-hover">
                    <!-- Contenu de la table -->
                </table>
            </div>
        </div>
    </div>
{% endif %}

Ajout d'une section pour afficher les pages récemment catégorisées :

{% if categorized_pages is defined and categorized_pages|length > 0 %}
    <div class="card mb-4">
        <div class="card-header bg-success text-white">
            <h2>Pages "France" récemment catégorisées ({{ categorized_pages|length }})</h2>
        </div>
        <div class="card-body">
            <p>Ces pages wiki commençant par "France" ont été récemment catégorisées et ne sont plus dans la liste des pages sans catégorie.</p>
            <div class="table-responsive">
                <table class="table table-striped table-hover">
                    <!-- Contenu de la table -->
                </table>
            </div>
        </div>
    </div>
{% endif %}

Fonctionnalités

  1. Scraping des pages sans catégorie : Récupération des pages commençant par "France" depuis la liste des DeadendPages du wiki OSM.
  2. Suggestion de catégories : Analyse du titre et du contenu des pages pour suggérer des catégories pertinentes.
  3. Suivi des pages catégorisées : Détection des pages qui ont été catégorisées depuis le dernier scraping.
  4. Affichage dans l'interface : Affichage des pages sans catégorie et des pages récemment catégorisées dans l'interface utilisateur.

Utilisation

  1. Le script wiki_compare.py est exécuté périodiquement pour mettre à jour les données.
  2. Les utilisateurs peuvent consulter les pages sans catégorie et les pages récemment catégorisées dans l'interface.
  3. Les utilisateurs peuvent cliquer sur les boutons d'action pour voir les pages et ajouter des catégories.

Avantages

  1. Amélioration de la qualité du wiki : Aide à identifier et à catégoriser les pages qui devraient avoir des catégories.
  2. Suivi des progrès : Permet de suivre les progrès dans la catégorisation des pages.
  3. Suggestion de catégories : Facilite le travail des contributeurs en suggérant des catégories pertinentes.