#parser #event #events #nlp #date #icalendar #english #time #language #natural


Rust NLP library for parsing English natural language into icalendar events

2 releases

0.1.1 May 23, 2021
0.1.0 Apr 21, 2020

MIT license

925 lines

Event Parser

Natural language date, time and event parsing libraries for Rust

Build crates.io

Event Parser contains an date and time natural language parsing library, and event parsing library, as well as a client that demonstrates how to leverage these crates for a simple command-line tool. Written in Rust, the libraries build on the chrono and regex crates to deliver a library that provides more extensive coverage of natural language statements.

Date Time Parser: Rust NLP Library

It aims to parse unstructered text into NaiveDate and NaiveTime formats.

  • Date Time Parser has the ability to be timezone aware, but defaults to UTC.
  • Allows for parse to be relative to current date/time, or relative to a custom date/time.


Put this in your Cargo.toml:

date_time_parser = "0.1.0"

Then put this in your crate root:

extern crate date_time_parser;

Example: Find a Date

General use of this package involves passing English natural language that includes a date to the DateParser struct to parse the expression. If a date is found, it will parse the expression into the NaiveDate format.

use date_time_parser::DateParser;
use chrono::NaiveDate;

let date = DateParser::parse("Lunch on June 5th");
assert_eq!(date, Some(NaiveDate::from_ymd(2020, 6, 5)));

For more examples and usage, please refer to the docs.

Event Parser: Rust NLP Library

Aims to parse unstructered text into iCalendar Events.

  • Parses text into events with a date and time relative to the local time.
  • Event Parser defaults to be timezone aware.
  • Leverages the crate date_time_parser for parsing out the dates and time of events.


Put this in your Cargo.toml:

event_parser = "0.1.0"

Then put this in your crate root:

extern crate event_parser;

Example: Dinner at 7pm

Pass English natural language that describes an event to the to_event function to parse the expression. It will parse the expression into the iCalendar Events format.

If applicable, the event will have a start and end time, or be classified as an all-day event. Addtionally, a date will be parsed for the event, defaulting to the current day if no date is found. The event will also have a summary (the name of the event), if one is given.

use event_parser::to_event;
use chrono::{Duration, Local};
use icalendar::{Component, Event};

let event = to_event("Dinner at 7");
let expected_event = Event::new()
    .starts(Local::today().and_hms(19, 0, 0))
    .ends(Local::today().and_hms(19, 0, 0) + Duration::hours(1))
assert!(equal(event, expected_event));

For more examples and usage, please refer to the docs.

Command Line Tool

To play around with what is possible with the event_parser library, we've provided a command-line tool to be able to test different inputs easily. Simply download the repo and from the root of the project run cargo run and type an natural English language event to see how it is parsed!

Development setup

Install the Rust programming language, and then clone this repository.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone https://github.com/isaacrlee/event-parser.git

To run the program and easily play with inputs:

cargo run

To run the test suite:

cargo test --all


License: MIT

The MIT License

Distributed under the MIT license. See LICENSE for more information.
Copyright (c) 2020 Isaac Lee and Alex Grimes


~72K SLoC