Lemmatisierung:
Meine Empfehlung wäre der snowball stemmer. Es gibt u.a. ein Python interfacePython interface. Auf der alten Seite von snowball findet man Beispiele für die deutsche Sprache inkl. VokabularVokabular.
Synonyme:
dict.cc hat gute deutsche Unterstützung. Es enthält auch Synonyme. Man kann den gesamten Datensatz haben, es steht aber nicht, ob der auch Synonyme enthalten würde. Außerdem ist die Verwendung an bestimmte Klauseln geknüpft, man muss eine Anfrage stellen.
Weiters findet sich auf openthesaurus ein deutsches Synonymwörterbuch für 100.000 Wörter. Dazu würde diese Seite auch ein API zur Abfrage anbieten.
BeoLingus der TU Chemitz bietet ebenfalls eine Wörterdatenbank zum Download an.
Zu Machine Learning kann ich leider nicht so viel sagen.
Der wichtigste Punkt: ein fertiges Programm wirst Du nicht finden, Du müsstest das selber programmieren. Empfehlen würde sich hier Python. Es hat mit scrapyscrapy eine Library um Daten aus Webseiten abzufragen, und es gibt mit NLTKNLTK eine Lib zur Sprachverarbeitung, sowie zahlreiche weitere Libs.
Leider kann ich nur 2 Links postenHier findet sich schließlich eine nette Einführung in nltk auf deutsch.
Viel Spaß bei der Umsetzung!