0

这就是问题:

我有一些带有旅行信息的 .csv 文件,日期看起来像字符串(每行代表一次旅行):

  • “一月至五月和十月至十二月的所有星期一。六月至九月的所有日子”
  • “2 月至 6 月的所有星期五”
  • “1 月 10 日至 4 月 30 日的周一、周五、周六和周日”
  • “从 11 月 1 日至 4 月 30 日。除 11 月 2 日至 24 日的星期五和 12 月 2 日至 30 日的星期日以外的所有日子”
  • “从 12 月 2 日到 4 月 28 日的所有星期日”
  • “3月5日、12日、20日、4月11日、18日、5月2日、16日、30日、6月6日、13日、27日”
  • “2 月至 6 月以及 9 月至 12 月的所有星期六”
  • “12 月 1 日至 17 日,1 月 1 日至 31 日”
  • “从 2 月到 11 月的所有星期一”

我必须将字符串解析为日期,并将它们保存在每次旅行的数组中。

问题是我不知道该怎么做。甚至我的大学老师也告诉我他们不知道该怎么做:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html找到/创建模式

解析它们后,我必须搜索两个日期之间的所有旅行。

但是怎么做?如何解析它们?这是可能的?

4

2 回答 2

1

你在 NLP(自然语言处理)领域,在这个领域什么是可能或不可能是模糊的。通过快速的 Google 搜索,我发现Natty Date Parser可能对您有用。

想了解更多关于 NLP 的理论背景,您可能对 Coursera 上斯坦福大学的自然语言处理课程感兴趣(目前该课程尚未开放注册,但讲座是免费提供的。

您还可以使用一组严格的正则表达式,它们只匹配您可能的情况之一,并将它们从最严格到最宽松的情况下应用。

我要定义解决您的问题的第一件事是您期望作为方法输出的内容,因为在某些情况下它是单个日期,在某些情况下是间隔,在某些情况下是多个间隔。

于 2013-06-09T12:02:03.187 回答
1

这需要自然语言处理 (NLP),有关帐户,请参阅 Wikipedia: http ://en.wikipedia.org/wiki/Natural_language_processing 。

您所说的问题非常困难。表示单个日期的方法有很多种,您的示例包括日期范围和用于生成日期的公式。听起来好像你有一个有限的语言子集——经常使用“all”、“from”等。

如果您可以控制语言(即这些语言是由遵守您的文档的人生成的),那么您就有机会将其正式化(尽管这需要大量工作 - 几个月)。如果您不负责它,那么每次出现新短语时,您都必须将其添加到规范中。

我建议您浏览该文件并查找库存短语“所有 [weekdayname]s [from | between | until | before]”。或“在 [一月 | 二月 ...]”。然后用短语替换这些。如果你发现这涵盖了所有情况,你可能能够提取特定的短语”。但如果你有像“下周二”这样的回指,那就更难了。

于 2013-06-09T12:05:11.483 回答