use serde::{Deserialize, Serialize};
use super::{CompletionMode, KuromojiMode, KuromojiOptions, DEFAULT_KUROMOJI_DICTIONARY};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiPOSConfig {
pub stop_tags: Option<Vec<String>>,
pub dictionary: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiStopConfig {
pub words: Option<Vec<String>>,
pub ignore_case: bool,
pub dictionary: Option<String>,
}
impl Default for KuromojiStopConfig {
fn default() -> Self {
Self {
words: None,
ignore_case: super::filters::default_ignore_case(),
dictionary: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiCompletionConfig {
pub dictionary: String,
pub mode: CompletionMode,
}
impl Default for KuromojiCompletionConfig {
fn default() -> Self {
Self {
dictionary: DEFAULT_KUROMOJI_DICTIONARY.into(),
mode: CompletionMode::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiStemConfig {
pub minimum_length: i32,
}
impl Default for KuromojiStemConfig {
fn default() -> Self {
Self {
minimum_length: super::filters::default_stem_length(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiReadingFormConfig {
pub use_romaji: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct KuromojiTokenizerConfig {
pub dictionary: String,
pub mode: KuromojiMode,
pub discard_punctuation: bool,
pub discard_compound_token: bool,
pub user_dictionary: Option<String>,
pub n_best_cost: i32,
pub n_best_examples: Option<String>,
}
impl Default for KuromojiTokenizerConfig {
fn default() -> Self {
let options = KuromojiOptions::default();
Self {
dictionary: DEFAULT_KUROMOJI_DICTIONARY.into(),
mode: options.mode,
discard_punctuation: options.discard_punctuation,
discard_compound_token: options.discard_compound_token,
user_dictionary: None,
n_best_cost: options.n_best_cost,
n_best_examples: None,
}
}
}
impl KuromojiTokenizerConfig {
pub fn options(&self) -> KuromojiOptions {
KuromojiOptions {
mode: self.mode,
discard_punctuation: self.discard_punctuation,
discard_compound_token: self.discard_compound_token,
n_best_cost: self.n_best_cost,
}
}
}