Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package fr.univ.dblp.loader;
import org.graphstream.graph.Graph;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.stream.file.FileSourceEdge;
import java.io.IOException;
/**
* Classe utilitaire pour charger des graphes depuis des fichiers.
*
* Cette classe gère le chargement du réseau de collaboration DBLP
* depuis un fichier au format liste d'arêtes.
*
* @author Hamadou BA
* @see <a href="https://www-apps.univ-lehavre.fr/forge/bh243413/tp2-ri-mesures-de-reseaux-interaction.git">Dépôt Git</a>
*/
public class GraphLoader {
/**
* Charge le réseau de collaboration DBLP depuis un fichier.
*
* Utilise FileSourceEdge de GraphStream pour lire le fichier au format
* liste d'arêtes (chaque ligne contient deux identifiants de nœuds).
*
* @param filePath Chemin vers le fichier de données DBLP
* @return Le graphe chargé, ou null si le chargement a échoué
*/
public static Graph loadDBLP(String filePath) {
System.out.println("\n[CHARGEMENT] Lecture du graphe DBLP depuis: " + filePath);
Graph graph = new SingleGraph("DBLP");
configureGraph(graph);
FileSourceEdge fs = new FileSourceEdge();
fs.addSink(graph);
try {
long startTime = System.currentTimeMillis();
fs.readAll(filePath);
long elapsed = System.currentTimeMillis() - startTime;
System.out.printf(" Graphe chargé avec succès en %.2f secondes%n", elapsed / 1000.0);
displayGraphInfo(graph);
return graph;
} catch (IOException e) {
System.err.println(" [ERREUR] Impossible de charger le graphe: " + e.getMessage());
e.printStackTrace();
return null;
} finally {
fs.removeSink(graph);
}
}
/**
* Configure les propriétés du graphe.
*
* Active la création automatique de nœuds lors de la lecture des arêtes
* et configure le mode non-strict pour gérer les multi-arêtes.
*
* @param graph Le graphe à configurer
*/
private static void configureGraph(Graph graph) {
// Ne pas créer d'arêtes multiples entre les mêmes nœuds
graph.setStrict(false);
// Création automatique des nœuds quand les arêtes les référencent
graph.setAutoCreate(true);
}
/**
* Affiche les informations de base sur le graphe chargé.
*
* Affiche le nombre de nœuds, d'arêtes et le type de graphe
* (dirigé ou non dirigé).
*
* @param graph Le graphe dont on affiche les informations
*/
public static void displayGraphInfo(Graph graph) {
System.out.println("\n[INFORMATION DU GRAPHE]");
System.out.printf(" Nombre de nœuds : %,d%n", graph.getNodeCount());
System.out.printf(" Nombre d'arêtes : %,d%n", graph.getEdgeCount());
// Note: SingleGraph est toujours non dirigé
System.out.printf(" Graphe dirigé : %s%n", "Non");
}
}