Чтобы велосипед не изобретать, ну и есть тонкости. Желательно еще, чтобы программа (библиотека) понимала, хотя бы как в анекдоте, что Маркс Энгельс - это два разных человека, а Слава КПСС вообще не человек (а также Большой Театр к примеру).
Такое в готовом виде и OpenSource есть?