GithubHelp home page GithubHelp logo

hors's Introduction

Hors

Hors — это Библиотека .NET Core для распознавания даты и времени в естественной речи на русском языке. Умеет понимать сложные конструкции с абсолютными и относительными датой и временем. В том числе временные периоды. Хорс — это славянский бог солнца.

Библиотека Hors лежит в основе работы голосового навыка Мой Секретарь в Яндекс.Алисе.

Установка

Через NuGet

Install-Package Hors -Version 0.9.25

Примеры работы

(Текущая дата в примерах: 14.07.2019 3:40)

> 26 марта в 11 вечера будет красивый закат.
>
> {0} будет красивый закат.
> [Type=Fixed, DateFrom=26.03.2019 23:00:00, StartIndex=0, EndIndex=20]
> Будет ли в сентябре 25 и 26 числа поход?
>
> Будет ли {0} {1} поход?
> [Type=Fixed, DateFrom=25.09.2019 0:00:00, DateTo=25.09.2019 23:59:59, StartIndex=9, EndIndex=33]
> [Type=Fixed, DateFrom=26.09.2019 0:00:00, DateTo=26.09.2019 23:59:59, StartIndex=9, EndIndex=33]
> Я был в гостях неделю 2 дня и час назад.
>
> Я был в гостях {0}.
> [Type=SpanBackward, DateFrom=05.07.2019 3:40:00, Span=-9.01:00:00, StartIndex=15, EndIndex=39]
> В следующий четверг с 9 утра до 6 вечера важный экзамен!
>
> {0} важный экзамен!
> [Type=Period, DateFrom=18.07.2019 9:00:00, DateTo=18.07.2019 18:00:00, StartIndex=0, EndIndex=40]
> Я был на даче в прошлые выходные
>
> Я был на даче {0}
> [Type=Period, DateFrom=06.07.2019 0:00:00, DateTo=07.07.2019 23:59:59, StartIndex=14, EndIndex=32]
> Позавчера в 6:30 состоялось совещание, а завтра днём будет хорошая погода.
>
> {0} состоялось совещание, а {1} будет хорошая погода.
> [Type=Fixed, DateFrom=12.07.2019 6:30:00, StartIndex=0, EndIndex=16]
> [Type=Fixed, DateFrom=15.07.2019 12:00:00, StartIndex=41, EndIndex=52]

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

  • На вход можно подать строку или IEnumerable<string>, если строка уже разбита на токены.
  • Все числа должны быть числами, а не прописью.
  • Вторым аргументом подаётся дата пользователя, относительно которой нужно измерять промежутки (например если пользователь скажет "день назад"). В большинстве ситуаций логично подавать просто текущую дату, но могут быть исключения.
  • Третьим аргументом передаётся int collapseDistance — максимальное количество слов между двумя датами, при котором Hors будет пытаться объединить эта даты в одну, если возможно. Например: завтра втреча с другом в 12 превратится в {завтра в 12} встреча с другом. По-умолчанию 3.
using Hors;

var hors = new HorsTextParser();
var result = hors.Parse("26 марта в 11 вечера будет красивый закат", DateTime.Now);

var text = result.Text; // -> string: "будет красивый закат"
var formatText = result.TextWithTokens; // -> string: "{0} будет красивый закат"
var date = result.Dates[0].DateFrom; // -> DateTime: 26.03.2019 23:00:00

Метод Parse возвращает объект HorsParseResult

HorsParseResult

Поле Тип Описание
SourceText string Исходная строка без изменений
Text string Исходная строка с полной пунктуацией, из которой убраны все токены, отвечающие за распознанные дату-время
Tokens List<string> Текст, разбитый на токены с убранными знаками препинания. Вместо дат и времени будут токены {x}, где x — номер индекса токена в массиве Dates
Dates List<DateTimeToken> Список распознанных дат и времён, см. ниже
TextWithTokens string Исходная строка, где вместо всех распознанных участков даты и времени вставлен токен {x}, в котором x — номер индекса токена в массиве Dates
CleanTextWithTokens string TextWithTokens после токенизации с убранными знаками препинания

DateTimeToken

Поле Тип Описание
Type Enum Fixed — фиксированная дата, обозначает какой-то конкретный день или момент внутри дня; Period — промежуток; SpanForward — обозначение периода времени со сдвигом вперед, например "через 1 час"; SpanBackward — период времени со сдвигом в прошлое, например "5 часов назад"
DateFrom DateTime Дата начала периода. Для фиксированного момента дата этого момента.
DateTo DateTime Дата конца периода. Если фиксированный момент — целый день, то DateFrom и DateTo будут, соответственно, началом и концом дня. Если зафиксирован конкретный час, то они будут равны.
Span TimeSpan Величина периода смещения для Type = SpanForward и Type = SpanBackward. При этом в DateFrom лежит дата с этим смещением относительно даты пользователя.
HasTime bool Показывает, было ли для этого токена установлено время в процессе ввода дат, или только день
StartIndex int Индекс начала подстроки с данной датой в исходной строке, с нуля
EndIndex int Индекс конца подстроки с данной датой в исходной строке, не включительно

hors's People

Contributors

denisnp avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.