duckling 0.4.0

A Rust port of Facebook's Duckling library for parsing natural language into structured data
Documentation
use crate::pattern::regex;
use crate::types::{Rule, TokenData};

use super::EmailData;

pub fn rules() -> Vec<Rule> {
    vec![Rule {
        name: "email spelled out".to_string(),
        pattern: vec![regex(
            "([\\w_+-]+(?:(?: punkt |\\.)[\\w_+-]+){0,10})(?: at |@)([a-zA-Z]+(?:(?:\\.| punkt )[\\w_-]+){1,10})",
        )],
        production: Box::new(|nodes| {
            let m = match &nodes[0].token_data {
                TokenData::RegexMatch(m) => m,
                _ => return None,
            };
            let local = m.group(1)?.replace(" punkt ", ".");
            let domain = m.group(2)?.replace(" punkt ", ".");
            let email = format!("{}@{}", local, domain);
            Some(TokenData::Email(EmailData::new(&email)))
        }),
    }]
}