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