Java/Grails - PrettyTime NLP Возможно разделить не дату?
Я использую PrettyTimeNLP, чтобы найти даты из списка.
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.
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()
]
}
ПРИМЕЧАНИЕ: не используйте @Grabs в Grails, у вас уже должны быть настроены зависимости.
Как это устроено
В приведенном выше примере используется весь исходный текст, а также позиция, в которой 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
]
]