199 lines
No EOL
7.6 KiB
Markdown
199 lines
No EOL
7.6 KiB
Markdown
# 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`
|
|
|
|
```python
|
|
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 :
|
|
|
|
```python
|
|
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 :
|
|
|
|
```python
|
|
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 :
|
|
|
|
```python
|
|
# 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 :
|
|
|
|
```php
|
|
// 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 :
|
|
|
|
```php
|
|
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 :
|
|
|
|
```twig
|
|
{% 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 :
|
|
|
|
```twig
|
|
{% 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. |