날짜 선택기를 위한 자연어 처리

우리 날짜 선택기와 변환 기능은 매우 강력합니다. 게시물에 날짜/시간을 추가하는 과정을 더 간단하게 만들어 보고 싶습니다. 일반적으로 자연어 처리(NLP)를 통해 이를 구현합니다. iOS의 Fantastical 같은 앱은 수년 동안 날짜 입력에 이 방식을 사용해 왔습니다.

마우스를 조작하며 날짜를 입력하는 대신, 다음과 같은 문구를 입력할 수 있습니다:

  • monday at 2pm → 사용자의 시간대에 맞는 날짜와 시간을 출력합니다.
  • next friday at 10am NZST → 다음 금요일의 NZST 기준 날짜/시간을 출력합니다.
  • 11am → 오늘 날짜의 오전 11시를 출력합니다.
  • 8/9 to 8/13 → 날짜 범위를 출력합니다.

이 기능은 캘린더 아이콘을 클릭할 때 표시되는 모달을 텍스트 입력창(기존 모달 내용을 보여주는 고급 버튼 포함)으로 대체하거나, 키보드 단축키로 실행되는 별도의 모달로 구현할 수 있습니다.

9개의 좋아요

구현에 도움이 될 수 있는 라이브러리가 있습니다: GitHub - wanasit/chrono: A natural language date parser in Javascript · GitHub

그러나 이 라이브러리로 견고한 언어 지원을 얻는 것은 어려울 것이라고 생각합니다.

현재 완전히 지원되는 언어는 en, ja, fr입니다 (de와 pt는 부분적으로 지원됨). v1의 다른 언어(nl와 zh)는 개발 중입니다.


또한 고려해 볼 수 있는 다른 UX 패턴은 게시물의 본문에서 날짜 문자열을 Discourse의 날짜/시간 객체로 자동으로 대체하는 것입니다. 일종의 원박스(one-boxing)와 비슷하지만 날짜에 적용되는 방식입니다. 예를 들어 게시글에 "다음 주 월요일 오후 2시"라고 입력하면 자동으로 [date=2021-08-17 time=14:00:00 timezone=“America/New_York”]로 변환됩니다.

5개의 좋아요

정말 좋은 아이디어입니다!

3개의 좋아요

이 아이디어가 정말 마음에 드는데, 어떻게 작동할지 UI 목업을 보여줄 수 있나요? 여기서는 그 부분이 빠져 있네요.

UI가 필요하지 않을 수도 있습니다. 게시물이 생성되면, NLP가 이를 처리하고 클라이언트로 돌아와 간단한 모달로 확인을 요청할 수 있습니다:

1개의 날짜가 발견되었습니다. 동적 타임스탬프로 변환하시겠습니까?
- tuesday at 2pm --> [discourse date]

또는 더 단순하게 만들 수도 있습니다. 달력 아이콘을 클릭하면 날짜 선택기가 아닌 간단한 텍스트 입력창이 나타납니다.

또한 초대 모달과 유사하게, 고급 컨트롤을 위한 버튼을 제공하여 더 세밀한 옵션을 위해 기존 날짜/시간/시간대 선택기를 표시할 수 있습니다.

결국 @j.jaffeux가 판단해야 할 것 같은데, 현재 우리가 가진 UI와 잘 어울리는지 확실하지 않아요. 또한 일반 사용자들이 특히 스마트폰에서 이렇게 많은 내용을 직접 입력하는 것보다 클릭하는 것을 더 선호할지 저도 잘 모르겠어요.

Google 캘린더에서는 이벤트 이름을 입력하는 동안 이렇게 할 수 있기 때문에 의미가 있어요. 예를 들어

“Plumber”

라고 입력하는 대신

“Plumber 3pm - 5pm”

이라고 입력할 수 있죠.

하지만 키보드가 있는 기기를 사용 중이라서 저에게는 쉬운 일이에요.

저는 데스크톱과 모바일 모두에서 모달 사용이 번거롭게 느껴져서 이 기능을 처음 제안한 것입니다. 모달에서 오늘 오후 11:31이라고 입력하는 것이 스크롤 휠을 사용하거나 큰 모달 안에서 여기저기 클릭하는 것보다 훨씬 빠릅니다. 이미 많은 캘린더 앱이 이렇게 작동하고 있기 때문에, 사용자가 이를 파악하는 데 드는 인지적 부담도 줄어듭니다.

1개의 좋아요

데스크톱에서는 동의합니다. 스마트폰에서는 동의하지 않습니다. 스마트폰에서 타이핑하는 것은 _지옥_이기 때문입니다. 이 기능을 데스크톱 전용으로만 적용하는 것은 어떨까요?

1개의 좋아요

저는 그렇게 해도 괜찮습니다.

dates 코드에는 실제로 이미 이 기능을 구현한 코드가 많이 있으며, @daniel과 함께 이 부분에 대해 작업해 왔습니다.

기본적으로 이 문제를 해결하는 방법은 3가지입니다:

  • 더 나은 모달
  • 어떤 !명령어
  • 텍스트 파싱

텍스트 파싱은 훌륭하지만, 모든 문제를 해결하지는 못하며 모든 로케일에서 작동하도록 만들어야 합니다. 하지만 작은 부분 집합에 대한 지원을 활성화할 수 있다는 데에는 동의합니다. 대부분 이미 구현되어 있어, 마무리하고 활성화하기만 하면 됩니다.

5개의 좋아요