.net NET的自然语言日期/时间解析器?
有人知道类似于(处理“明天”或“下周四下午3点”)的.NET日期/时间解析器吗.net NET的自然语言日期/时间解析器?,.net,datetime,nlp,.net,Datetime,Nlp,有人知道类似于(处理“明天”或“下周四下午3点”)的.NET日期/时间解析器吗 注意:我确实写过Ruby(这是我了解慢性病的方式),但这个项目必须使用.NET。我不知道有一个,但它听起来像一个很酷的问题,所以这里是我对它的抨击(VB.NET): 私有函数ConvertDateTimeToStringRelativeToNow(ByVal d作为DateTime)作为字符串 Dim diff As TimeSpan=DateTime.Now().Subtract(d) 如果diff.Duratio
注意:我确实写过Ruby(这是我了解慢性病的方式),但这个项目必须使用.NET。我不知道有一个,但它听起来像一个很酷的问题,所以这里是我对它的抨击(VB.NET):
私有函数ConvertDateTimeToStringRelativeToNow(ByVal d作为DateTime)作为字符串
Dim diff As TimeSpan=DateTime.Now().Subtract(d)
如果diff.Duration.TotalMinutes<1,则返回“Now”
作为字符串的Dim str
如果diff.Duration.TotalDays>365,则
str=CInt(diff.Duration.TotalDays/365).ToString()和“年”
ElseIf diff.Duration.TotalDays>30则
str=CInt(diff.TotalDays/30).ToString()和“月”
ElseIf diff.Duration.TotalHours>24小时
str=CInt(差异持续时间、总小时数/24)和“天”
ElseIf diff.Duration.TotalMinutes>60分钟
str=CInt(差异持续时间总计分钟/60)和“分钟”
其他的
str=CInt(diff.Duration.TotalMinutes).ToString()和“分钟”
如果结束
如果str.StartsWith(“1”),则str=str.SubString(0,str.Length-1)
如果差异总天数>0,则
str&=“前”
其他的
str&=“从现在开始”
如果结束
返回str
端函数
它确实不像已经存在的那样复杂,但我想它可以正常工作。这可能是一个很好的扩展方法。@Burton:我认为他的意思是另一种方式,至少从链接页面上的示例可以看出:
Chronic.parse('tomorrow')
#=> Mon Aug 28 12:00:00 PDT 2006
Chronic.parse('monday', :context => :past)
#=> Mon Aug 21 12:00:00 PDT 2006
Chronic.parse('this tuesday 5:00')
#=> Tue Aug 29 17:00:00 PDT 2006
我想我也会尝试一下,直到我意识到!(虽然实现很好)我不知道,但是有一个Java端口叫做。如果没有别的,它可以为你自己提供一个很好的起点。或者你可以使用半自动的Java到C的翻译器来帮助翻译。(或者更好的,如果有人知道的话。)
好的,另一个可能的途径:你能使用慢性代码吗?@Blair Conrad-好主意!我试图在IronRuby下长期运行,但在依赖性方面遇到了一些问题——我不知道它是否已经准备好了 我在()上找到一个项目,该项目正在尝试执行相同的操作。它还不能处理数年或时间,但这是一个好的开始。我在这个项目上做了一些工作,并提供了一个补丁来更好地处理书面数字
这是一个有趣的问题,它确实帮助我更好地理解正则表达式,所以我想我会继续研究它。之前有一个,它提供了一个指向CodeProject上的库的链接,似乎可以满足您的需要:但不幸的是,该库似乎是用MFC编写的,因此您必须用它制作一个DLL,然后从.NET程序调用它。我们开发的正是您在一个内部项目。如果有足够的需要,我们正在考虑将其公开。有关更多详细信息,请查看此博客: 如果您感兴趣,请随时与我联系:contact@precisionsoftware.us 此库现在是SourceForge项目。网页载于:
程序集位于下载部分,源代码可从Mercurial获得 Palmsey,我最近也有同样的要求,所以我继续写了一个简单的解析器。这不是最好的代码,但它可以处理以下情况: “今天下午2点” “2010年7月15日星期二下午2点至2点” “上一年凌晨2点-明天14:30” “2010年7月18日下午2:45”
把它贴在codeplex上,也许其他人会发现它很有用。查看:我已经检查了几个框架,Python的效果最好。可以使用IronPython从.NET使用它 如果有人对一个完整的示例项目感兴趣,请对答案进行评论,我将尝试创建一个 编辑 根据要求,以下是一个简单的项目,可与库一起使用: 请尝试以下用例,例如:
- 2008年8月25日
- 2008年8月25日
- 8月25日下午5点
- 8月25日下午5点
- 下周六
- 明天
- 下周四下午4点
- 下午4点
- 排爆药
- 明天排爆
- 排爆星期二
- eoy
- eom
- 5分钟后
- 5分钟后
- 5小时前
- 中午前2小时
- 明天起两天
Chronic.parse('tomorrow')
#=> Mon Aug 28 12:00:00 PDT 2006
Chronic.parse('monday', :context => :past)
#=> Mon Aug 21 12:00:00 PDT 2006
Chronic.parse('this tuesday 5:00')
#=> Tue Aug 29 17:00:00 PDT 2006