我正在使用PrettyTime NLP从列表中查找日期。

Example

ABC High School March 5, 2016
XYZ High School 08/20/2016 Gym

当我使用PrettyTimeNLP进行解析时,它会以这种格式提供日期列表。
Sat Aug 20 10:05:27 EDT 2016
我的问题是,是否可以解析字符串,然后在日期之前或之后将其拆分,这样我就可以
string1 = 'XYZ High School'
stirng2 = '08/20/2016'
string3 = 'Gym'

我知道我可以使用RegEx来完成这项工作,但是这里的示例很简单。
我的文档将有1-10页,其中包含各种格式的日期。

任何有关如何操作PrettyTime的示例将不胜感激。

最佳答案

DateGroup提供的PrettyTimeParser.parseSyntax()包含一些回答您的问题所需的信息。其余信息可以从原始文本中确定。

@GrabResolver(name='sonatype-snapshots', root='https://oss.sonatype.org/content/repositories/snapshots/')
@Grab('org.ocpsoft.prettytime:prettytime-nlp:4.0.1.Final')

import org.ocpsoft.prettytime.nlp.PrettyTimeParser

def list = [
    'ABC High School March 5, 2016',
    'XYZ High School 08/20/2016 Gym'
]

def parser = new PrettyTimeParser()

list.collect {
    [rawText: it, dateGroup: parser.parseSyntax(it).head()]
}.collect {
    def before = 0..<it.dateGroup.position
    def after = it.dateGroup.position + it.dateGroup.text.size()..<it.rawText.size()

    [
        before: it.rawText[before].trim(),
        date: it.dateGroup.dates.head(),
        dateString: it.dateGroup.text,
        after: it.rawText[after].trim()
    ]
}

注意:不要在Grails中使用@Grabs,您应该已经设置了依赖项。

这个怎么运作

上面的示例使用整个原始文本以及Pretty Time查找日期的位置以及被解析为日期的文本来创建两个范围:一个用于日期之前的文本,另一个用于在日期之前的文本。日期。然后将这两个范围用于整个原始文本以提取这三个成分。好的...四,我添加了Date。输出如下:
[
    [
        before:ABC High School,
        date:Sat Mar 05 11:45:56 EST 2016,
        dateString:March 5, 2016,
        after:
    ],
    [
       before:XYZ High School,
       date:Sat Aug 20 11:45:56 EDT 2016,
       dateString:08/20/2016,
       after:Gym
    ]
]

07-24 09:46
查看更多