Thema: Vertipper in DB suchen
-
Hallo!
Ich bin auf der Suche nach einem Weg wie man nach Schreibfehlern in einer DB (oder Text,...) suchen kann.
ein Beispiel:
Suchbegriff: Häuser
Ergebnis: Höuser, Häusre, Hüuer,....
Hat vielleicht jemand eine Idee wie man das umsetzen könnte?
Vielen Dank!
Grüße
Christian
-
05.07.06 22:19 #2
Hallo!
Meiner Meinung nach dürfte es unmöglich sein.
Du müsstest eine Referenz festlegen (alternativ dynamisch generieren lassen), die alle nur erdenklichen Kombinationen durchläuft.
Was ist aber wenn z.b. äährseur (anstatt Häuser) im Text steht?
Genauso gut könnte äährseur aber ja z.b. auch für "Auto" im Text stehen.
Du weisst also nicht was für ein Wort im Text steht und auch nicht wofür es steht.
Demnach könnte also jede erdenkliche Kombination auf jedes erdenkliche Wort passen.
Du würdes also in einer unendlichen Suche landen.
Statt dessen solltest Du lieber darauf achten, ob irgend jemand sich nicht an die Rechtschreibung gehalten hat und es ggf. korrigieren.
Nicht ohne Grund gibt es hier im Forum den Punkt "Rechtschreibung" in der Netiquette.
Gruss Dr DauSchri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
-
Danke für deine Antwort!
Ich hab mir schon gedacht, dass es nicht leicht wird.
Hab heute (in der Arbeit
) ein wenig ge
t und folgendes gefunden:
vertipp.de - Schnäppchen durch Tippfehler bei eBay finden!
Das ist genau das, was ich suche - nur wie machen die das?
Danke fürs Mitgrübeln
#Edit: Hab grad mitbekommen, dass diese Seite Geld durchs eBay-Klicken reinbringt. Soll keine Werbung für die Seite sein, sondern mir geht es lediglich um die Technik dahinter.Geändert von MaxMara (06.07.06 um 20:41 Uhr)
-
Ich denke dass die aus der orginalen Eingabe mögliche andere Buchstabenkombinationen generieren und hängen diese in den SearchString rein --> Beispiel Adidas
Code :1
http://search.ebay.de/(didas,aidas,addas,adias,adids,adida,daidas,aiddas,addias,adiads,adidsa,sdidas,aadidas,asidas,afidas,addidas,addas,adisas,adifas,adiddas,adidss,adidaas,adidaa,adidad,adidass
-
Hallo,
hier scheint es sich um einen recht simplen Algorithmus zu handeln. Zuerst wird jeweils ein Buchstabe weggelassen. Dann werden jeweils zwei aufeinander folgende Zeichen ausgetauscht (Buchstabendreher). Schlussendlich werden noch alle Möglichkeiten durchprobiert, die dadurch entstehen, dass man jeweils einen Buchstaben durch einen auf der Tastatur daneben liegenden austauscht.
edit: Ganz übersehen: auch versehentlich gedoppelte Buchstaben werden in die Vertipperliste aufgenommen.
Beispielimplementation:
Grüße,PHP-Code:<?php
function vertipper($wort) {
$len = strlen($wort);
$liste = array();
// 1. Weggelassene oder doppelte Buchstaben
for ($i = 0; $i < $len; ++$i) {
$liste[] = substr($wort, 0, $i) .
substr($wort, $i+1);
$liste[] = substr($wort, 0, $i+1) .
substr($wort, $i);
}
// 2. Buchstabendreher
for ($i = 0; $i < $len-1; ++$i) {
$liste[] = substr($wort, 0, $i) .
$wort{$i+1} . $wort{$i} .
substr($wort, $i+2);
}
// 3. Auf der Tastatur nahe liegende Buchstaben
$tastaturzeilen = array(
'1234567890ß',
'qwertzuiopü',
'asdfghjklöä',
'yxcvbnm',
);
for ($i = 0; $i < $len; ++$i) {
$buchst = $wort{$i};
$daneben = array();
foreach ($tastaturzeilen as $zeile) {
if (($pos = strpos($zeile, $buchst)) !== false) {
if ($pos-1 >= 0) {
$daneben[] = $zeile{$pos-1};
}
if ($pos+1 < strlen($zeile)) {
$daneben[] = $zeile{$pos+1};
}
}
}
foreach ($daneben as $ersatz) {
$vertipper = $wort;
$vertipper{$i} = $ersatz;
$liste[] = $vertipper;
}
}
return array_values(array_unique($liste));
}
print_r(vertipper('tutorials'));
?>
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
06.07.06 21:10 #6
Habe ich nicht ausprobiert..... die sollen ja kein Geld durch uns einnehmen.

Ich vermute allerdings dass sie lediglich die "typischen" Vertipper in einer Datenbank hinterlegt haben.
Denkbar währe z.b. "Heuser" für "Häuser"..... oder Buchstabenverdreher wie z.b. "Häusre".
Mein Beispiel "äährseur" wird also wohl kaum gefunden werden wenn ich nach "Häuser" suche.
Ähnlich macht es Google ja auch..... nur halt umgekehrt.
Wenn ich nach "Häusre" suche, fragt mich Google "Meinten Sie: Häuser".
[edit]
@Matthias, das währe natürlich auch eine Möglichkeit..... ich würde es mal als "logischen Fehler" bezeichen, also z.b. die von Dir angesprochenen Nachbartasten oder fehlende Buchstaben.
Solche Dinge passieren ja recht schnell mal.
[/edit]Geändert von Dr Dau (06.07.06 um 21:16 Uhr)
Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
-
06.07.06 21:39 #7
- Registriert seit
- Mar 2001
- Ort
- München
- Beiträge
- 4.789
Mann macht ihr das alle kompliziert

MySQL 4.0 Referenzhandbuch :: 7.3.2 Zeichenketten-Funktionen
Sprich "select name from bloedetabelle where SOUNDEX(name) = SOUNDEX("Heuser")SOUNDEX(zeichenkette)
Gibt eine Soundex-Zeichenkette von zeichenkette zurück. Zwei Zeichenketten, die fast gleich klingen, sollten identische Soundex-Zeichenketten haben. Eine Standard-Soundex-Zeichenkette ist 4 Zeichen lang, aber die SOUNDEX()-Funktion gibt eine beliebig lange Zeichenkette zurück. Sie können SUBSTRING() auf das Ergebnis anwenden, um eine Standard-Soundex-Zeichenkette zu erhalten. Alle nicht alphanumerischen Zeichen in der angegebenen Zeichenkette werden ignoriert. Alle internationalen alphabetischen Zeichen ausserhalb des Wertebereichs A bis Z werden als Vokale behandelt:
SELECT *
FROM meine_tabelle
WHERE soundex( username ) = soundex( "Christian Vein" )
findet Christian Fein
Erst wenn der letzte Programmierer eingesperrt...
...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
-------------------
chris: hey Tom hast du eigentlich ne Freundin
jdar: ich bin tutorials.de Mod!
-
Danke Matthias, genau das hab ich gesucht.
Zitat von Matthias Reitinger
Funktioniert auch gut für mein Problem, aber mir gefallen die Vertipper besser, die man "reproduzieren" kann
Zitat von Christian Fein
-
Hallo,
SOUNDEX() versagt nur leider, wenn es um Vertipper geht, die phonetisch unähnliche Wörter erzeugen.
Zitat von Christian Fein
Lustiges Detail am Rande: SOUNDEX('spears') == SOUNDEX('superzicke')
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
07.07.06 00:19 #10
@Matthias, perfekt ist Dein Script aber dann doch nicht.
Was ist wenn man einen Buchstaben zu weit oben oder unten getippt hat?
Also beim beim z.b. "t" könnte man ja z.b. auch das "g" oder evtl. das "f" getroffen haben.Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
-
Hallo,
Hab ich auch nie behauptet
Zitat von Dr Dau
Ich hab mit meinem Skript nur die Funktionalität der verlinkten Seite imitiert, nicht mehr und nicht weniger.
Schon allein die Tatsache, dass bei einem längeren Wort durchaus auch mal zwei Vertipper passieren können, bringt diese Implementierung in's straucheln.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
07.07.06 01:11 #12
@Matthias, ich wollte ja nur drauf aufmerksam machen..... ich weiss ja schliesslich nicht wie weit Du das Script getestet hast.
Schri-Schra-Schrödi *g*
mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
Dinge, die mit Tabellen besser klappen als mit CSS
Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
Meine Links zum Thema Linux (Last update: 21.06.2009)
Kein Busen ist so flach wie das Niveau dieser Party!
----
Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
----
Ich habe 3 Kinder und kein Geld!
Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)
![]() |
PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training) Preis: früher: 39,95€ - jetzt nur: 7,99€ PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD Hier geht es zum Angebot Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar! |
Ähnliche Themen
-
Tabelle in einer db suchen - wenn nicht vorhanden dann CREATE
Von Flextone im Forum PHPAntworten: 18Letzter Beitrag: 28.04.06, 00:44 -
Teile eines Namens in der Db suchen
Von Grunge im Forum PHPAntworten: 2Letzter Beitrag: 11.03.06, 14:28 -
Nach einem bestimmten Eintrag in DB suchen
Von Eistee im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 20.05.05, 13:59 -
nächste freie id in DB suchen
Von kesnw im Forum PHPAntworten: 7Letzter Beitrag: 31.03.04, 12:41 -
in Db suchen aba richtig
Von SchwarzerWolf im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 26.04.02, 19:01



Zitieren


Login





Lesezeichen