java - 如何从文本中检索各种日期和时间值

标签 java date nlp gate temporal

我想从一组字符串中检索日期和其他时间实体。这是否可以在不解析 JAVA 中的日期字符串的情况下完成,因为大多数解析器处理的输入模式范围有限。但是输入是一个手动输入,因此在这里是模棱两可的。

输入可以是这样的:

12th Sep |mid-March |12.September.2013

Sep 12th |12th September| 2013

Sept 13 |12th, September |12th,Feb,2013

我看过很多关于在 Java 中查找日期的答案,但大多数答案都没有涉及如此广泛的输入模式。

我已经尝试使用 SimpleDateFormat 类并使用一些 parse() 函数来检查解析函数是否中断,这意味着它不是日期。我试过使用 regex 但我不确定它是否适合这种情况。我也用过 ClearNLP注释日期,但它没有提供可靠的注释集。

获取这些值的最接近方法可能是使用下面提到的责任链。是否有一个库具有一组日期模式。也许我可以使用它?

最佳答案

解决这个问题的一种简洁和模块化的方法是使用链, 链中的每个元素都试图将输入字符串与正则表达式进行匹配, 如果正则表达式与输入字符串匹配,那么您可以将输入字符串转换为可以提供 SimpleDateFormat 的内容,以将其转换为您喜欢的数据结构(日期?或更适合您需要的不同时间表示)并返回它,如果regexp 不匹配链元素,只是委托(delegate)给链中的下一个元素。

链中每个元素的职责只是针对字符串测试正则表达式,给出结果或要求链中的下一个元素试一试。

可以轻松创建和组合链,而无需更改链中每个元素的实现。

最终结果与@KirkoR 的响应相同,代码多了“一点”(:D),但采用了模块化方法。 (我更喜欢正则表达式方法而不是 try/catch 方法)

一些引用:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

关于java - 如何从文本中检索各种日期和时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098511/

相关文章:

python - 来自 "ImportError: cannot import name ' 的变压器 : Error importing packages. 'torch.optim.lr_scheduler' SAVE_STATE_WARNING'

php - 从多个句子中选择或生成规范变体

java - 如何使用\Q\E 通过 DOTALL 转义文字化 unicode 字符?

java - 使用 Android 手机控制桌面应用程序

java - 向 inputText 添加掩码后丢失默认输入

c# - Lucene - 将多字段查询与 boolean 查询相结合

java : How can I cast Date from "Thu May 01 00:00:00 WEST 2014 " to "2014-01-05 00:00:00.0"

python - 如何生成名称中包含今天日期的文件?

php - 24小时值(value)

cocoa - 文本自动大小写转换