<commit_before>Sherlock
========

https://github.com/neilgupta/Sherlock/

**Sherlock parses events written in plain English, and returns an object defining a basic event.
[Try demo](http://neilgupta.github.com/Sherlock/).**

It was designed to allow event creation using natural language. For example, *"The party is tomorrow from 3pm to 5pm."* will return:

```javascript
{
  eventTitle: 'The party',
  startDate: Sat Dec 01 2012 15:00:00 GMT-0600 (CST),
  endDate: Sat Dec 01 2012 17:00:00 GMT-0600 (CST),
  isAllDay: false
}
```

Sherlock can handle times, days, date ranges, event titles, and more. It supports a wide variety of input formats that are common in US English. [Try the demo!](http://neilgupta.github.com/Sherlock/)

Just like Sherlock the detective finds the clues needed to solve a mystery by looking at a crime scene, Sherlock.js finds the components needed to define an event by looking at a sentence. But Sherlock doesn't work alone...

# Watson

Sherlock is great for parsing sentences into basic events, but what if you need to manipulate the data for your specific use case or add some extra properties to the returned object? Just tell Watson to help Sherlock out!

Watson provides a preprocessor and postprocessor layer on Sherlock that allows you to customize Sherlock's input and output. With the preprocessor, you can manipulate the input string before it is parsed by Sherlock. The postprocessor allows you to modify the data returned by Sherlock, or add any additional properties.
<commit_msg>add npm version badge<commit_after>Sherlock
========

https://github.com/neilgupta/Sherlock/

[![npm version](https://badge.fury.io/js/sherlockjs.svg)](https://badge.fury.io/js/sherlockjs)

**Sherlock parses events written in plain English, and returns an object defining a basic event.
[Try demo](http://neilgupta.github.com/Sherlock/).**

It was designed to allow event creation using natural language. For example, *"The party is tomorrow from 3pm to 5pm."* will return:

```javascript
{
  eventTitle: 'The party',
  startDate: Sat Dec 01 2012 15:00:00 GMT-0600 (CST),
  endDate: Sat Dec 01 2012 17:00:00 GMT-0600 (CST),
  isAllDay: false
}
```

Sherlock can handle times, days, date ranges, event titles, and more. It supports a wide variety of input formats that are common in US English. [Try the demo!](http://neilgupta.github.com/Sherlock/)

Just like Sherlock the detective finds the clues needed to solve a mystery by looking at a crime scene, Sherlock.js finds the components needed to define an event by looking at a sentence. But Sherlock doesn't work alone...

# Watson

Sherlock is great for parsing sentences into basic events, but what if you need to manipulate the data for your specific use case or add some extra properties to the returned object? Just tell Watson to help Sherlock out!

Watson provides a preprocessor and postprocessor layer on Sherlock that allows you to customize Sherlock's input and output. With the preprocessor, you can manipulate the input string before it is parsed by Sherlock. The postprocessor allows you to modify the data returned by Sherlock, or add any additional properties.

{'fraction_non_alphanumeric': 0.07482561826252378, 'fraction_numerical': 0.02155992390615092, 'mean_word_length': 4.554577464788732, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6138913', 'n_tokens_mistral': 933, 'n_tokens_neox': 832, 'n_words': 441}