# 日期选择器的自然语言处理

**URL:** https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608
**Category:** Feature
**Created:** [2021年八月7日 18:18 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608 "2021-08-07T18:18:57Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [2021年八月7日 18:18 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/1 "2021-08-07T18:18:57Z")

</div>

我们的日期选择器和转换功能非常强大。我很希望我们能简化在帖子中添加日期/时间的操作。一种常见的实现方式是通过自然语言处理。像 iOS 上的 Fantastical 这样的应用多年来一直利用这一功能进行日期输入。

你不再需要费力地用鼠标输入日期，而是可以直接输入类似以下内容：

- `monday at 2pm`（周一下午 2 点），系统将输出转换为你所在时区的日期和时间
- `next friday at 10am NZST`（下周五上午 10 点，新西兰标准时间），系统将输出下周五在新西兰标准时间下的日期和时间
- `11am`（上午 11 点），系统将输出今天的日期及上午 11 点
- `8/9 to 8/13`（8 月 9 日至 8 月 13 日），系统将输出一个日期范围

这一功能可以替换编辑器中点击日历图标后弹出的模态框，改为一个文本框（并附带一个“高级”按钮，用于显示现有模态框的内容）；或者通过键盘快捷键触发一个独立的模态框。

---

<div class="post-metadata">

### Author: ![Grayden\_Shand](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/grayden_shand/32/166586_2.png) [@Grayden\_Shand](https://meta.discourse.org/u/Grayden_Shand)
#### Post date: [2021年八月10日 13:19 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/2 "2021-08-10T13:19:24Z")

</div>

这个库可能有助于实现：[GitHub - wanasit/chrono: A natural language date parser in Javascript · GitHub](https://github.com/wanasit/chrono)

不过，我怀疑要为它提供稳健的多语言支持会是一个挑战。

> 目前完全支持的语言包括 `en`、`ja` 和 `fr`（`de` 和 `pt` 为部分支持）。v1 中的其他语言（`nl` 和 `zh`）正在开发中。

* * *

另外，另一种值得考虑的 UX 模式是自动将帖子正文中的日期字符串替换为 Discourse 的日期/时间对象。这有点像“一键化”，但针对的是日期。例如，如果我在帖子中输入“下周一下午 2 点”，它会自动将其转换为 2021-08-17T18:00:00Z。

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [2021年八月10日 15:58 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/3 "2021-08-10T15:58:24Z")

</div>

> [@Grayden\_Shand](#):
>
> 另外，另一个值得考虑的 UX 模式是自动将帖子正文中的日期字符串替换为 Discourse 的日期/时间对象。这有点像“一键式”处理，但针对的是日期。例如，如果我在帖子中输入“下周一下午 2 点”，它会自动将其转换为 2021 年 8 月 17 日 下午 1:00。

我非常喜欢这个想法！

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2022年一月17日 21:33 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/4 "2022-01-17T21:33:19Z")

</div>

我很喜欢这个想法，你能给我展示一下你设想的 UI 模型吗？这正是这里所缺少的。

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [2022年一月17日 22:04 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/5 "2022-01-17T22:04:15Z")

</div>

可能甚至不需要用户界面。帖子烘焙后，NLP 可以进行处理，返回到客户端并用一个简单的模态框进行确认：

```plaintext
找到 1 个日期。您想将其转换为动态时间戳吗？
- 星期二下午 2 点 --> [discourse date]

```

或者，也可以更简单。单击日历图标，而不是日期选择器，它会变成一个简单的文本框。

 ![image](https://global.discourse-cdn.com/meta/original/3X/8/2/82c8854f0be15d24eed67b2d70af62e385e21237.png)

并且，类似于我们的邀请模态框，可以有一个用于高级控件的按钮，该按钮会显示我们现有的日期/时间/时区选择器，以获得更精细化的选项。

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2022年一月17日 22:07 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/6 "2022-01-17T22:07:12Z")

</div>

我猜这应该由 @j.jaffeux 来决定，不确定这是否符合我们目前的 UI？我也不确定普通人是否愿意输入这么多内容，尤其是在智能手机上？

这在谷歌日历中是有意义的，因为你可以在 **输入事件名称** 时执行此操作，例如，输入

“水管工”

而不是输入

“水管工 下午 3 点 - 下午 5 点”

但这很容易，因为我使用的是带键盘的设备。

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [2022年一月17日 22:09 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/7 "2022-01-17T22:09:31Z")

</div>

> [@codinghorror](#):
>
> 我也不确定普通人是否_想_输入那么多内容，尤其是在智能手机上？

我实际上觉得我们的模态框在桌面和移动设备上都很麻烦，这就是我最初提出这个功能的原因。在模态框中输入`today at 11:31am`比使用滚动轮或点击大型模态框要快得多。许多日历已经这样做了，这使得人们更容易理解。

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2022年一月17日 22:13 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/8 "2022-01-17T22:13:20Z")

</div>

在桌面端我同意。在智能手机上不同意，因为在智能手机上打字太 **痛苦** 了。也许这可以只在桌面端生效？

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [2022年一月17日 22:13 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/9 "2022-01-17T22:13:47Z")

</div>

> [@codinghorror](#):
>
> 也许这可以是一个仅限桌面的行为？

我个人对此没意见。

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2022年一月17日 22:14 UTC](https://meta.discourse.org/t/natural-language-processing-for-date-chooser/199608/10 "2022-01-17T22:14:55Z")

</div>

日期中有大量代码实际上已经完成了此操作，我们与 @daniel 一起完成了这项工作。

基本上，有三种方法可以解决此问题：

- 一个更好的模态框
- 某个命令
- 文本解析

文本解析很棒，但它并不能解决所有问题，而且我们还必须使其适用于所有地区。但我同意我们可以启用对一小部分的支持。它基本上已经在这里了，我只需要完成/启用它。
