use crate::language_detection::LanguageDetection;
use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
pub(crate) struct LinguaSingleLanguageDetector {
language: Language,
languages: Vec<Language>,
detector: LanguageDetector,
}
impl LinguaSingleLanguageDetector {
pub(crate) fn new(language: Language, languages: &[Language]) -> Self {
Self {
language,
languages: languages.to_vec(),
detector: LanguageDetectorBuilder::from_languages(&[language]).build(),
}
}
}
impl LanguageDetection for LinguaSingleLanguageDetector {
fn detector_name(&self) -> String {
format!(
"lingua-{}-detector",
self.language.to_string().to_lowercase()
)
}
fn languages(&self) -> &Vec<Language> {
&self.languages
}
fn detect(&self, texts: &[&str]) -> Vec<Option<Language>> {
self.detector.detect_languages_in_parallel_of(texts)
}
fn is_single_language_detector(&self) -> bool {
true
}
}