RSS "Meinten Sie" mit Soundex, Levenshtein, Metaphone und similar_text

verfasst 13.02.2010 von MediaCix | kurze URL: /t945 | Kommentar schreiben

Wie funktioniert eigentlich die Suche nach ähnlichen Wörtern? Wie geht das bei Google mit der Funktion "Meinten Sie" überhaupt? Wie erkennt eine Suchmaschine überhaupt Double Content? Eine mögliche Methode könnten Funktion wie die PHP-Funktion Soundex, Levenshtein oder Metaphone sein. Wobei hier nicht unbedingt PHP zum Einsatz kommen muss. Auch in anderen Programmiersprachen kann man solche Funktionen benutzen. Im einfachsten Falle möchte man aber bestimmte Wörter vergleichen oder ähnliche Wörter ausgeben lassen. Dazu müsste man bestimmten Wörtern einen Code vergeben, was dann die Suche in einer Datenbank vereinfacht.

Die Grundlage besteht eigentlich darin, dass man Strings und die Anordnung von Zeichen (teilweise Rekursion) vergleicht. Mittels PHP gibt es dazu folgende Beispiele:

soundex — Berechnet die Laut-Ähnlichkeit eines Strings

Soundex() erzeugt einen String aus 4 Zeichen, der aus einen Buchstaben und 3 Zahlen besteht. Für einfache Anwendungen kann hier nach dem Anfangsbuchstaben und der ersten Zahl gesucht werden. Bei zusammengesetzen Begriffen oder ganzen Sätzen wird das ganze schon sehr ungenau und ist nicht mehr zuverlässig.

» PHP
<?php
echo soundex('maus'), '<br>';
echo 
soundex('haus'), '<br>';
echo 
soundex('raus'), '<br>';

echo 
soundex('hausbau'), '<br>';
echo 
soundex('mausfalle'), '<br>';
?>


Ausgabe:

M200
H200
R200

H210
M214


metaphone — Berechnet den Metaphone-Schlüssel eines Strings

Der Metaphone-Schlüssel ist ähnlich aufgebaut wie Soundex(), wobei er aber genauer arbeitet und eine variable Zeichenkette zurück gibt.

» PHP
<?php
echo metaphone('maus'), '<br>';
echo 
metaphone('haus'), '<br>';
echo 
metaphone('raus'), '<br>';

echo 
metaphone('hausbau'), '<br>';
echo 
metaphone('mausfalle'), '<br>';
?>


Ausgabe:

MS
HS
RS

HSB
MSFL


Mögliche Erkennung von Double Content

Um möglichen Double Content bei Sätzen zu erkennen, kommt der Metaphone-Schlüssel schon recht Nahe.

» PHP
<?php
echo metaphone('Gibt den Metaphon-Schlüssel als Zeichenkette zurück.'), '<br>';
echo 
metaphone('Gibt den Hausschlüssel zurück.'), '<br>';
echo 
metaphone('Gibt den Wohungsschlüssel zurück.'), '<br>';
?>


Ausgabe:

JBTTNMTFNSXLSLLSSXNKTSRK
JBTTNHSXLSLSRK
JBTTNWHNKSXLSLSRK


Anfangs- und Endbuchstaben sehen gleich aus was vermuten läßt, dass die 3 Sätze ähnlich aufgebaut sind.
Mit String-Funktionen wie zum Beispiel substr(), strstr() oder strpos() kann hier zusätzlich nach den Anfang und Ende abgefragt und verglichen werden.

levenshtein — Berechnet die Levenshtein-Distanz zwischen zwei Strings

Die levenshtein-Methode gibt bei einen Vergleich von Strings einen Zahlenwert (Levenshtein-Distanz) zurück. Die Länge der Strings verändert stark das Resultat.

» PHP
<?php
echo levenshtein('haus''maus'), '<br>';
echo 
levenshtein('haus''maus'), '<br>';
echo 
levenshtein('haus''hammer'), '<br>';
echo 
levenshtein('haus''kunsthochschule'), '<br>';
?>

Ausgabe:

1
1
3
13


similar_text — Berechnet die Ähnlichkeit zweier Zeichenketten

Diese Funktion gibt die Anzahl übereinstimmender Zeichen zurück und kann dies auch Prozentwert ausgeben. Je höher der Prozenzwert, je ähnlicher das Wort.

» PHP
<?php
similar_text
('haus''maus', &$p);
echo 
$p'<br>';

similar_text('haus''maus', &$p);
echo 
$p'<br>';

similar_text('haus''hammer', &$p);
echo 
$p'<br>';

similar_text('haus''kunsthochschule', &$p);
echo 
$p'<br>';
?>


Ausgabe:

75
75
40
21.052631578947


Ein anderes Verfahren ist dann noch die Kölner Phonetik. Diese ist besser auf die deutsche Sprache abgestimmt. Die Länge des phonetischen Codes ist dabei variable.

Egal welche Methode man nun nutzt, bei allen Methoden und Möglichkeiten sollte man auf die Performace achten. Die oben erwähnten Funktionen sind Rechenintensiv und können bei fehlerhafter Programmierung den Server durchaus langsamer werden lassen. Das Vergleichen von Strings von Zeichen zu Zeichen zur Laufzeit sind ungeeignet. Hier sollte man sich ein Konzept überlegen, wo die ermittelten Daten bereits in einer bestimmten Form in der Datenbank liegen.

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten

    - keine weiteren Themen gefunden -

Tags zum Beitrag

soundex     levenshtein     metaphone     similar_text     meinten-sie