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
- Scraping des pages sans catégorie : Récupération des pages commençant par "France" depuis la liste des DeadendPages du wiki OSM.
- Suggestion de catégories : Analyse du titre et du contenu des pages pour suggérer des catégories pertinentes.
- Suivi des pages catégorisées : Détection des pages qui ont été catégorisées depuis le dernier scraping.
- Affichage dans l'interface : Affichage des pages sans catégorie et des pages récemment catégorisées dans l'interface utilisateur.
Utilisation
- Le script
wiki_compare.py
est exécuté périodiquement pour mettre à jour les données. - Les utilisateurs peuvent consulter les pages sans catégorie et les pages récemment catégorisées dans l'interface.
- Les utilisateurs peuvent cliquer sur les boutons d'action pour voir les pages et ajouter des catégories.
Avantages
- Amélioration de la qualité du wiki : Aide à identifier et à catégoriser les pages qui devraient avoir des catégories.
- Suivi des progrès : Permet de suivre les progrès dans la catégorisation des pages.
- Suggestion de catégories : Facilite le travail des contributeurs en suggérant des catégories pertinentes.