use super::{
KuromojiCompletionConfig, KuromojiMode, KuromojiPOSConfig, KuromojiStemConfig,
KuromojiStopConfig, KuromojiTokenizerConfig, DEFAULT_KUROMOJI_DICTIONARY,
};
use crate::{
Analyzer, CharFilter, EmptyFilterConfig, NormalizationConfig, SimpleLowercaseConfig,
TokenFilter, Tokenizer, UnicodeProfile,
};
fn profile() -> UnicodeProfile {
UnicodeProfile::Kuromoji {
dictionary: DEFAULT_KUROMOJI_DICTIONARY.into(),
}
}
fn lowercase() -> TokenFilter {
TokenFilter::UnicodeSimpleLowercase(SimpleLowercaseConfig {
unicode_profile: profile().into(),
})
}
pub fn kuromoji_analyzer() -> Analyzer {
Analyzer::new(
Tokenizer::Kuromoji(KuromojiTokenizerConfig::default()),
vec![
TokenFilter::KuromojiBaseForm(EmptyFilterConfig::default()),
TokenFilter::KuromojiPartOfSpeech(KuromojiPOSConfig::default()),
TokenFilter::KuromojiStop(KuromojiStopConfig::default()),
TokenFilter::KuromojiStem(KuromojiStemConfig::default()),
lowercase(),
],
vec![CharFilter::CJKWidth],
)
.with_normalization(NormalizationConfig::CJKWidthSimpleLowercase { profile: profile() })
}
pub fn kuromoji_completion_analyzer() -> Analyzer {
Analyzer::new(
Tokenizer::Kuromoji(KuromojiTokenizerConfig {
mode: KuromojiMode::Normal,
..Default::default()
}),
vec![
TokenFilter::KuromojiCompletion(KuromojiCompletionConfig::default()),
lowercase(),
],
vec![CharFilter::CJKWidth],
)
.with_normalization(NormalizationConfig::CJKWidth)
}