pub mod pattern;
pub mod registry;
pub mod validation;
pub use registry::RecognizerRegistry;
pub use validation::validate_entity;
use crate::types::{EntityType, RecognizerResult};
use anyhow::Result;
use std::fmt::Debug;
pub trait Recognizer: Send + Sync + Debug {
fn name(&self) -> &str;
fn supported_entities(&self) -> &[EntityType];
fn analyze(&self, text: &str, language: &str) -> Result<Vec<RecognizerResult>>;
fn min_score(&self) -> f32 {
0.0
}
fn supports_language(&self, language: &str) -> bool {
language == "en" }
}
pub trait ConfigurableRecognizer: Recognizer {
type Config;
fn from_config(config: Self::Config) -> Result<Self>
where
Self: Sized;
}
#[cfg(test)]
mod tests {
use super::*;
#[derive(Debug)]
struct TestRecognizer;
impl Recognizer for TestRecognizer {
fn name(&self) -> &str {
"test"
}
fn supported_entities(&self) -> &[EntityType] {
&[EntityType::Person]
}
fn analyze(&self, _text: &str, _language: &str) -> Result<Vec<RecognizerResult>> {
Ok(vec![])
}
}
#[test]
fn test_recognizer_trait() {
let recognizer = TestRecognizer;
assert_eq!(recognizer.name(), "test");
assert_eq!(recognizer.supported_entities(), &[EntityType::Person]);
assert!(recognizer.supports_language("en"));
assert!(!recognizer.supports_language("es"));
}
}