2.4.0 • Published 2 years ago

@alordash/date-parser v2.4.0

Weekly downloads
79
License
MIT
Repository
github
Last release
2 years ago

@alordash/date-parser

$ npm i @alordash/date-parser

Links

Описание

Извлекает даты о разных событиях из человеческого сообщения с точностью до секунды.
Способна возвращать описание события без слов, используемых для определения даты.
В библиотеке используется моя реализация алгоритма Дамерау-Левенштейна, чтобы верно распознавать слова, написанные с ошибками.
Поддерживает Русский и Английский языки.
Библиотека проста в использовании, а большое количество параметров позволит вам с максимальной точностью определять даты.

Документация

Чтобы правильно использовать эту библиотеку, прочтите документацию по её классам.

TimeList class:

Каждый параметер типа Number, который отражает значение определенного типа времени.
Если тип значения undefined, то это означает что в исходной строке не было дано определение для данного типа времени.

Параметры:

  • TimeList.dates {Number} — Date.setDate(TimeList.dates);
  • TimeList.hours {Number} — Date.setHours(TimeList.hours);
  • TimeList.minutes {Number} — Date.setMinutes(TimeList.minutes);
  • TimeList.months {Number} — Date.setMonth(TimeList.months);
  • TimeList.seconds {Number} — Date.setSeconds(TimeList.seconds);
  • TimeList.years {Number} — Date.setFullYear(TimeList.years);

ParsedDate class:

Каждый объект типа ParsedDate отражает определенные дату и событие, извлеченные из исходной строки.

Параметры:

  • ParsedDate.confidence {Number} — уровень верности этого ParsedDate.
  • ParsedDate.contexts {Array.\<Number>} — технический параметр.
  • ParsedDate.target_date {TimeList} — содержит всю информацию о целевой дате события.
  • ParsedDate.period_time {TimeList} — содержит всю информацию о периодичности события.
  • ParsedDate.max_date {TimeList} — содержит всю информацию о максимальной дате события.
  • ParsedDate.string {String} — описание события без слов, использованных для определения даты.
  • ParsedDate.isOffset {Boolean} — является ли описанием даты с помощью слова "через".
  • ParsedDate.isFixed {Boolean} — содержит ли даты с точным определением (например "9 часов утра").

Функция parseDate(string, errorLimit, minimumPrevalence): {Array.\<ParsedDates>}

Аргументы

  1. string {String} — исходная строка.
  2. errorLimit {Number} — От 0.0 до 1.0, чем меньше — тем меньше результатов. Используется для распознавания слов с ошибками.
  3. minimumPrevalence {Number} — От 0 до 100, чем меньше — тем больше результатов. Используется для фильтрации редких типов определения времени.

Использование

const { parseDate } = require('@alordash/date-parser');

let string = 'Вернуться домой в 8:30 вечера и приготовить ужин. Купить молоко и помыть машину в понедельник.';
let result = parseDate(string);

console.log('время 1 :>> ', JSON.stringify(result[0].target_date));
//=> время 1 :>>  {"minutes":30,"hours":20}

console.log('событие 1 :>> ', result[0].string);
//=> событие 1 :>> Вернуться домой и приготовить ужин

console.log('время 2 :>> ', JSON.stringify(result[1].target_date));
//=> время 2 :>>  {"dates":31} //сейчас 30.08.20., 31.08.20 это понедельник

console.log('событие 2 :>> ', result[1].string);
//=> событие 2 :>> Купить молоко и помыть машину

//————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
string = 'Сходить к врачу с 9 утра до 11 вечера в следующую субботу и сходить в магазин в 7 вечера';
result = parseDate(string);

console.log('максимальная дата 1 :>> ', JSON.stringify(result[0].max_date));
//=> максимальная дата 1 :>>  {"dates":36,"hours":23} //сейчас 30.08.20, следующая суббота в 05.09.20, что, технически, и есть 36.08.20

console.log('целевая дата 1 :>> ', JSON.stringify(result[0].target_date));
//=> целевая дата 1 :>>  {"hours":9}

console.log('событие 1 :>> ', result[0].string);
//=> событие 1 :>> Сходить к врачу

console.log('целевая дата 2 :>> ', JSON.stringify(result[1].target_date));
//=> целевая дата 2 :>>  {"hours":19}

console.log('событие 2 :>> ', result[1].string);
//=> событие 2 :>> сходить в магазин

//————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
string = 'На 19 Сентября с 9:00 до 20:00 вставать из-за компьютера каждые 15 минут и делать разминку';
result = parseDate(string);

console.log('целевая дата :>> ', JSON.stringify(result[0].target_date));
//=> целевая дата :>>  {"dates":19,"hours":9,"minutes":0,"months":9}

console.log('период :>> ', JSON.stringify(result[0].period_time));
//=> период :>>  {"minutes":15}

console.log('максимальная дата :>> ', JSON.stringify(result[0].maximum_date));
//=> максимальная дата :>>  {"hours":20,"minutes":0}

console.log('событие :>> ', JSON.stringify(result[0].string));
//=> событие :>> 'вставать из-за компьютера и делать разминку'

Особенности

ParsedDate.toString(): {String}

Возвращает описание события.

ParsedDate.valueOf(): {{target_date: Date, period_time: Date, max_date: Date}}

Собирает все найденные типы времен в дату и возвращает объект типа

{
    target_date: Date,  
    period_time: Date,  
    max_date: Date  
}  

Для не найденных типов времени у target_dates и max_dates используются текущие значения даты (new Date()).
Для не найденных типов времени у period_times используются значения нулевой даты (new Date(0)).

2.4.0

2 years ago

2.3.17

3 years ago

2.3.16

3 years ago

2.3.13

3 years ago

2.3.12

3 years ago

2.3.15

3 years ago

2.3.14

3 years ago

2.3.11

3 years ago

2.3.8

3 years ago

2.3.7

3 years ago

2.3.9

3 years ago

2.3.6

3 years ago

2.3.10

3 years ago

2.3.5

3 years ago

2.3.4

3 years ago

2.3.3

3 years ago

2.3.2

3 years ago

2.3.1

3 years ago

2.2.10

3 years ago

2.3.0

3 years ago

2.2.7

3 years ago

2.2.6

3 years ago

2.2.9

3 years ago

2.2.8

3 years ago

2.2.5

3 years ago

2.2.4

3 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.1.10

3 years ago

2.1.9

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.6

3 years ago

2.1.5

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.4.2

3 years ago

1.4.1

3 years ago

1.4.0

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.9

3 years ago

1.2.8

3 years ago

1.2.7

4 years ago

1.2.6

4 years ago

1.2.5

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.12

4 years ago

1.1.14

4 years ago

1.1.13

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.2

4 years ago

1.0.2

4 years ago

1.1.0

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.0.1

4 years ago