sqlite_knowledge_graph/algorithms/
mod.rs1use crate::error::Result;
2use 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
15pub 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}