Если вы действительно хотите выполнять обработку на естественном языке (вы упоминаете об этом в тексте), я бы посоветовал использовать OpenNLP с JRuby. Я сделал это в прошлом году, и это сработало очень хорошо.
Для DSL в Интернете существует множество обучающих программ по Ruby, просто используйте вашу любимую поисковую систему, чтобы найти их. Книжно, я бы порекомендовал Рассела Олсона «Красноречивый рубин» и Паолы Перотты «Рубин метапрограммирования». После этих двух книг вы должны знать все, что вам нужно знать о написании DSL, и выучили много очень хорошего Ruby в качестве побочного эффекта.