pub const DEFAULT_CHARS_PER_TOKEN: f64 = 6.0;
#[derive(Clone)]
pub struct LanguageConfig {
pub matcher: fn(char) -> bool,
pub chars_per_token: f64,
}
#[derive(Clone)]
pub struct EstimationOptions {
pub default_chars_per_token: f64,
pub language_configs: Vec<LanguageConfig>,
}
impl Default for EstimationOptions {
fn default() -> Self {
Self {
default_chars_per_token: DEFAULT_CHARS_PER_TOKEN,
language_configs: default_language_configs(),
}
}
}
#[derive(Clone, Default)]
pub struct SplitOptions {
pub estimation: EstimationOptions,
pub overlap: usize,
}
pub fn is_german(c: char) -> bool {
matches!(c, 'ä' | 'Ä' | 'ö' | 'Ö' | 'ü' | 'Ü' | 'ß' | 'ẞ')
}
pub fn is_french(c: char) -> bool {
matches!(
c,
'é' | 'É'
| 'è'
| 'È'
| 'ê'
| 'Ê'
| 'ë'
| 'Ë'
| 'à'
| 'À'
| 'â'
| 'Â'
| 'î'
| 'Î'
| 'ï'
| 'Ï'
| 'ô'
| 'Ô'
| 'û'
| 'Û'
| 'ù'
| 'Ù'
| 'ü'
| 'Ü'
| 'ÿ'
| 'Ÿ'
| 'ç'
| 'Ç'
| 'œ'
| 'Œ'
| 'æ'
| 'Æ'
)
}
pub fn is_spanish(c: char) -> bool {
matches!(
c,
'á' | 'Á' | 'é' | 'É' | 'í' | 'Í' | 'ó' | 'Ó' | 'ú' | 'Ú' | 'ü' | 'Ü' | 'ñ' | 'Ñ'
)
}
pub fn default_language_configs() -> Vec<LanguageConfig> {
vec![
LanguageConfig {
matcher: |c| is_german(c) || is_french(c),
chars_per_token: 3.0,
},
LanguageConfig {
matcher: is_spanish,
chars_per_token: 3.5,
},
]
}