Hi,
hab z.b. ne wortsammlung/synonyme in array:
array('aber','jedoch','allerdings')
nun soll in nem text geprüft werden, ob eines der wörter darin vorkommt in form eines einzelnen wortes, also nicht in ner wortzusammensetzung, wie 'aberdoch'(...) o.ä. . darauf folgen/voranstehen können leerzeichen, sonderzeichen, satzzeichen, ziffern bzw alles außer buchstaben ;)
Damit hast Du ja schonmal den ersten Schritt:
Teilen des Textes in einzelne Worte. Deine Definition für Wort ist "nur Buchstaben". Wenn Du jetzt auch definieren kannst, was Buchstaben sind (nein, _so_ einfach ist das nicht ;-) hast Du den ersten Part schonmal gelöst.
Nun klapperst Du jedes so gefundene Wort ab und suchst es in der Wortsammlung.
Wenn ich es richtig mitbekommen habe kannst Du eine SQL-DB nutzen? Dann solltest Du das auch tun. Meist kann man nur eine Spalte pro Tabelle gleichzeitig indizieren, daher sind auch meist zwei Tabellen nötig (eine mit den ganzen Worten aus der Wortsammlung, die auf eine zweite Tabelle zeigt in der die Wortgruppen versammelt sind). Wenn die Wortgruppen nicht sehr lang sind, könntest Du die auch als CSV-String in eine einzige Spalte packen und die dann indizieren. Ist vielleicht nicht so ganz koscher und dürfte auch einigen DB-Spezialisten die Fußnägel aufrollen, aber es funktioniert -- kostet halt nur etwas Rechenzeit beim Fund.
Das war der zweite Punkt.
wenn nun also ein solches wort enthalten ist, sollte es durch eines der anderen synonyme ersetzt werden und das per zufallsfaktor.
Naja, das schaffst Du dann auch noch selber, oder? ;-)
nun ist auch noch zu beachten, dass wenn 'Aber' gefunden wird, dass es auch durch 'Jedoch' und nicht durch 'jedoch' ersetzt wird!
Das könnte man per (ucfirst(Wort_aus_Wortsammlung) == Wort_aus_Text) o.ä. erschlagen. (ucfirst() ist locale-abhängig)
irgendwie müsste das doch mit einem regex funktionieren...
Naja, die Worte aus dem Text würde ich schon mit einem Regex raussuchen, der ganze Rest wäre dann aber nur sehr aufwendig mit Regexen zu lösen.
so short
Christoph Zurnieden