Ich glaube den Aufwand (Einarbeitung und Implementierung) werden die wohl kaum in Geld Aufwiegen wollen. Es ist, wie ich mir schon von Anfang an dachte, mal wieder komplizierter als der Kunde das dachte.
Yo, wenn man sowas "gut" machen will, dann muss man sich wohl entweder wochenlang in so ein Fachgebiet einlesen - oder den fachkundigen Praktikanten von der Uni einstellen.
Falls das wochenlange studieren nicht in Frage kommt, und du keine fertige Library für deine Zwecke findest, würde ich mal folgendes versuchen (sauge ich mir gerade aus den Fingern, also keine Garantie das es was taugt):
Beim Einlesen der Bewerbungen könnte es sich lohnen gleich ein Preprocessing durchzuführen. Um die Bewerbungstexte ersteinmal etwas zu strukturieren könnte man versuchen jeden Absatz einem Thema zuzuordnen. Dabei würde ich einen Absatz nach einer vordefinierten Liste von Schlagwörtern und deren Synonymen (bezüglich der verschiedenen Themen) durchsuchen und für jedes Vorkommen eines Schlagworts Punkte vergeben.
Beispiel: Wenn in dem Absatz die Wörter
Fähigkeiten oder
Kenntnisse vorkommen, zählt das jeweils 5 Punkte für das Thema Qualifikationen.
Interesse gibt dagegen nur 3 Punkte. Wörter wie
Eltern oder
Geschwister zählen 5 Punkte im Bereich Familiengeschichte.
Vater könnte 2 Punkte für Familiengeschichte und einen Punkt für Qualifikationen geben (ein Satz a là "in der Autowerkstatt meines Vaters lernte ich..." ist ja gar nicht mal unüblich).
Am Ende wird der Absatz halt dem Thema zugeordnet, das die meisten Punkte gesammelt hat. Falls kein Thema eine klare Punktmehrheit hat könnte man den Kontext zur Entscheidung heranziehen (also die Themen der vorrangegangenen und nachfolgen Absätze). Oder den User bitten den Absatz manuell einem Thema zuzuordnen.
Gegebenenfalls kann man die Absätze/Bewerbungen dabei auch gleich nach den gefundenen Synonymen indizieren (also vermerken, das dort beim Thema Qualifitationen das Wort
Ingenieur gefunden wurde (oder
Techniker,
Konstrukteur... etc).
Nach dem gleichen Verfahren könnte man anschließend hergehen und die einzelnen Absätze weiter auseinandernehmen (um Beispielweise Ingenieure von Sekretärinen zu unterscheiden).
Die Suchworte die der Anwender - also der Personalbearbeiter - eingibt sollten mit der oben erwähnten Liste von Schlagwörtern/Synonymen abgeglichen werden. Der Anwender kann dann wählen ob er z.B. alle Bewerbungen von Ingenieuren (und Artverwandten) sehen möchte, oder alle Bewerbungen die etwas mit Design zu haben, oder ob er einfach nach genau einem Suchwort suchen möchte (beispielsweise der Stellenbezeichnung, die in einer Ausschreiben angegeben war).
Bei alldem muß man sich allerdings immer im Klaren darüber sein das ein solches Verfahren "beliebig falsche" Ergebnisse produzieren kann. Die Fantasie eines Softwareentwicklers ist nie so groß wie die Kreativität der Anwender/Bewerbungsschreiber... Gerade wenn man die erwähnte Liste von Schlagwörtern und deren Synonymen anlegt. Von daher ist es keine Schande wenn die Software auch mal ein unzutreffendes Suchergebnis anzeigt, oder schlicht sagt: "weiss ich nicht". Sinnvoll wäre es da wohl den Suchergebnissen ein Rating zu verpassen und sie anschließend nach diesem Rating sortiert anzuzeigen. Wäre allemal besser als wenn eine Bewerbung wegen nicht bedachter Formulierungen oder Tipp-/Konvertierungsfehler durchs Raster fällt.
Denkbar ist es natürllich das der Anwender nach Daten suchen möchte, die sich damit nicht so ohne weiteres erfassen lassen, etwa nach dem Alter des Bewerbers oder dessen Berufserfahrung. Da kann man sich zwar auch einfache Methoden für überlegen, um so etwas automatisch aus Texten herauszulesen, allerdings würde ich mich darauf eher nicht einlassen. Wenn man sich im Bereich Information Retrieval nicht auskennt und nur einfach mal so etwas zusammenhackt, dann dürfte die Fehlerrate zu hoch sein als das man es guten Gewissens verwenden kann. Selbst bei uns an der Uni wurden sämtliche Ergebnisse von Hand verifiziert (wobei wir aber auch nichts Produktives erarbeiten wollten, sondern uns nur mit experimentellen Kram beschäftigt haben).
Viel Erfolg!
PS: Der
Porter Stemmer ist easy zu implementieren und wird dir sicherlich gute Dienste Leisten