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::Grain;

pub fn rules() -> Vec<Rule> {
    vec![
        Rule {
            name: "soicind (grain)".to_string(),
            pattern: vec![regex("t?sh?oicind(í|i)?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Second))),
        },
        Rule {
            name: "nóiméad (grain)".to_string(),
            pattern: vec![regex("n[óo]im(é|e)[ai]da?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Minute))),
        },
        Rule {
            name: "uair (grain)".to_string(),
            pattern: vec![regex("([thn]-?)?uair(e|eanta)?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Hour))),
        },
        Rule {
            name: "lá (grain)".to_string(),
            pattern: vec![regex("l(ae(thanta)?|(á|a))")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Day))),
        },
        Rule {
            name: "seachtain (grain)".to_string(),
            pattern: vec![regex("t?sh?eachtain(e|(í|i))?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Week))),
        },
        Rule {
            name: "mí (grain)".to_string(),
            pattern: vec![regex("mh?(í|i)(sa|nna)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Month))),
        },
        Rule {
            name: "ráithe (grain)".to_string(),
            pattern: vec![regex("r(á|a)ith(e|(í|i))")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Quarter))),
        },
        Rule {
            name: "bliain (grain)".to_string(),
            pattern: vec![regex("m?bh?lia(in|na|nta)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Year))),
        },
    ]
}