use crate::metrics::coherence::structural_coherence::config::{
DiscoursePatternType, DocumentStructureType, HierarchicalLevel, StructuralMarkerType,
};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralCoherenceResult {
pub paragraph_coherence: f64,
pub section_coherence: f64,
pub organizational_coherence: f64,
pub hierarchical_coherence: f64,
pub paragraph_transitions: Vec<f64>,
pub structural_markers: Vec<String>,
pub coherence_patterns: HashMap<String, f64>,
pub structural_consistency: f64,
pub detailed_metrics: DetailedStructuralMetrics,
pub document_structure: DocumentStructureAnalysis,
pub advanced_analysis: Option<AdvancedStructuralAnalysis>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DetailedStructuralMetrics {
pub total_paragraphs: usize,
pub average_paragraph_length: f64,
pub paragraph_length_distribution: Vec<usize>,
pub section_boundaries: Vec<SectionBoundary>,
pub hierarchical_structure: HierarchicalStructureAnalysis,
pub discourse_patterns: DiscoursePatternAnalysis,
pub marker_analysis: StructuralMarkerAnalysis,
pub global_coherence: GlobalCoherenceMetrics,
pub document_completeness: DocumentCompletenessMetrics,
pub complexity_measures: StructuralComplexityMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentStructureAnalysis {
pub detected_structure_type: DocumentStructureType,
pub detection_confidence: f64,
pub genre_compliance: f64,
pub missing_elements: Vec<String>,
pub violations: Vec<StructuralViolation>,
pub structure_quality: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralViolation {
pub violation_type: String,
pub position: usize,
pub severity: f64,
pub description: String,
pub suggested_correction: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SectionBoundary {
pub position: usize,
pub strength: f64,
pub boundary_type: String,
pub section_title: Option<String>,
pub hierarchical_level: HierarchicalLevel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HierarchicalStructureAnalysis {
pub detected_levels: Vec<HierarchicalLevel>,
pub level_transitions: Vec<LevelTransition>,
pub balance_score: f64,
pub depth_distribution: HashMap<String, usize>,
pub structural_tree: Option<StructuralTree>,
pub consistency_score: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LevelTransition {
pub from_level: HierarchicalLevel,
pub to_level: HierarchicalLevel,
pub position: usize,
pub quality: f64,
pub appropriateness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralTree {
pub root: StructuralNode,
pub depth: usize,
pub node_count: usize,
pub balance_score: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralNode {
pub node_id: usize,
pub level: HierarchicalLevel,
pub content_span: (usize, usize),
pub title: Option<String>,
pub children: Vec<StructuralNode>,
pub metrics: NodeMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeMetrics {
pub content_length: usize,
pub internal_coherence: f64,
pub parent_connection: f64,
pub children_connections: Vec<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoursePatternAnalysis {
pub detected_patterns: Vec<DetectedPattern>,
pub pattern_distribution: HashMap<String, f64>,
pub pattern_coherence_scores: HashMap<String, f64>,
pub pattern_transitions: Vec<PatternTransition>,
pub pattern_consistency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DetectedPattern {
pub pattern_type: DiscoursePatternType,
pub strength: f64,
pub span: (usize, usize),
pub completeness: f64,
pub evidence: Vec<String>,
pub quality_score: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatternTransition {
pub from_pattern: DiscoursePatternType,
pub to_pattern: DiscoursePatternType,
pub position: usize,
pub smoothness: f64,
pub appropriateness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralMarkerAnalysis {
pub markers_by_type: HashMap<String, Vec<StructuralMarker>>,
pub marker_density: f64,
pub distribution_analysis: MarkerDistributionAnalysis,
pub effectiveness_scores: HashMap<String, f64>,
pub missing_markers: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralMarker {
pub text: String,
pub marker_type: StructuralMarkerType,
pub position: usize,
pub strength: f64,
pub context: String,
pub effectiveness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MarkerDistributionAnalysis {
pub evenness_score: f64,
pub markers_per_section: Vec<usize>,
pub clustering_analysis: HashMap<String, f64>,
pub distribution_quality: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GlobalCoherenceMetrics {
pub document_flow: f64,
pub information_progression: f64,
pub thematic_consistency: f64,
pub structural_integration: f64,
pub reader_guidance: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentCompletenessMetrics {
pub introduction_quality: f64,
pub body_development_quality: f64,
pub conclusion_quality: f64,
pub supporting_elements: HashMap<String, bool>,
pub completeness_score: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructuralComplexityMetrics {
pub hierarchical_complexity: f64,
pub pattern_complexity: f64,
pub marker_complexity: f64,
pub overall_complexity: f64,
pub complexity_appropriateness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvancedStructuralAnalysis {
pub rhetorical_structure: RhetoricalStructureAnalysis,
pub genre_analysis: GenreAnalysis,
pub reader_experience: ReaderExperienceMetrics,
pub optimization_suggestions: Vec<OptimizationSuggestion>,
pub cross_reference_analysis: CrossReferenceAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RhetoricalStructureAnalysis {
pub rhetorical_moves: Vec<RhetoricalMove>,
pub move_sequencing: f64,
pub rhetorical_effectiveness: f64,
pub argument_structure: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RhetoricalMove {
pub move_type: String,
pub span: (usize, usize),
pub strength: f64,
pub linguistic_markers: Vec<String>,
pub effectiveness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenreAnalysis {
pub conventions_adherence: f64,
pub structure_alignment: f64,
pub genre_quality_metrics: HashMap<String, f64>,
pub deviation_analysis: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReaderExperienceMetrics {
pub navigation_ease: f64,
pub information_accessibility: f64,
pub cognitive_load: f64,
pub reading_flow: f64,
pub comprehension_support: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationSuggestion {
pub suggestion_type: String,
pub position: usize,
pub priority: usize,
pub description: String,
pub expected_improvement: f64,
pub implementation_difficulty: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrossReferenceAnalysis {
pub internal_references: f64,
pub reference_consistency: f64,
pub navigation_support: f64,
pub reference_effectiveness: HashMap<String, f64>,
}
impl Default for StructuralCoherenceResult {
fn default() -> Self {
Self {
paragraph_coherence: 0.0,
section_coherence: 0.0,
organizational_coherence: 0.0,
hierarchical_coherence: 0.0,
paragraph_transitions: Vec::new(),
structural_markers: Vec::new(),
coherence_patterns: HashMap::new(),
structural_consistency: 0.0,
detailed_metrics: DetailedStructuralMetrics::default(),
document_structure: DocumentStructureAnalysis::default(),
advanced_analysis: None,
}
}
}
impl Default for DetailedStructuralMetrics {
fn default() -> Self {
Self {
total_paragraphs: 0,
average_paragraph_length: 0.0,
paragraph_length_distribution: Vec::new(),
section_boundaries: Vec::new(),
hierarchical_structure: HierarchicalStructureAnalysis::default(),
discourse_patterns: DiscoursePatternAnalysis::default(),
marker_analysis: StructuralMarkerAnalysis::default(),
global_coherence: GlobalCoherenceMetrics::default(),
document_completeness: DocumentCompletenessMetrics::default(),
complexity_measures: StructuralComplexityMetrics::default(),
}
}
}
impl Default for DocumentStructureAnalysis {
fn default() -> Self {
Self {
detected_structure_type: DocumentStructureType::Unknown,
detection_confidence: 0.0,
genre_compliance: 0.0,
missing_elements: Vec::new(),
violations: Vec::new(),
structure_quality: 0.0,
}
}
}
impl Default for HierarchicalStructureAnalysis {
fn default() -> Self {
Self {
detected_levels: Vec::new(),
level_transitions: Vec::new(),
balance_score: 0.0,
depth_distribution: HashMap::new(),
structural_tree: None,
consistency_score: 0.0,
}
}
}
impl Default for DiscoursePatternAnalysis {
fn default() -> Self {
Self {
detected_patterns: Vec::new(),
pattern_distribution: HashMap::new(),
pattern_coherence_scores: HashMap::new(),
pattern_transitions: Vec::new(),
pattern_consistency: 0.0,
}
}
}
impl Default for StructuralMarkerAnalysis {
fn default() -> Self {
Self {
markers_by_type: HashMap::new(),
marker_density: 0.0,
distribution_analysis: MarkerDistributionAnalysis::default(),
effectiveness_scores: HashMap::new(),
missing_markers: Vec::new(),
}
}
}
impl Default for MarkerDistributionAnalysis {
fn default() -> Self {
Self {
evenness_score: 0.0,
markers_per_section: Vec::new(),
clustering_analysis: HashMap::new(),
distribution_quality: 0.0,
}
}
}
impl Default for GlobalCoherenceMetrics {
fn default() -> Self {
Self {
document_flow: 0.0,
information_progression: 0.0,
thematic_consistency: 0.0,
structural_integration: 0.0,
reader_guidance: 0.0,
}
}
}
impl Default for DocumentCompletenessMetrics {
fn default() -> Self {
Self {
introduction_quality: 0.0,
body_development_quality: 0.0,
conclusion_quality: 0.0,
supporting_elements: HashMap::new(),
completeness_score: 0.0,
}
}
}
impl Default for StructuralComplexityMetrics {
fn default() -> Self {
Self {
hierarchical_complexity: 0.0,
pattern_complexity: 0.0,
marker_complexity: 0.0,
overall_complexity: 0.0,
complexity_appropriateness: 0.0,
}
}
}