Так, как задача сформулирована, единственного решения может и не быть. Нпр.,
"Петрович, забери ЗП, 900 тугриков"
"Ольга Петровна, забери ЗП, 1500 тугриков"
что отвечает шаблону
"{name}, забери ЗП, {amount} тугриков"
Но
"Петрович, забери ЗП, 900 тугриков"
"Петрович, отчитайся о командировочных, 1900 тугриков"
отвечает шаблону
"Петрович, {action}, {amount} тугриков
ИМХО алгоритм может быть таким:
1) Составить словарь. Для этого из всех текстов выделить все встречающиеся в них слова, отсортировать в алфавитном порядке, подсчитывая, сколько раз встречается каждое слово (убирая дубликаты).
2) Убрать из словаря служебные слова (предлоги, союзы и т.д.).
3) Убрать из словаря редкие слова. Для этого задать порог. Можно исходить из желаемого размера словаря. А можно убирать слова, которые встречаются только один раз, но тогда словарь может получиться слишком большим.
5) Сгруппировать оставшиеся в словаре слова по смыслу (вручную). Убрать группы из одного слова. Остальным группам дать название: {name}, {amount} и т.д.
6) Заменить в исходных текстах слова словаря на названия групп. Получим список возможных шаблонов.
7) Отсортировать полученный список по именам групп, исключая дубликаты. Получам список шаблонов. При этом можно учитывать, сколько раз применяется каждый шаблон, для исключения редких шаблонов...
Похожий алгоритм я применял в программе для составления предметных указателей книг. (Там еще запоминались номера страниц). В случае русского языка может понадобиться усложнение для падежных окончаний, но принцип останется. Еще один не сильно усложняющий момент - цифры.