А почему именно "ключевых слов", а не просто "слов"?
Если в общем то где-то так:
1. Получаем строку текста из поля для ввода (пока будем подавать идеальную строку, то есть где все слова и знаки отделены друг от друга одним пробелом)
2. Подгружаем базу слов известных бота
3. Разбиваем текст на массив слов, обходим его и выясняем знаем ли слово или нет. Если не знаем возвращаем ошибку что не знаем такое-то слово.
4. Каждое слово в массиве заменяем на его значение
5. Находим в массиве и выделяем отдельно объекты, атрибуты объектов, связи между объектами
6. Пытаемся однозначно прикрепить атрибуты к объектам (если один и тот же атрибут подходит к нескольким объектам - то возникла коллизия, и надо попросить уточнения)
7. Пытаемся связать объекты
8. Вот у нас в памяти получилась представление того, что нам было сказано, теперь можно получать вопросы по этим данным и осуществлять поиск и вычисления