Hallo zusammen.
ich habe folgendes Problem.
Ich möchte eine Suchfunktion für eine Datenbanktabelle schreiben, ich bekomm bei übereinstimmung like = ‚‘ die Ergebnisse aus der Datenbank.
Wenn ich nun aber als Suchwort „schreiben“ eintippe bekomme ich natürlich nicht die Ergebnisse von „schreib“.
Wie kann ich dies berücksichtigen, direkt in MySQL oder vielleicht über similar_text()??
Mit dem similar_text habe ich es versucht, aber da kommen nicht meine bevorzugten Ergebnisse.
Grüße,
Sebastian
Ich möchte eine Suchfunktion für eine Datenbanktabelle
schreiben, ich bekomm bei übereinstimmung like = ‚‘ die
Ergebnisse aus der Datenbank.
Wenn ich nun aber als Suchwort „schreiben“ eintippe bekomme
ich natürlich nicht die Ergebnisse von „schreib“.
http://dev.mysql.com/doc/refman/5.1/de/string-compar…
lies die sache mit den platzhaltern
Wie kann ich dies berücksichtigen, direkt in MySQL oder
vielleicht über similar_text()??
eine datenbank ist dazu da, dass man ihr die richteigen fragen stellt, nicht dass man sie fragt was sie alles weiss, um daraus dann etwas auszuwaehlen.
Hallo Sebastian,
nur damit wir die Aufgabe richtig verstehen: Willst Du von jeden Wort auch nach den Wörtern suchen, die entsprechend 2(,3,4,…) Buchstaben kürzer sind oder willst ein Art Thesaurus haben: schreiben und schreib und tippen und tippe haben die gleiche Beduetung, also wenn ich eins davon eintippe suche bitte auch nach allen vier Begriffen?
MfG Georg V.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Ich möchte eine Suchfunktion für eine Datenbanktabelle
Mit dem similar_text habe ich es versucht, aber da kommen
nicht meine bevorzugten Ergebnisse.
Grüße,
Sebastian
Aber Sebastian das doch nun wirklich etwas wenig.
Gebe doch ein Beispeil , was dir z.b. am similar_text nicht gefällt, und was dir eigentlich gefallen würde. also ein Beispiel … oder gleich mehrere.
Hi Georg!
nur damit wir die Aufgabe richtig verstehen: Willst Du von
jeden Wort auch nach den Wörtern suchen, die entsprechend
2(,3,4,…) Buchstaben kürzer sind oder willst ein Art
Thesaurus haben: schreiben und schreib und tippen und tippe
haben die gleiche Beduetung, also wenn ich eins davon eintippe
suche bitte auch nach allen vier Begriffen?
suche bitte auch nach allen vier Begriffen?
Genau sowas in der Art. Wenn der Benutzer was eintippt, abr keine Ergebnisse bekommt, soll eine Liste angezeigt werden, die ähnlich sind, zB orthografisch (> Thesaurus ??) oder das über similar_text().
Wie zum Beispiel bei Google. Wenn ich bei Google Genetator eintippe, kommt Meinten Sie Generator?
Gruss,
Sebastian
http://dev.mysql.com/doc/refman/5.1/de/string-compar…
lies die sache mit den platzhaltern
OK, das klingt super. Habe es nun mit den Platzhaltern versucht, ich bekomme nun mehr Ergebnisse.
Jedoch nun zu meiner anderen Frage, wie entscheide ich, zB schreiben soll auf schreib gekürtzt werden und suche dann nach %schreib%?
Hallo Sebastian,
bitte warum erzählst Du nicht direkt, was Du gemacht hast, dann wäre auch die Aufgabenstellung klarer:
Ich habe es so gemacht:
- alle wörter die in der Datenbank stehen, werden in ein
Array geschrieben.
- über similar_text gebe ich ihnen einen Prozentwert, über
diesen Prozentwert entscheide ich dann welche Wörter angezeigt
werden.
- Jedoch kommen hier nicht die Ergebnisse die ich mir erhofft
habe!
> Beispiel 1)
> Ich tippe zum Beispiel schreiben ein:
> \> Meine gewünschten Ergebnisse wären:
> - Schreibwerkstatt
> - schreib
> - Rechtschreibung
>
> Beispiel 2)
> Ich tippe zum Beispiel Malen ein:
> \> Meine gewünschten Ergebnisse wären:
> - Acrylmalerei
> - Maler
> - Ausdrucksmalen
Warum erstellt diese Tabelle im Memory und nicht in der Datenbank? Dann könntest Du diesen Prozentwert direkt nach den neusten Ergebnissen modifizieren.
Wichtig wäre auch, dass man Eingabewörter, die keine oder nur wenige Treffer hat speichert, um das System ggf. umprogrammieren zu können. Also wirst Du später nicht nur Wörter haben, die in Deiner Datenbank existieren sondern auch Fehlschreibweisen.
Fehlschreibweisen (Hinweis bei Genetator auf das möglicherweise richtieg Wort Generator) kann man übrigens besser mit Levinstein-Distanz berechnen, aber dies ist auch eine teure Funktion.
MfG Georg V.
Hallo Sebastian,
Jedoch nun zu meiner anderen Frage, wie entscheide ich, zB
schreiben soll auf schreib gekürtzt werden und suche dann nach
%schreib%?
Das ist sehr schwierig und hängt auch davon ab, was für Gebiete Du mit deiner DB abfragen willst. Um es einigermassen sicher zu machen, wirst Du wohl um eine Art Thesaurus nicht herumkommen, wie es Georg V schon vorgeschlagen hat. Schliesslich gibt es nicht nur solche Fälle wie „schreiben“ -> „schreib“, sondern auch sowas: die Suche nach „PC“ soll ja wahrscheinlich auch „Computer“ finden oder bei „Motherboard“ soll „Hauptplatine“ gefunden werden, das Problem der Synonyme. Von den Homonymen („Leiter“ zum Hochsteigen elekrischer „Leiter“) will ich jetzt gar nicht erst anfangen.
Aber wie professionell soll es denn sein, denn 100% Trefferquote wirst Du eh nicht erreichen können (jedenfalls nicht mit einem vertretbaren Aufwand, oder Du bekommst dann eben eine Menge „Fehltreffer“ mit rein).
Du könntest natürlich die Verben bei der Suche um die Endungen kürzen also statt " schreib en" gleich „schreib“ nehmen, aber das bringt dich in solchen Fällen wie „backen“ -> „Bäckerei“ oder „singen“ -> „Gesang“ oder gar „singen“ -> „Lied“ nicht weiter.
Viele Grüße
Marvin
HI!
bitte warum erzählst Du nicht direkt, was Du gemacht hast,
dann wäre auch die Aufgabenstellung klarer:
Ich dachte ich habe mich klar ausgedrückt.
Ich kann das nicht anders erklären, als ich es scho gemacht habe.
> ARRAY[] alle Wörter der DB
> similar_text > Prozentwert zu Suchbegriff und Array[Index]
> sort > höchster Wert wird angezeigt!
Warum erstellt diese Tabelle im Memory und nicht in der
Datenbank? Dann könntest Du diesen Prozentwert direkt nach den
neusten Ergebnissen modifizieren.
Ich verstehe nicht warum in die DB, denn die similar_text() funktion berechnet den Prozentwert in Abhängigkeit zu dem Suchwort. Deshalb, dieser Prozentwert ist immer unterschiedlich von Suchbegriff zu Suchbegriff.
Wichtig wäre auch, dass man Eingabewörter, die keine oder nur
wenige Treffer hat speichert, um das System ggf.
umprogrammieren zu können. Also wirst Du später nicht nur
Wörter haben, die in Deiner Datenbank existieren sondern auch
Fehlschreibweisen.
Das klingt logisch, einleuchtend… So wie nach dem Prinzip Genetator und Generator… Werde ich mir überlegen.
Fehlschreibweisen (Hinweis bei Genetator auf das
möglicherweise richtieg Wort Generator) kann man übrigens
besser mit Levinstein-Distanz berechnen, aber dies ist auch
eine teure Funktion.
Levinstein-Distanz - habe ich ehrlich gesagt noch nie was gehört.
Wie geht dieser Algorithmus?
Beim googeln konnte ich nur wenig, bzw. keine hilfreichen Artikel finden.
Grüsse,
Sebastian
Levinstein-Distanz - habe ich ehrlich gesagt noch nie was
gehört.
Wie geht dieser Algorithmus?
Beim googeln konnte ich nur wenig, bzw. keine hilfreichen
Artikel finden.
Hallo Sebastian,
womit wir wieder beim Thema wäre: Der Mathematiker heist offiziell Levenshtein. 
Womit ich mich offiziell beim Ihm wegen Fehlschreibweise seines Namens entschuldige.
MfG Georg V.
Hi Georg.
womit wir wieder beim Thema wäre: Der Mathematiker heist
offiziell Levenshtein. 
Danke dir… levenshtein() -> PHP Funktion.
Werde ich gleich mal ausprobieren.
Gruss,
Seb