use crate::language_detection::LanguageDetection;
use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
pub(crate) struct LinguaHighAccuracyDetector {
languages: Vec<Language>,
detector: LanguageDetector,
}
impl LinguaHighAccuracyDetector {
pub(crate) fn new(languages: &[Language]) -> Self {
Self {
languages: languages.to_vec(),
detector: LanguageDetectorBuilder::from_all_languages()
.with_preloaded_language_models()
.build(),
}
}
}
impl LanguageDetection for LinguaHighAccuracyDetector {
fn detector_name(&self) -> String {
"lingua-high-accuracy".to_string()
}
fn languages(&self) -> &Vec<Language> {
&self.languages
}
fn detect(&self, texts: &[&str]) -> Vec<Option<Language>> {
self.detector.detect_languages_in_parallel_of(texts)
}
}