Расширение JChronic может быть вашим лучшим выбором. Я думаю, учитывая ответы на этот вопрос , маловероятно, что предварительно созданная библиотека для этого существует (хотя кажется, что такая вещь может быть полезной ... Я предполагаю, что основное использование - случаи разбора дат на естественном языке были бы еще более полезными, если бы у них была возможность извлекать дополнительные данные из предоставленных пользователем строк).
С точки зрения реализации, вероятно, самое простое, что нужно сделать, - это расширить JChronic, поскольку он поддерживает довольно значительную часть вашего варианта использования, но более , как вы можете видеть из модульного теста посторонняя информация уже должна игнорироваться структурой.
К счастью, если вы посмотрите на основной класс , вам не составит труда расширить / изменить / обернуть метод parse () для поддержки пользовательского сканера для заголовка события. (Мое собственное предпочтение было бы заключать в оболочку, а не в форк, и модифицировать ее, так как это позволит вам легче извлекать выгоду из любых улучшений базового кода).
В конечном счете, самый простой способ сделать это - сгенерировать синтаксический анализатор, который игнорирует большую часть того, что JChronic пытается захватить (и это будет означать глубокое знакомство с исходным кодом JChronic).
Ключ к успешной реализации этого, как и в любом проекте типа NLP, состоит в том, чтобы иметь как можно больше примеров, желательно, как автоматические модульные тесты (в конечном счете, даже если тестовые примеры повторяют одну и ту же функциональность много раз, лучше иметь больше примеров, чем меньше). К счастью, поскольку речь идет о естественном языке, такие тестовые примеры должны быть особенно легко доступны, поскольку даже друзья, не являющиеся программистами, члены семьи и т. Д. Должны быть в состоянии предоставить вам «описания событий» (или как вы хотите позвонить). их). Вы также захотите обратить особое внимание на крайние случаи, когда бит синтаксического анализа даты может мешать биту синтаксического анализа местоположения / заголовка (например, в «sigur rós at 8pm» «at» явно является частью времени, тогда как в «party» в субботу Фиби "это явно не так".
Я понимаю, что довольно много говорил о JChronic, но чувствую, что это естественный выбор для вашей проблемы, поскольку он уже охватывает большую часть "трудной части" анализа "назначений" на естественном языке, то есть нечеткости наших язык, который мы используем для определения времени и который уже реализован на языке, на который вы нацелены.