use std::sync::LazyLock;
use std::collections::HashSet;
pub static STOPWORDS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[
"le", "la", "les", "un", "une", "des", "du", "au", "aux", "l'", "d'",
"l", "d", "j", "m", "t", "s", "n", "c", "qu", "je", "tu", "il", "elle", "on", "nous", "vous", "ils", "elles", "me", "te", "se", "lui",
"leur", "leurs", "mon", "ton", "son", "ma", "ta", "sa", "mes", "tes", "ses", "notre",
"votre", "nos", "vos", "ce", "cet", "cette", "ces", "celui", "celle", "ceux", "celles",
"ça", "cela", "ceci", "suis", "es", "est", "sommes", "êtes", "sont", "était", "étaient", "étais", "étions",
"étiez", "été", "ai", "as", "a", "avons", "avez", "ont", "avait", "avaient", "avais", "avions", "aviez",
"eu", "peut", "peux", "pouvez", "pouvons", "peuvent", "doit", "dois", "devez", "devons",
"doivent", "va", "vais", "vas", "allons", "allez", "vont", "de", "à", "en", "dans", "sur", "sous", "par", "pour", "avec", "sans", "entre", "vers",
"chez", "contre", "depuis", "et", "ou", "mais", "donc", "or", "ni", "car", "que", "qui", "quoi", "dont", "où", "si",
"comme", "parce", "puisque", "lorsque", "quand", "pas", "ne", "non", "oui", "plus", "moins", "très", "trop", "ici", "là", "bien", "mal",
"aussi", "encore", "déjà", "tout", "tous", "toute", "toutes", "même", "mêmes", "autre", "autres",
]
.into_iter()
.collect()
});
pub static WEASELS: LazyLock<Vec<&'static str>> = LazyLock::new(|| {
vec![
"quelques",
"certains",
"parfois",
"plutôt",
"assez",
"globalement",
"généralement",
"souvent",
"en général",
"la plupart",
"il semble que",
"il semblerait que",
"on pourrait dire que",
"on dit souvent",
"beaucoup de",
"peu de",
"presque",
"quasiment",
"environ",
"à peu près",
]
});
pub static STANDALONE_NEGATIONS: &[&str] = &["sans", "non"];
pub static NEGATION_CLITICS: &[&str] = &["ne", "n'"];
pub static CONDITIONALS: &[&str] = &[
"si",
"sauf si",
"à moins que",
"à moins de",
"quand",
"lorsque",
"lorsqu'",
"dès que",
"tant que",
"pourvu que",
"à condition que",
"à condition de",
"au cas où",
"même si",
"en cas de",
];
pub static SI_CLITICS: &[&str] = &["s'il", "s'ils"];
pub static INTENSIFIERS: &[&str] = &[
"très",
"vraiment",
"extrêmement",
"absolument",
"totalement",
"complètement",
"terriblement",
"incroyablement",
"profondément",
"super",
"hyper",
];
pub static SPELLED_NUMERALS: &[&str] = &[
"deux",
"trois",
"quatre",
"cinq",
"six",
"sept",
"huit",
"neuf",
"dix",
"onze",
"douze",
"treize",
"quatorze",
"quinze",
"seize",
"vingt",
"vingts",
"trente",
"quarante",
"cinquante",
"soixante",
"septante",
"huitante",
"octante",
"nonante",
"cent",
"cents",
"mille",
"million",
"millions",
"milliard",
"milliards",
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn contains_common_articles() {
assert!(STOPWORDS.contains("le"));
assert!(STOPWORDS.contains("la"));
assert!(STOPWORDS.contains("les"));
assert!(STOPWORDS.contains("un"));
}
#[test]
fn contains_common_auxiliaries() {
assert!(STOPWORDS.contains("est"));
assert!(STOPWORDS.contains("sont"));
assert!(STOPWORDS.contains("avait"));
}
#[test]
fn contains_contracted_forms() {
assert!(STOPWORDS.contains("du"));
assert!(STOPWORDS.contains("au"));
assert!(STOPWORDS.contains("aux"));
}
#[test]
fn does_not_contain_content_words() {
assert!(!STOPWORDS.contains("accessibilité"));
assert!(!STOPWORDS.contains("linter"));
}
}