Skip to main content

sqlite_knowledge_graph/algorithms/
mod.rs

1use crate::error::Result;
2/// Graph algorithms for sqlite-knowledge-graph
3///
4/// Provides PageRank, Louvain community detection, and connected components.
5use rusqlite::Connection;
6
7mod connected;
8mod louvain;
9mod pagerank;
10
11pub use connected::{connected_components, strongly_connected_components};
12pub use louvain::{louvain_communities, CommunityResult};
13pub use pagerank::{pagerank, PageRankConfig};
14
15/// Run all graph algorithms and return summary
16pub fn analyze_graph(conn: &Connection) -> Result<GraphAnalysis> {
17    let pr = pagerank(conn, PageRankConfig::default())?;
18    let communities = louvain_communities(conn)?;
19    let components = connected_components(conn)?;
20
21    Ok(GraphAnalysis {
22        pagerank: pr,
23        communities,
24        num_components: components.len(),
25        largest_component_size: components.iter().map(|c| c.len()).max().unwrap_or(0),
26    })
27}
28
29#[derive(Debug, Clone)]
30pub struct GraphAnalysis {
31    pub pagerank: Vec<(i64, f64)>,
32    pub communities: CommunityResult,
33    pub num_components: usize,
34    pub largest_component_size: usize,
35}