tutorials.de-Buchverschenkaktion 08/2010
+ Auf Thema antworten
  1. #1
    MaxMara MaxMara ist offline Mitglied Silber MaxMara hat eine blütenweiße Weste
    Registriert seit
    Jan 2004
    Ort
    Wien
    Beiträge
    76
    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

  2. PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training)

    Preis: früher: 39,95€ - jetzt nur: 7,99€
    Innerhalb Deutschlands versandkostenfrei!

    PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD
    - PHP-, MySQL- und PHPMyAdmin-Grundlagen
    - Datenbankprogrammierung, objektorientierte Programmierung
    - Geeignet für Windows XP und Windows Vista


    Hier geht es zum Angebot

    Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar!


  3. #2
    Benutzerbild von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter
    tutorials.de Premium-User
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    5.864
    Blog-Einträge
    3
    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 Dau
    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)

  4. #3
    MaxMara MaxMara ist offline Mitglied Silber MaxMara hat eine blütenweiße Weste
    Registriert seit
    Jan 2004
    Ort
    Wien
    Beiträge
    76
    Danke für deine Antwort!
    Ich hab mir schon gedacht, dass es nicht leicht wird.
    Hab heute (in der Arbeit ) ein wenig get 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)

  5. #4
    Benutzerbild von nikwithk
    nikwithk nikwithk ist offline Mitglied Bronze nikwithk hat eine blütenweiße Weste
    Registriert seit
    Apr 2005
    Beiträge
    45
    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

  6. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.457
    Blog-Einträge
    5
    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:
    PHP-Code:
    <?php

    function vertipper($wort) {
        
    $len strlen($wort);
        
    $liste = array();

        
    // 1. Weggelassene oder doppelte Buchstaben
        
    for ($i 0$i $len; ++$i) {
            
    $liste[] = substr($wort0$i) .
                
    substr($wort$i+1);
            
    $liste[] = substr($wort0$i+1) .
                
    substr($wort$i);
        }

        
    // 2. Buchstabendreher
        
    for ($i 0$i $len-1; ++$i) {
            
    $liste[] = substr($wort0$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->= 0) {
                        
    $daneben[] = $zeile{$pos-1};
                    }
                    if (
    $pos+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'));

    ?>
    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

  7. #6
    Benutzerbild von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter
    tutorials.de Premium-User
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    5.864
    Blog-Einträge
    3
    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)

  8. #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
    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:
    Sprich "select name from bloedetabelle where SOUNDEX(name) = SOUNDEX("Heuser")

    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!

  9. #8
    MaxMara MaxMara ist offline Mitglied Silber MaxMara hat eine blütenweiße Weste
    Registriert seit
    Jan 2004
    Ort
    Wien
    Beiträge
    76
    Zitat Zitat von Matthias Reitinger
    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.
    [...]
    Danke Matthias, genau das hab ich gesucht.

    Zitat Zitat von Christian Fein
    Sprich "select name from bloedetabelle where SOUNDEX(name) = SOUNDEX("Heuser")
    Funktioniert auch gut für mein Problem, aber mir gefallen die Vertipper besser, die man "reproduzieren" kann

  10. #9
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.457
    Blog-Einträge
    5
    Hallo,

    Zitat Zitat von Christian Fein
    Mann macht ihr das alle kompliziert
    SOUNDEX() versagt nur leider, wenn es um Vertipper geht, die phonetisch unähnliche Wörter erzeugen.

    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

  11. #10
    Benutzerbild von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter
    tutorials.de Premium-User
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    5.864
    Blog-Einträge
    3
    @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)

  12. #11
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.457
    Blog-Einträge
    5
    Hallo,

    Zitat Zitat von Dr Dau
    @Matthias, perfekt ist Dein Script aber dann doch nicht.
    Hab ich auch nie behauptet 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

  13. #12
    Benutzerbild von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter Dr Dau ist berühmt wie kein Zweiter
    tutorials.de Premium-User
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    5.864
    Blog-Einträge
    3
    @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)

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 28.04.06, 00:44
  2. Teile eines Namens in der Db suchen
    Von Grunge im Forum PHP
    Antworten: 2
    Letzter Beitrag: 11.03.06, 14:28
  3. Nach einem bestimmten Eintrag in DB suchen
    Von Eistee im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 20.05.05, 13:59
  4. nächste freie id in DB suchen
    Von kesnw im Forum PHP
    Antworten: 7
    Letzter Beitrag: 31.03.04, 12:41
  5. in Db suchen aba richtig
    Von SchwarzerWolf im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 26.04.02, 19:01

Lesezeichen

Lesezeichen