0

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 を操作する方法の例を歓迎します。

4

1 に答える 1

1

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 が日付を見つけた位置、および日付に解析されたテキストを使用して、2 つの範囲を作成しています。1 つは日付の前のテキスト用で、もう 1 つは日付の後のテキスト用です。日にち。次に、これら 2 つの範囲を元のテキスト全体に対して使用して、3 つのコンポーネントを抽出します。OK... 4 つ、 を追加しました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
    ]
]
于 2016-03-18T15:54:49.960 に答える