2016-12-24 2 views
1

Я вижу, что есть возможность внутри SUTime разрешить неоднозначные ссылки времени на будущее, но я не уверен, как сообщить аннотатору NER. Например, при аннотации этого предложения «давайте выйдем в пятницу» (и, допустим, сегодня воскресенье), я хочу, чтобы SUTime вернул дату следующей пятницы, а не предыдущую, которая появляется по умолчанию, поскольку она ближе к воскресенью. Благодарю.Как я могу инструктировать NER SUTime для решения будущего?

ответ

3

Вы должны предоставить свой собственный файл грамматики. Вы можете скопировать значение по умолчанию из corenlp. Он должен быть расположен где-нибудь stanford-sutime-models-1.3.5.jar:edu/stanford/nlp/models/sutime/english.sutime.txt Затем добавьте следующий код в конце раздела, который начинается с комментарием # Final rules to determine how to resolve date:

{ 
    pattern: ([ $hasTemporal ]), 
    action: VTag($0[0].temporal.value, "resolveTo", RESOLVE_TO_FUTURE) 
    } 

Это будет помечать все temporals быть решены в будущем. Обратите внимание, что существует несколько предопределенных тегов, которые разрешают некоторые временные шаблоны в прошлом. Вы также можете удалить и изменить их.

Затем укажите путь ресурса к файлу конструктору TimeAnnotator:

Properties props = new Properties(); 
props.setProperty("sutime.rules", "edu/stanford/nlp/models/sutime/defs.sutime.txt,PATH_TO_YOUR_RESOURCE_FOLDER/english.sutime.txt,edu/stanford/nlp/models/sutime/english.holidays.sutime.txt"); 
TimeAnnotator timeAnnotator = new TimeAnnotator("sutime", props); 

Существует также небольшой трюк с DocDateAnnotation. Если вы хотите, чтобы временные шаблоны, такие как «в пятницу в 7 вечера», были правильно решены, вы должны указать дату и время форматирования iso (не только дату, например, ГГГГ-ММ-ДД), в DocDateAnnotation.

Смежные вопросы