Обработка естественного языка для выбора даты

Наш выбор даты и конвертация — мощная функция. Мне бы хотелось, чтобы мы сделали добавление даты/времени к посту более простым. Распространённый способ реализации этого — обработка естественного языка. Приложения вроде Fantastical на iOS используют это уже много лет для ввода дат.

Вместо того чтобы возиться с мышью для ввода даты, вы могли бы просто ввести что-то вроде:

  • понедельник в 14:00, что выведет дату и время в вашем часовом поясе
  • следующая пятница в 10:00 NZST, что выведет дату и время на следующую пятницу в часовом поясе NZST
  • 11:00, что выведет сегодняшнюю дату в 11:00
  • 8/9 — 8/13, что выведет диапазон дат.

Это могло бы либо заменить модальное окно, открываемое при нажатии на значок календаря в редакторе, текстовым полем (с кнопкой «Дополнительно», показывающей содержимое текущего модального окна), либо отдельным модальным окном, вызываемым сочетанием клавиш.

9 лайков

Эта библиотека может помочь с реализацией: GitHub - wanasit/chrono: A natural language date parser in Javascript · GitHub

Тем не менее, я подозреваю, что обеспечение надежной поддержки языков для этого будет сложной задачей.

Полностью поддерживаемыми языками в настоящее время являются en, ja и fr (de и pt поддерживаются частично). Другие языки из v1 (nl и zh) находятся в разработке.


Также стоит рассмотреть ещё один паттерн UX: автоматическую замену строк с датами в теле сообщения на объекты даты/времени Discourse. Что-то вроде одноблочного отображения, но для дат. Например, если я напишу «в следующий понедельник в 14:00» в своём сообщении, это автоматически преобразуется в 2021-08-17T18:00:00Z.

5 лайков

Мне очень нравится эта идея!

3 лайка

Мне очень нравится эта идея. Можешь показать макет интерфейса, как ты видишь его работу? Именно этого здесь не хватает.

Возможно, интерфейс вообще не потребуется. Когда пост будет сформирован, NLP сможет обработать данные, вернуться к клиенту и подтвердить всё через простое модальное окно:

Найдена 1 дата. Хотите преобразовать её в динамические метки времени?
- вторник в 14:00 --> [дата Discourse]

Или это может быть ещё проще: нажмите на значок календаря, и вместо выбора даты появится простое текстовое поле.

Аналогично нашему модальному окну приглашений, может быть добавлена кнопка «Расширенные настройки», которая откроет существующий выборер даты/времени/часового пояса для более детальных опций.

Думаю, это решать @j.jaffeux. Не уверен, что это вообще вписывается в наш текущий UI. Также не уверен, что обычные пользователи хотят столько печатать, а не кликать, особенно на смартфоне.

Это имеет смысл в Google Календаре, потому что это можно делать прямо при вводе названия события, например, вместо того чтобы вводить

«Сантехник»

вы вводите

«Сантехник 15:00–17:00»

но это удобно, потому что я использую устройство с клавиатурой.

На самом деле я считаю наше модальное окно неудобным как на десктопе, так и на мобильных устройствах, именно поэтому я и предложил эту функцию изначально. Гораздо быстрее ввести сегодня в 11:31 в модальном окне, чем крутить скролл-колеса или кликать по большому модальному окну. Тот факт, что многие календари уже используют такой подход, снижает когнитивную нагрузку на пользователей при освоении этого метода.

1 лайк

С desktop согласен. На смартфоне не согласен, потому что печатать на нём — это просто варварство. Может, это поведение стоит оставить только для desktop?

1 лайк

Лично я не против этого.

В коде дат уже есть много того, что это делает, мы работали над этим с @daniel

По сути, есть три способа решить эту задачу:

  • улучшить модальное окно
  • добавить !команду
  • использовать парсинг текста

Парсинг текста хорош, но он не решает всех проблем, и к тому же нам нужно обеспечить его работу для всех локалей. Однако я согласен, что можно включить поддержку небольшого подмножества. В основном это уже реализовано, мне осталось лишь завершить и активировать эту функцию.

5 лайков