use super::preprocess::{apply_features, preprocess};
use super::token::MToken;
use crate::error::Result;
use crate::g2p::spacy_tagger::EnglishTagger;
use crate::g2p::spacy_tokenizer::SpacyTokenizer;
#[derive(Debug)]
pub struct TextFrontEnd {
tokenizer: SpacyTokenizer,
tagger: EnglishTagger,
}
impl TextFrontEnd {
pub fn new(tagger: EnglishTagger) -> Result<Self> {
Ok(Self {
tokenizer: SpacyTokenizer::en_core_web_sm()?,
tagger,
})
}
pub(crate) fn tokens(&self, text: &str) -> Result<Vec<MToken>> {
let pre = preprocess(text);
let spacy = self.tokenizer.tokenize(&pre.text);
let tags = self.tagger.tag(&spacy)?;
let mut tokens: Vec<MToken> = spacy
.iter()
.zip(tags)
.map(|(t, tag)| MToken::new(t.text.as_str(), tag, t.whitespace()))
.collect();
apply_features(&mut tokens, &pre.words, &pre.features)?;
Ok(tokens)
}
}