parsitext 0.1.0

High-performance Persian (Farsi) text processing engine for Rust — normalization, tokenization, entity recognition.
Documentation
//! A bundled high-frequency Persian word list for [`crate::spell`].
//!
//! ~250 of the most common Persian words (function words, common verbs,
//! common nouns, time words, body parts, family, numbers).  This is **not**
//! a full dictionary — it's enough to make `spell::suggest_builtin` useful
//! out of the box without bloating the crate's binary size.
//!
//! Users with stricter accuracy needs should pass their own word list to
//! [`crate::spell::suggest`].

/// The bundled high-frequency Persian word list.
pub const COMMON_WORDS: &[&str] = &[
    // ─── Function words ────────────────────────────────────────────────────
    "و",
    "از",
    "به",
    "در",
    "که",
    "این",
    "آن",
    "با",
    "را",
    "بر",
    "اما",
    "ولی",
    "اگر",
    "چون",
    "زیرا",
    "تا",
    "همان",
    "هر",
    "هیچ",
    "همه",
    "بعد",
    "قبل",
    "زیر",
    "رو",
    "بالا",
    "پایین",
    "کنار",
    "بین",
    "نزد",
    "روی",
    "یا",
    "هم",
    "بله",
    "بلی",
    "خیر",
    "آره",
    // ─── Pronouns ──────────────────────────────────────────────────────────
    "من",
    "تو",
    "او",
    "ما",
    "شما",
    "آنها",
    "ایشان",
    "خود",
    "خویش",
    // ─── Question words ───────────────────────────────────────────────────
    "چه",
    "چی",
    "کجا",
    "کی",
    "کدام",
    "چرا",
    "چگونه",
    "چقدر",
    "چند",
    // ─── Time words ───────────────────────────────────────────────────────
    "امروز",
    "فردا",
    "دیروز",
    "صبح",
    "ظهر",
    "عصر",
    "شب",
    "نیمه",
    "بامداد",
    "ساعت",
    "دقیقه",
    "ثانیه",
    "هفته",
    "ماه",
    "سال",
    "زمان",
    "وقت",
    "حال",
    "گذشته",
    "آینده",
    "همیشه",
    "گاهی",
    "اغلب",
    "هرگز",
    "اکنون",
    // ─── Numbers ──────────────────────────────────────────────────────────
    "صفر",
    "یک",
    "دو",
    "سه",
    "چهار",
    "پنج",
    "شش",
    "هفت",
    "هشت",
    "نه",
    "ده",
    "صد",
    "هزار",
    "میلیون",
    "میلیارد",
    "اول",
    "دوم",
    "سوم",
    "آخر",
    // ─── Common verbs (stems / 3sg present) ───────────────────────────────
    "بود",
    "شد",
    "می‌شود",
    "می‌رود",
    "می‌آید",
    "می‌گوید",
    "می‌دهد",
    "می‌گیرد",
    "می‌کند",
    "می‌بیند",
    "می‌داند",
    "می‌خواهد",
    "می‌تواند",
    "دارد",
    "هست",
    "نیست",
    "گفت",
    "رفت",
    "آمد",
    "دید",
    "کرد",
    "گرفت",
    "داد",
    "شده",
    "بوده",
    "آمده",
    "رفته",
    "گفته",
    "کرده",
    "گرفته",
    "داده",
    // ─── Common nouns ─────────────────────────────────────────────────────
    "خانواده",
    "روز",
    "ماشین",
    "خیابان",
    "شهر",
    "کشور",
    "ایران",
    "تهران",
    "مدرسه",
    "دانشگاه",
    "بیمارستان",
    "کار",
    "شغل",
    "پول",
    "کلاس",
    "درس",
    "معلم",
    "دانش‌آموز",
    "دانشجو",
    "دکتر",
    "پزشک",
    "مهندس",
    "وکیل",
    "نویسنده",
    "هنرمند",
    // ─── Family ───────────────────────────────────────────────────────────
    "مادر",
    "پدر",
    "برادر",
    "خواهر",
    "همسر",
    "فرزند",
    "پسر",
    "دختر",
    "خاله",
    "عمه",
    "دایی",
    "عمو",
    "دوست",
    "همکار",
    "همسایه",
    // ─── Body parts ──────────────────────────────────────────────────────
    "سر",
    "دست",
    "پا",
    "چشم",
    "گوش",
    "دهان",
    "بینی",
    "صورت",
    "موی",
    "دل",
    "قلب",
    "روح",
    // ─── Common adjectives ───────────────────────────────────────────────
    "خوب",
    "بد",
    "بزرگ",
    "کوچک",
    "زیبا",
    "زشت",
    "گرم",
    "سرد",
    "تازه",
    "کهنه",
    "نو",
    "قدیمی",
    "جدید",
    "زود",
    "دیر",
    "نزدیک",
    "دور",
    "آسان",
    "سخت",
    "زیاد",
    "کم",
    "بیشتر",
    "کمتر",
    "خیلی",
    "بسیار",
    "اندک",
    "کافی",
    // ─── Common food / drink ─────────────────────────────────────────────
    "نان",
    "آب",
    "چای",
    "قهوه",
    "غذا",
    "میوه",
    "سبزی",
    "گوشت",
    "مرغ",
    "ماهی",
    "برنج",
    "سیب",
    "پرتقال",
    "موز",
    "انگور",
    "هندوانه",
    // ─── Greetings / courtesies ───────────────────────────────────────────
    "سلام",
    "خداحافظ",
    "ممنون",
    "متشکر",
    "ببخشید",
    "لطفا",
    "عزیز",
    "جان",
    "است",
    "کتاب",
    "خانه",
    "الان",
    "آقا",
    "خانم",
    "محبت",
    "سپاس",
    "مرسی",
    // ─── Common everyday verbs (infinitive) ───────────────────────────────
    "رفتن",
    "آمدن",
    "گفتن",
    "دیدن",
    "کردن",
    "گرفتن",
    "دادن",
    "خوردن",
    "نوشتن",
    "خواندن",
    "شنیدن",
    "خوابیدن",
    "نشستن",
    "ایستادن",
];

/// Borrow the bundled dictionary as a slice — primarily for
/// [`crate::spell::suggest_builtin`].
#[must_use]
pub const fn dict() -> &'static [&'static str] {
    COMMON_WORDS
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn contains_common_words() {
        // Spot-check a few entries from different categories.
        assert!(COMMON_WORDS.contains(&"و"));
        assert!(COMMON_WORDS.contains(&"من"));
        assert!(COMMON_WORDS.contains(&"خوب"));
    }

    #[test]
    fn no_empty_entries() {
        assert!(COMMON_WORDS.iter().all(|w| !w.is_empty()));
    }

    #[test]
    fn no_duplicates() {
        let mut sorted: Vec<_> = COMMON_WORDS.to_vec();
        sorted.sort();
        let dedup_len = {
            let mut s = sorted.clone();
            s.dedup();
            s.len()
        };
        assert_eq!(
            sorted.len(),
            dedup_len,
            "dictionary contains duplicate entries"
        );
    }
}