Skip to content

Commit df24849

Browse files
authored
Merge pull request #130 from snipsco/task/es-it-v0
Italian V0 + Spanish
2 parents 2b390b0 + d7e8e34 commit df24849

File tree

12 files changed

+732
-7
lines changed

12 files changed

+732
-7
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build = "build.rs"
66

77
[workspace]
88
members=["values", "cli", "cli-debug", "moment", "json-utils",
9-
"grammar", "grammar/de", "grammar/en", "grammar/es", "grammar/fr", "grammar/ko", "grammar/zh", "grammar/ja"]
9+
"grammar", "grammar/de", "grammar/en", "grammar/es", "grammar/fr", "grammar/ko", "grammar/zh", "grammar/ja", "grammar/it"]
1010

1111
[dependencies]
1212
rmp-serde = "0.13"

grammar/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ rustling-ontology-fr = { path="fr"}
1212
rustling-ontology-ko = { path="ko"}
1313
rustling-ontology-zh = { path="zh"}
1414
rustling-ontology-ja = { path="ja"}
15+
rustling-ontology-it = { path="it"}
1516
rustling-ontology-values = { path="../values"}

grammar/es/src/rules.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,17 @@ pub fn rules_finance(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> {
4747
|_| Ok(MoneyUnitValue { unit: Some("฿") })
4848
);
4949
b.rule_1_terminal("GBP",
50-
b.reg(r#"gbp|libras? esterlina"#)?,
50+
b.reg(r#"gbp|libras? esterlinas?"#)?,
5151
|_| Ok(MoneyUnitValue { unit: Some("GBP") })
5252
);
53+
b.rule_1_terminal("JPY",
54+
b.reg(r#"jpy|yen(?:es)?"#)?,
55+
|_| Ok(MoneyUnitValue { unit: Some("JPY") })
56+
);
57+
b.rule_1_terminal("INR",
58+
b.reg(r#"rupias?"#)?,
59+
|_| Ok(MoneyUnitValue { unit: Some("INR") })
60+
);
5361
b.rule_1_terminal("cent",
5462
b.reg(r#"centavos?"#)?,
5563
|_| Ok(MoneyUnitValue { unit: Some("cent") })
@@ -428,8 +436,8 @@ pub fn rules_time(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> {
428436
|_, integer| helpers::year(integer.value().value as i32)
429437
);
430438
b.rule_1_terminal("day of month (1st)",
431-
b.reg(r#"primero|uno|prem\.?|1o"#)?,
432-
|_| helpers::day_of_month(1)
439+
b.reg(r#"el primero|uno|prem\.?|1o"#)?,
440+
|_| helpers::day_of_month(1)
433441
);
434442
b.rule_2("el <day-of-month> (non ordinal)",
435443
b.reg(r#"el"#)?,
@@ -759,6 +767,11 @@ pub fn rules_time(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> {
759767
duration_check!(),
760768
|_, duration| helpers::cycle_nth(Grain::Second, 0)?.span_to(&duration.value().in_present()?, false)
761769
);
770+
b.rule_2("during <duration>",
771+
b.reg(r#"durante"#)?,
772+
duration_check!(),
773+
|_, duration| Ok(duration.value().clone().prefixed())
774+
);
762775
Ok(())
763776
}
764777

grammar/es/src/training.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ pub fn examples_time(v: &mut Vec<::rustling::train::Example<Dimension>>) {
2121
example!(v, check_moment!(c, [2013, 2, 14]), "pasado mañana");
2222
example!(v, check_moment!(c, [2013, 2, 18]), "lunes", "lu", "lun.", "este lunes");
2323
example!(v, check_moment!(c, [2013, 2, 18]), "lunes, 18 de febrero");
24-
example!(v, check_moment!(c, [2013, 2, 19]), "martes", "ma", "ma.");
2524
example!(v, check_moment!(c, [2013, 2, 13]), "miercoles", "miércoles", "mx", "mié.");
25+
example!(v, check_moment!(c, [2013, 2, 19]), "martes", "ma", "ma.");
2626
example!(v, check_moment!(c, [2013, 2, 14]), "jueves");
2727
example!(v, check_moment!(c, [2013, 2, 15]), "viernes");
2828
example!(v, check_moment!(c, [2013, 2, 16]), "sabado");
@@ -33,7 +33,7 @@ pub fn examples_time(v: &mut Vec<::rustling::train::Example<Dimension>>) {
3333
example!(v, check_moment!(c, [2013, 7, 4]), "el 4 de julio", "el 4/7");
3434
example!(v, check_moment!(c, [2013, 3, 3]), "el 3 de marzo", "3 de marzo", "el 3-3");
3535
example!(v, check_moment!(c, [2013, 4, 5]), "el 5 de abril", "5 de abril");
36-
example!(v, check_moment!(c, [2013, 3, 1]), "el 1 de marzo", "1 de marzo", "el primero de marzo", "el uno de marzo", "primero de marzo", "uno de marzo");
36+
example!(v, check_moment!(c, [2013, 3, 1]), "el 1 de marzo", "1 de marzo", "el primero de marzo", "el uno de marzo", "uno de marzo");
3737
example!(v, check_moment!(c, [2013, 3, 1]), "1-3-2013", "1.3.2013", "1/3/2013");
3838
example!(v, check_moment!(c, [2013, 2, 16]), "el 16", "16 de febrero");
3939
example!(v, check_moment!(c, [2013, 2, 17]), "el 17", "17 de febrero", "17-2", "el 17/2");

grammar/it/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "rustling-ontology-it"
3+
version = "0.17.4"
4+
authors = ["hdlj <[email protected]>"]
5+
6+
[dependencies]
7+
rustling = { git="https://github.com/snipsco/rustling", tag="0.9.0" }
8+
rustling-ontology-moment = { path="../../moment"}
9+
rustling-ontology-values = { path="../../values"}

grammar/it/src/lib.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
extern crate rustling;
2+
#[macro_use]
3+
extern crate rustling_ontology_values;
4+
extern crate rustling_ontology_moment;
5+
6+
mod rules;
7+
mod training;
8+
9+
use rustling_ontology_values::DimensionKind::*;
10+
11+
pub fn rule_set() -> ::rustling::RustlingResult<::rustling::RuleSet<rustling_ontology_values::Dimension>> {
12+
let mut b = ::rustling::RuleSetBuilder::new(
13+
::rustling::BoundariesChecker::detailed(),
14+
::rustling::BoundariesChecker::separated_alphanumeric_word());
15+
rules::rules_numbers(&mut b)?;
16+
rules::rules_time(&mut b)?;
17+
rules::rules_cycle(&mut b)?;
18+
rules::rules_duration(&mut b)?;
19+
rules::rules_temperature(&mut b)?;
20+
rules::rules_finance(&mut b)?;
21+
rules::rules_percentage(&mut b)?;
22+
Ok(b.build())
23+
}
24+
25+
pub fn dims() -> Vec<rustling_ontology_values::DimensionKind> {
26+
return vec![Number, Ordinal, Duration, Time, Temperature, AmountOfMoney, Percentage];
27+
}
28+
29+
pub fn examples() -> Vec<::rustling::train::Example<rustling_ontology_values::Dimension>> {
30+
let mut v = vec![];
31+
training::examples_numbers(&mut v);
32+
training::examples_time(&mut v);
33+
training::examples_finance(&mut v);
34+
v
35+
}
36+
37+
#[cfg(test)]
38+
mod test {
39+
use rustling::*;
40+
use rustling_ontology_values::dimension::Dimension;
41+
42+
use super::*;
43+
fn assert_examples(rules: &RuleSet<Dimension>, examples: Vec<Example<Dimension>>) {
44+
for ex in examples.iter() {
45+
let stash = rules.apply_all(&ex.text.to_lowercase()).unwrap();
46+
let correct_results = stash
47+
.into_iter()
48+
.filter(|candidate| candidate.root_node.byte_range == Range(0, ex.text.len()) && ex.predicate.check(&candidate))
49+
.collect::<Vec<_>>();
50+
assert!(!correct_results.is_empty(), format!("No full match found for: {:?}", ex.text));
51+
}
52+
}
53+
#[test]
54+
fn test_examples() {
55+
let rules = rule_set().unwrap();
56+
let examples = examples();
57+
assert_examples(&rules, examples);
58+
}
59+
}

0 commit comments

Comments
 (0)