Wie Wörter durch zufällige Synonyme ersetzen?

buzzom

Mitglied
Hallo,

ich möchte gernen einen Satz durch Synonyme erstzen. Bisher funktioniert das mit einem Synonym.

Vorher: Der schnelle braune Fuchs sprang über den faulen Hund.
Nachher: Der langsame schwarze Bär sprang über den faulen Hund.

Ich möchte aber jedes Wort mit mind. 3 Synonymen füttern und das Ergebnis soll dann zufällig ein Synonym auswählen und ausgeben. Was müsste ich ändern bzw. hinzufügen im Code?

Vielen herzlichen Dank.
Buzzi


PHP:
$zeichenkette = 'Der schnelle braune Fuchs sprang über den faulen Hund.';

$suchmuster = array();
$suchmuster[0] = '/schnelle/';
$suchmuster[1] = '/braune/';
$suchmuster[2] = '/Fuchs/';

$ersetzungen = array();
$ersetzungen[0] = 'langsame';
$ersetzungen[1] = 'schwarze';
$ersetzungen[2] = 'Bär';

ksort($suchmuster);
ksort($ersetzungen);
echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
?>
 
Geht es nur um diesen einen Satz oder allgemein? Letzteres dürfte schwierig werden.

Grundsätzliche Idee für den Algorithmus: Erstelle für jedes Wort einen Array mit den Synonymen. (Alternativ kannst du auch einen zweidimensionalen Array verwenden.) Danach iterierst du über all diese Arrays, liest für jeden seine Grösse n aus, berechnest eine Zufallszahl i von 0 bis n?1 und gibst das Wort an Position i im aktuellen Array aus.

Jetzt musst das Ganze nur noch in PHP umsetzen. :)
 
Also erstmal nur für diesen Satz aber theoretisch auch für jeden anderen Satz. Da müssen dann natürlich andere Synonyme her.

Ja und wie könnte das in PHP aussehen. Da haperts ja grad bei mir. ;-)

Danke
 
Dafür eignet sich prima eine Datenbank mit einer Tabelle, die wie folgt aufgebaut ist:

Tabelle "ersetzungen"
Code:
needle VARCHAR(50)
replacement VARCHAR(50)

Da kannst du einen Query absetzen, der wie folgt aufgebaut ist:

SQL:
SELECT replacement FROM ersetzungen WHERE needle = '$suchwort' ORDER BY RAND() LIMIT 1;

Das Ergebnis wendest du dann mittels preg_replace() auf deinen Text an.

Habe ich dich in etwa so richtig verstanden?
 
Langsam ist aber kein Synonym für schnell.
...aber schwarz für braun und Bär für Fuchs oder wie? :rolleyes:

Ja und wie könnte das in PHP aussehen. Da haperts ja grad bei mir.
Wenigstens mal versucht?
SilentWarrior hat dir doch alles gesagt. Den Rest erklärt dir google oder die php doku.

(Alternativ kannst du auch einen zweidimensionalen Array verwenden
PHP:
$syn_Array = Array ();
$syn_Array['langsam'] = Array("syn1", "syn2", ...);


Danach iterierst du über all diese Arrays, liest für jeden seine Grösse n aus
PHP:
$syn_Count = count($syn_Array['langsam']);

berechnest eine Zufallszahl i von 0 bis n?1
PHP:
$random_Synonym_num = rand(0, ($syn_Count - 1));

gibst das Wort an Position i im aktuellen Array aus
PHP:
$random_Synonym = $syn_Array['langsam'][$random_Synonym_num];


...So in etwa.

Fehlt noch die Ersetzung der Wörter durch die Synonyme und das Variabel machen von ['langsam'].
 
Zurück