Synonyme anzeigen mit PHP Skript

Synonyme sind immer dann hilfreich, wenn es um Texte geht. Wer selbst Texte mit PHP generiert, etwa bei dem sog. Texte Spinning, kennt das Problem. Wie kann ich mir einfach in PHP Synonyme anzeigen lassen?

In diesem Artikel zeige ich Dir, wie Du mit der freien Synonym-Datenbank Openthesaurus ein eigenes, kleines PHP-Skript zur Abfrage von Synonymen erstellen kannst.

1. Die Synonym-Datenbank

Zunächst benötigen wir eine Synonym-Datenbank. Falls du über eine eigene Synonym-Datenbank verfügst, kannst du diese gerne verwenden.

Die Datenbank sollte als Text-Datei und mit der folgenden Formatierung vorliegen:

wort1|synonym|synonym|synonym
wort2|synonym

Eine offene Synonym-Datenbank kannst du bei OpenThesaurus herunterladen. Wähle auf der Download-Seite den „Thesaurus im Text-Format“ aus.

Entpacke die Synonym-Datenbank nun an den Ort, an dem du später auch das PHP-Skript ablegen möchtest.

Benenne die Synonym-Datei in „synonyme.txt“ um.

Hinweis: Bei der Verwendung von Openthesaurus sind die Lizenzbestimmungen zu beachten, die du auch auf der Download-Seite findest.

2. Synonym Datenbank optimieren

Als nächstes müssen wir die Synonym-Datenbank für den Einsatz optimieren.

In der Thesaurus Datenbank sind unter anderem Anmerkungen in Klammern enthalten. Diese entfernen wir mit dem Optimierungsskript. Außerdem erleichtern wir durch kleinere Formatierungsänderungen die Bearbeitung durch das Synonym-Skript.

Speichere den folgenden Code als PHP-Datei in dem Ordner der synonyme.txt und führe die Datei aus, indem du sie im Browser aufrufst. Sobald dir „OK!“ angezeigt wird, ist der Optimierungsvorgang abgeschlossen und du kannst die Datei löschen.

Der Code für die Optimierungsdatei lautet:

<?php

$file = preg_replace('/\((.*?)\)/u', '', file_get_contents('synonyme.txt'));
$file = preg_replace("/\\n/u", ";\n", $file);
$file = preg_replace("/ ;/u", ";", $file);
	
file_put_contents('synonyme.txt', $file);
	
echo "OK!";

?>

3. Das Synonym-Skript

Nun legst du nur noch das Synonym-Skript in einer PHP-Datei ab, zB in synonyme.php. Füge den folgenden PHP Code ein:

<?php


// Gibt passende Synonyme zurück
// $words		array		mit Wörtern als Werten zu denen Synonyme gefunden werden sollen
// Funktion von http://www-coding.de/synonyme-anzeigen-mit-php-skript/ //
function synonyms(array $words) {
	$synonyms = array();
		
	// Datenbank einlesen //
	$synonymDB = file_get_contents('synonyme.txt');
		
	// Erhaltene Wörter durchgehen //
	foreach ($words AS $i => $word) {
		$word = trim($word);
			
		// Leere Vorlagewörter überspringen //
		if (empty($word)) continue;
			
		// Nach Synonymen suchen (beachtet Groß- und Kleinschreibung) //
		preg_match_all("/\n(.*?)(\n|;)".preg_quote($word)."(\n|;)(.*?)\n/u", $synonymDB, $matches);
			
		// Gefundene Zeilen durchgehen //
		if (isset($matches[0][0]) && count($matches[0]) > 0) {
			foreach ($matches[0] AS $match) {
				// Wörter hinzufügen //
				$matchWords = explode(";", $match); 
				
				foreach ($matchWords AS $matchWord) {
					$matchWord = trim($matchWord);
					
					// Ignorieren, wenn das Wort auch übermittelt wurde oder leer ist //
					if (array_search($matchWord, $words) !== false || empty($matchWord)) continue;
					
					// Synonym zum Ergebnis-Array hinzufügen //
					$synonyms[$matchWord] = $matchWord; // mit diesem als key-und-value-setzen Trick werden doppelte Einträge vermieden 
				}					
			}
		}			
	}
		
	if (count($synonyms) > 0) {
		// Synonyme zurückgeben //
		return $synonyms;
	} else {
		return false;	
	}
}

?>

Die Funktion synonyms() erwartet ein Array mit den Wörtern, zu denen Synonyme gefunden werden sollen.

Zurückgegeben wird false wenn keine Synonyme gefunden werden konnten oder die Synonyme, die gefunden wurden, als Array.

Hinweis: Wenn du Synonyme unabhängig von Groß- und Kleinschreibung finden möchtest, kannst du unter „// Nach Synonymen suchen“ das „/u“ durch „/ui“ ersetzen.

Wenn du die Datei mit der synonyms-Funktion in deinen PHP-Dateien einbindest, kannst du sie beispielsweise so verwenden:

<?php

// Gibt Synonyme zu "laufen" und "rennen" aus //
var_dump(synonyms(array('laufen', 'rennen')));

?>

4. Fazit

Dank der offenen Synonyme-Datenbank von Openthesaurus und mit Hilfe dieses kleinen PHP Skripts kannst du dir ganz einfach Synonyme zu mehreren Wörtern anzeigen lassen.

Viel Erfolg mit dem Synonyme Skript!

7 Gedanken zu „Synonyme anzeigen mit PHP Skript“

  1. Hallo,
    vielen Dank für das Skript. Ich habe es ausprobiert. Es funktioniert leider noch nicht richtig …

    Erst einmal muss es ja „var_dump“ statt „var_dumps“ heißen, richtig?

    Dann findet das Skript einige wenige Synonyme, die allermeisten aber nicht. Er findet zum Beispiel nichts zu „Auto“ oder „Apathie“ oder „Membran“ etc. pp., obwohl alle diese Worte in der synonyms.txt mit Synonymen vorhanden sind.

    Hierfür konnte ich den Fehler nicht finden. Vielleicht magst du mal schauen … Eventuell ist es ja nur ein kleiner Fehler.

    LG
    Peter

    1. Hallo Peter,

      danke für deine Anmerkungen.

      Den var_dump() Fehler habe ich korrigiert und einen Fehler, weshalb er bei großgeschrieben Worten nichts gefunden hat, ebenfalls.

      Beste Grüße
      Tristan

  2. Ich schon wieder 🙂

    Nun findet das Skript Synonyme für „Apathie“, aber nur, wenn ich es groß schreibe. Lässt sich noch ergänzen, dass es egal ist, ob das Suchwort groß oder klein eingegeben wird?

    Ich habe das für meine Zitate-Durchforstung wie folgt gelöst:

    $suchterm_klein = ucfirst($suchterm);//Setzt ersten Buchstaben groß
    $zitat = str_replace(„$suchterm_klein“, „$suchterm_klein„, $zitat);//fettet das Suchwort wenn großgeschrieben

    $suchterm_gross = lcfirst($suchterm);//Setzt ersten Buchstaben klein
    $zitat = str_replace(„$suchterm_gross“, „$suchterm_gross„, $zitat);Fette Suchwort, wenn es kleingeschrieben ist

    1. Hi Peter,

      dafür gibt es eine elegantere Lösung, die ich jetzt auch im Artikel erwähnt habe:

      Wenn du Synonyme unabhängig von Groß- und Kleinschreibung finden möchtest, kannst du unter „// Nach Synonymen suchen“ das „/u“ durch „/ui“ ersetzen.

      Beste Grüße
      Tristan