Skip to main content

writing_analysis/
lib.rs

1//! Lightweight writing analysis and NLP tools for Rust.
2//!
3//! Provides rule-based text analysis including readability scoring,
4//! passive voice detection, cliché detection, filter word detection,
5//! sentiment analysis, and sentence variety analysis.
6
7pub mod error;
8mod lexicon;
9mod utils;
10
11mod cliche;
12mod filter_words;
13mod passive_voice;
14mod readability;
15mod sentence_variety;
16mod sentiment;
17
18#[cfg(feature = "chinese")]
19pub mod zh;
20
21pub use cliche::{detect_cliches, ClicheInstance, ClicheResult};
22pub use error::{Result, WritingAnalysisError};
23pub use filter_words::{detect_filter_words, FilterWordInstance, FilterWordResult};
24pub use passive_voice::{detect_passive_voice, PassiveInstance, PassiveVoiceResult};
25pub use readability::{analyze_readability, ReadabilityScores};
26pub use sentence_variety::{analyze_sentence_variety, SentenceVarietyResult};
27pub use sentiment::{analyze_sentiment, SentimentResult, TokenSentiment};
28pub use utils::TextStatistics;
29
30#[cfg(feature = "chinese")]
31pub use zh::{
32    analyze_all_zh, analyze_readability_zh, analyze_sentence_variety_zh, analyze_sentiment_zh,
33    detect_cliches_zh, detect_filter_words_zh, detect_passive_voice_zh, AnalysisResultZh,
34    ChineseReadabilityScores,
35};
36
37/// Aggregated result of all analysis functions.
38#[derive(Debug, Clone, PartialEq)]
39pub struct AnalysisResult {
40    pub readability: ReadabilityScores,
41    pub passive_voice: PassiveVoiceResult,
42    pub cliches: ClicheResult,
43    pub filter_words: FilterWordResult,
44    pub sentiment: SentimentResult,
45    pub sentence_variety: SentenceVarietyResult,
46}
47
48/// Run all analysis functions on the given text.
49pub fn analyze_all(text: &str) -> Result<AnalysisResult> {
50    Ok(AnalysisResult {
51        readability: analyze_readability(text)?,
52        passive_voice: detect_passive_voice(text)?,
53        cliches: detect_cliches(text)?,
54        filter_words: detect_filter_words(text)?,
55        sentiment: analyze_sentiment(text)?,
56        sentence_variety: analyze_sentence_variety(text)?,
57    })
58}