Poszerzenie JChronic może być najlepszym wyborem. Myślę, że biorąc pod uwagę odpowiedzi na this question, jest mało prawdopodobne, że istnieje już wbudowana biblioteka do tego celu (choć wydaje się, że taka rzecz może być przydatna ... Zgaduję, że główne przypadki użycia do analizowania dat w języku naturalnym będą być jeszcze bardziej użytecznym, jeśli mają możliwość wyodrębnienia dodatkowych danych z łańcuchów dostarczonych przez użytkownika).
Wdrożenie, prawdopodobnie najbardziej prostą czynnością jest rozszerzenie JChronic, ponieważ obsługuje on znaczną część twojego przypadku użycia, ale więcej niż ponad as you can see from the unit test dodatkowych informacji powinno już być zignorowanych przez framework. Na szczęście, jeśli spojrzymy na the main class, nie powinno być zbyt trudno rozszerzyć/zmodyfikować/opakować metodę parse(), aby obsługiwać niestandardowy skaner dla tytułu zdarzenia. (Moje własne preferencje będą polegały na owinięciu ramek, a nie ich modyfikowaniu, ponieważ pozwala to łatwiej korzystać z wszelkich ulepszeń podstawowego kodu).
Ostatecznie, najprościej można to zrobić, generując parser-regex, który ignoruje większość tego, co JChronic próbuje przechwycić (a to oznaczałoby, że poznaje się dobrze z JChronicznym kodem źródłowym).
Kluczem do pomyślnego wdrożenia tego, podobnie jak w przypadku każdego projektu typu NLP, jest uzyskanie jak największej liczby przykładów, najlepiej jako automatycznych testów jednostkowych (ostatecznie, nawet jeśli test przypadków testowych powiela tę samą funkcję wiele razy , lepiej mieć więcej przykładów niż mniej). Na szczęście, ponieważ mówimy o języku naturalnym, takie przypadki testowe powinny być szczególnie łatwe do zdobycia, ponieważ nawet znajomi, rodzina itd., Którzy nie są programistami, powinni być w stanie dostarczyć "opisy zdarzeń" (lub cokolwiek chcesz nazwać im). Będziesz także chciał skupić się na przypadkach skrajnych, w których bit przetrawiania daty może zakłócać bitwę analizy położenia/tytułu (na przykład w "sigurosi o 8 wieczorem" "na" jest wyraźnie częścią czasu, podczas gdy w "imprezie" w sobotę fooebe "wyraźnie nie jest).
Zdaję sobie sprawę, że sporo mówiłem o JChronic, ale uważam, że jest to naturalny wybór dla twojego problemu, ponieważ obejmuje on już część "trudnej części" parsowania "spotkań" w języku naturalnym, tj. nasz język, którego używamy o czasie, i jest już zaimplementowany w języku, który celujesz.
możliwe duplikat [data języka naturalnego oraz czasu parser dla Java] (http://stackoverflow.com/questions/1410408/natural-language-date-and-time-parser-for-java) – nawfal