如何从Java中的字符串中识别日期

     2023-02-26     207

关键词:

【中文标题】如何从Java中的字符串中识别日期【英文标题】:How to identify date from a string in Java 【发布时间】:2016-02-06 10:37:01 【问题描述】:

最近我遇到了一个相当“简单”的问题。假设有句子(保存在一个String中),我需要找出这个String中是否有任何日期。挑战在于日期可以采用许多不同的格式。列表中显示了一些示例:

1956 年 6 月 12 日 伦敦,2014 年 10 月 21 日 1999 年 10 月 13 日 01/11/2003

值得一提的是,这些都包含在一个字符串中。举个例子,它可以是:

String s = "This event took place on 13 October 1999.";

在这种情况下,我的问题是如何检测到此字符串中有日期。我的第一种方法是搜索“事件”一词,然后尝试本地化日期。但是随着日期的可能格式越来越多,这个解决方案不是很漂亮。我尝试的第二个解决方案是创建几个月的列表并进行搜索。这有很好的结果,但仍然错过了日期全部用数字表示的情况。

到目前为止我还没有尝试过的一种解决方案是设计正则表达式并尝试在字符串中找到匹配项。不确定此解决方案可能会降低多少性能。

我可能应该考虑什么是一个好的解决方案?以前有没有人遇到过类似的问题,您找到了哪些解决方案?

一件事是肯定没有时间,所以唯一有趣的部分是日期。

【问题讨论】:

我能想到接近这个问题的唯一方法是结合你所有的方法。例如。在字符串中查找月份,然后尝试查找美国日期(MM/DD/YYYY),然后尝试查找欧洲日期(DD.MM.YYYY).....这取决于什么样的字符串你收到!如果某个字符串包含“它发生在 1989 年第二个月的第一天”,您可能无法实现它!) 唯一的办法就是解析你的字符串。 我记得有一个人有同样的问题:***.com/questions/33098511/… 这不是一个简单的问题。如果您需要确定日期是什么,这是无法解决的:您的最后一个示例可能是 11 月 1 日或 1 月 11 日 【参考方案1】:

使用natty.joestelmach.com 库

Natty 是用 Java 编写的自然语言日期解析器。给定一个日期表达式,natty 将应用标准语言识别和翻译技术来生成一个包含可选解析和语法信息的对应日期列表。

import com.joestelmach.natty.*;

List<Date> dates =new Parser().parse("Start date 11/30/2013 , end date Friday, Sept. 7, 2013").get(0).getDates();
        System.out.println(dates.get(0));
        System.out.println(dates.get(1));

//output:
//Sat Nov 30 11:14:30 BDT 2013
//Sat Sep 07 11:14:30 BDT 2013

【讨论】:

在我尝试过的所有东西中,这个效果最好。 我认为GATEANNIE 做得更好。【参考方案2】:

你在Named Entity Recognition之后。我将从Stanford NLP 开始。 7类机型包括日期,但网上demo struggles又漏掉了“13”。 :(

上面提到的 Natty 给出了一个better answer。

【讨论】:

【参考方案3】:

如果它只有一个字符串,您可以使用您提到的正则表达式。必须找到不同的日期格式表达式。这里有些例子: Regular Expressions - dates

如果是文档或大文本,您将需要一个解析器。您可以使用Lexical analysis 方法。

根据某些答案中提到的使用外部库的项目可能是一个好主意。有时这不是一个选择。

【讨论】:

正则表达式对此会很困难【参考方案4】:

我以前用好的precisionrecall 做过这个。你需要GATE 和它的ANNIE 插件。

    使用 GATE UI 工具创建一个 .GAPP 文件,该文件将包含您的 processing resources

    使用.GAPP 文件来使用提取的Date 注释集。

步骤2可以如下进行:

Corpus corpus = Factory.newCorpus("Gate Corpus");
Document gateDoc = Factory.newDocument("This event took place on 13 October 1999.");
corpus.add(gateDoc);
File pluginsHome = Gate.getPluginsHome();
File ANNIEPlugin = new File(pluginsHome, "ANNIE");
File AnnieGapp = new File(ANNIEPlugin, "Test.gapp");
AnnieController =(CorpusController) PersistenceManager.loadObjectFromFile(AnnieGapp);
AnnieController.setCorpus(corpus);
AnnieController.execute();

稍后你可以看到像这样提取的注释:

AnnotationSetImpl ann = (AnnotationSetImpl) gateDoc.getAnnotations();
System.out.println("Found annotations of the following types: "+ gateDoc.getAnnotations().getAllTypes());

我相信您可以使用内置注释集 Date 轻松完成此操作。它也非常可增强。

为了增强注释集Date 在JAPE 中创建一个宽松的注释规则,从内置的ANNIE 注释Date 中说“DateEnhanced”以包含某些类型的日期,例如“9/11”并使用Java 正则表达式的链接在 RHS 上'DateEnhanced' 注释 JAPE RULE,以过滤一些不需要的输出(如果有)。

【讨论】:

如果文本不是英文而是法文,这个解决方案会起作用吗? @bbakiu gate.ac.uk/gate/doc/plugins.html#Lang_French。就日期而言,我会说是的。

如何从开始日期和结束日期识别和聚合序列

】如何从开始日期和结束日期识别和聚合序列【英文标题】:Howtoidentifyandaggregatesequencefromstartandenddates【发布时间】:2017-01-0614:26:58【问题描述】:我正在尝试根据person识别日期中的连续序列,以及该序列的总和amount。我的records... 查看详情

java - 如何从Java中存储日期的给定字符串字段中减去X天? [复制]

】java-如何从Java中存储日期的给定字符串字段中减去X天?[复制]【英文标题】:HowtosubtractXdaysfromagivenstringfieldstoringDateinjava?[duplicate]【发布时间】:2021-02-2506:32:50【问题描述】:我有一个返回日期值的字符串字段。我正在尝试将... 查看详情

如何从 Java 8 Date API 中的回历日期中减去回历年份

】如何从Java8DateAPI中的回历日期中减去回历年份【英文标题】:HowtosubtractHijrahyearfromaHijrahDateinJava8DateAPI【发布时间】:2018-12-0301:01:24【问题描述】:我想显示Ramadan2017的开始和结束日期。我尝试使用Java8及更高版本中内置的HijrahC... 查看详情

java日期时间api系列40-----中文语句中的时间语义识别(timenlp)代码实现分析(代码片段)

  从上篇Java日期时间API系列39-----中文语句中的时间语义识别(timeNLP输入一句话,能识别出话里的时间)原理分析 中得知解析的主要步骤分为三步:(1)加载正则文件(2)解析中文语句中的所有时间词语(3)根据基准时... 查看详情

如何从 SQL 中的日期获取字符串类型的月份?

】如何从SQL中的日期获取字符串类型的月份?【英文标题】:HowtogetmonthinstringtypefromDateinSQL?【发布时间】:2021-10-2406:23:58【问题描述】:这是我的SQL查询。selectorderDatefromorders;由此,我可以得到这样的输出03-OCT-96如何从orderDate中... 查看详情

Python 2.7:如何从 pandas 数据框中的字符串中识别唯一字符串并根据结果在指定列中打印指定值?

】Python2.7:如何从pandas数据框中的字符串中识别唯一字符串并根据结果在指定列中打印指定值?【英文标题】:Python2.7:Howtoidentifyuniquestringfromstringinpandasdataframeandprintdesignatedvalueinaspecifiedcolumnbasedontheresult?【发布时间】:2016-11-1512... 查看详情

如何使用 Java 日历从日期中减去 X 天?

】如何使用Java日历从日期中减去X天?【英文标题】:HowtosubtractXdaysfromadateusingJavacalendar?【发布时间】:2010-09-1718:14:05【问题描述】:有人知道使用Java日历从日期中减去X天的简单方法吗?我找不到任何函数可以让我直接从Java中... 查看详情

使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

】使用to_char函数解析为字符串时,如何从Oracle中的日期和月份值中删除前导零?【英文标题】:HowtoremoveleadingzeroesfromdayandmonthvaluesinOracle,whenparsingtostringusingto_charfunction?【发布时间】:2014-04-2810:49:08【问题描述】:我想在select语... 查看详情

如何从 JDatePicker 中提取和重置日期?

...果很好,但我有两个问题:1。如何将选定的日期转换为字符串?2。如何在jdatepicker文本框中重置日期?//i 查看详情

在纪元中转换日期格式

...间】:2011-10-0423:18:36【问题描述】:我有一个日期格式的字符串,例如Jun13200323:11:52.454UTC包含毫秒...我想在纪元中转换。是否有Java中的实用程序可以用来进行这种转换?【问题讨论】:【参考方案1】:这段代码展示了如何使用j... 查看详情

如何从Java中的字符串中删除nul字符(\ 0)

】如何从Java中的字符串中删除nul字符(\\\\0)【英文标题】:Howtoremovenulcharacters(\\0)fromstringinJava如何从Java中的字符串中删除nul字符(\\0)【发布时间】:2016-04-0804:59:02【问题描述】:我了解C#中的这段代码试图从字符串中删除nul... 查看详情

我java后台从数据库中读取到的时间日期如何在前台进行计算?

...在后台获取前台的值才可以计算。 参考技术B基本功啊,字符串操作!您老没过关啊追问能说的详细点吗?在脚本里可以进行计算的是吗? 查看详情

如何从 Lua NodeMCU 中的日期和时间字符串创建日期对象?

】如何从LuaNodeMCU中的日期和时间字符串创建日期对象?【英文标题】:HowcanIcreateDateObjectfromDateandTimeStringsinLuaNodeMCU?【发布时间】:2016-11-1900:50:43【问题描述】:我在ESP8266上玩NodeMCU。我有一个来自Web请求的日期字符串和时间字... 查看详情

如何将 MongoDB 中的属性从文本类型转换为日期类型?

...含一个名为"ClockInTime"的字段,该字段是从CSV作为字符串导入的。将这些基于文本的值转换为日期数据类型的适当db.ClockTime. 查看详情

java的string如何设置有效期

...Ti...CSDN编程社区大家还在搜java格式化日期yyyymmddJava字符串转dateJAVA日期字符串有tdate截取年月日java日期加一天redis判断key是否存在java时间字符串java读取键盘输入字符串java从字符串中截取日期时间java获取当前日期字符串java... 查看详情

如何从熊猫系列中的字符串中去除“$”符号?

】如何从熊猫系列中的字符串中去除“$”符号?【英文标题】:HowdoIstripthe"$"symbolfromastringinapandasseries?【发布时间】:2020-07-1910:28:27【问题描述】:急需帮助。我正在尝试有条件地迭代GooglePlay商店csv文件的行。由于某种... 查看详情

需要从redshift中的日期列中划分月份和年份

...redshift中做到这一点?【问题讨论】:\'5/30/2016\'是存储为字符串(如图所 查看详情

java示例代码_如何从Java中的枚举中获取设置的整数、字符串值

java示例代码_如何从Java中的枚举中获取设置的整数、字符串值 查看详情