Hinweis

Nach Klick auf "OK" wird eine Verbindung zu Facebook oder twitter hergestellt. Dadurch werden ggfs. Daten an diese Plattformen übermittelt.

 

@Programmierer: Suchfunktion

maximilius
Priester
Avatar
Geschlecht: keine Angabe
Beiträge: 1748
Dabei seit: 01 / 2007

VPN-Key:
Betreff:

@Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 08:59 Uhr  ·  #1
Vorwort
Während der letzten Jahre bin ich immer mehr dahin gekommen, zu behaupten, dass man
- nicht wissen muss, wo etwas steht
- sondern es ausreicht, wenn man es einfach nur findet.

Praxisbeispiel
Wenn ich im Siedlerforum die Portfreigabe für Router suche muss ich wissen, dass ich das im folgenden Forum finde: Siedler 3

Community Foren-Übersicht » Router & Firewall » Screenshot der verschiedenen Geräte
Ich weiß das auch, weil ich jahrelang in der Community aktiv war.

Jemand der dieses Wissen nicht hat, muss die Information trotzdem finden. Es wäre schön, wenn er mithilfe der Suchfunktion seine

Informationen erhält.

Qualität der Suchfunktion
Ich möchte in diesem Beitrag die Tatsache außer Acht lassen, dass Syntax unterschiedliche Symantik haben kann, sprich, dass das Wort

"Bank" einmal die Bezeichnung für ein Kreditinstitut sein kann und andererseits eine Sitzgelegenheit.

Jetzt kommt hinzu, dass man bei trivialen Suchen exakt die Wörter eingeben muss, die sich auch im zu findenden Text befinden. So

erging es mir auf Arbeit, das ich nach "Lageplan" gesucht habe und 0 Suchergebnisse geliefert bekam. Eine Weile später habe ich die

gesuchte Seite durch folgen von verschiedenen Links gefunden und bemerkte, dass sie statt des Wortes "Lageplan" das Wort

"Lagepläne" beinhaltete und mir deshalb keine Suchergebnisse angezeigt wurden.

Algorithmus für bessere Suchfunktionen
Um bei Flexion der Wörter, Tippfehler und Rechtschreibfehlern dennoch Suchergebnisse zu liefern, kann man folgenden Algorithmus

einsetzen:

Man teilt das Wort in überlappende Buchstabenfolgen von je 3 Buchstaben und sucht danach.

Stellen wir uns vor, es gäbe zwei Datensätze:
1) "Hier finden Sie die Lagepläne unser Gelände in ganz Deutschland."
2) "Der Gepaart jagt in Afrika"

Man sucht nun nach "Lageplan"
Dieses Wort liefert die folgenden Dreierbuchstabenfolgen:
Code

Lag
age
gep
epl
pla
lan


Die Dreierbuchstabenfolgen finden sich teilweise in den Datensätzen wieder (Caseinsensitive):

1) "Hier finden Sie die Lagepläne unser Gelände in ganz Deutschland."
2) "Der Gepaart jagt in Afrika"

5 der 6 Dreierbuchstabenfolgen werden im 1. Datensatz gefunden.
1 der 6 Dreieerbuchstabenfolgen werden im 2. Datensatz gefunden.

Sortiert man nun die Anzeige der gefundenen Datensätze absteigend danach, wie viele Dreierbuchstabenfolgen gefunden wurden,

befinden sich die relevanten Datensätze oben und die Fehltreffer unten.
Das Fehltreffer angezeigt werden ist entweder nicht schlimm, da man sie ohnehin nicht liest, weil man gleich oben den richtigen Treffer

hat oder nicht schlimm, weil man ab einer bestimmten Anzeige die Liste abschneiden kann.
Abschneiden deshalb, weil dieses Beispiel nur zwei Datensätze beinhaltet. Würden viele tausend Datensätze existieren und der Suchende

erhält eine lange Trefferliste, findet er entweder in den ersten Datensätzen seinen gesuchten Datensatz, oder falls es sehr viele

Datensätze zu seinem Thema gibt, wird er dazu verleitet, die Suche weiter zu spezifizieren.

Im oben genannten Beispiel sähe das so aus, dass dem Suchwort "Lageplan" "Deutschland" hinzugefügt wird: "Lageplan Deutschland"
Dabei würde ein Tippfehler "Lageplan Duetschland" voraussichtlich die gleiche Auflistung von Treffern erziehlen.

Meine Frage
Ich stell mir die Frage, wie man mithilfe von SQL die Sortierreihenfolge festlegen kann.

Mit folgendem SQL Request erhält man die Datensätze:
Code

SELECT datensatz
FROM datensaetze
WHERE
   LOWER(datensatz) LIKE 'lag' OR
   LOWER(datensatz) LIKE 'age' OR
   LOWER(datensatz) LIKE 'gep' OR
   LOWER(datensatz) LIKE 'epl' OR
   LOWER(datensatz) LIKE 'pla' OR
   LOWER(datensatz) LIKE 'lan'

(Denkt euch Prozentzeichen um die Suchstrings, die konnte das Forum nicht darstellen.

Hat jemand eine Idee, wie man ermitteln kann, wieviele der gesuchten Dreierbuchstabenfolgen gefunen wurden, um danach zu

sortieren?

lg Stephan

Ähnliche Themen

auditt
Eisenschmelzenarbeiter
Avatar
Geschlecht: keine Angabe
Beiträge: 444
Dabei seit: 10 / 2005

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 11:48 Uhr  ·  #2
Auf deine Frage kann ich dir keine Lösung geben, aber mein Einwand ist, ob du dich nicht schon einmal mit Material beschäftigt hast, das es dazu schon gibt. Darüber haben sich doch schließlich schon andere den Kopf zerbrochen und Lösungen dafür gefunden. Kann mir kaum vorstellen, dass du darüber noch nicht Bescheid weißt.
Für Java gibt es doch sicherlich Bibliotheken dafür.

Stichwort: unscharfe Suche
- Levenshtein Distance
- trgm - Trigram matching for PostgreSQL
unknownSpirit
Müller
Avatar
Geschlecht: keine Angabe
Beiträge: 827
Dabei seit: 04 / 2006

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 12:17 Uhr  ·  #3
Zitat
Während der letzten Jahre bin ich immer mehr dahin gekommen, zu behaupten, dass man
- nicht wissen muss, wo etwas steht
- sondern es ausreicht, wenn man es einfach nur findet.

Die Suchzeit ist ein wichtiges Kriterium. Ich denke, Suchen kann man genau so lernen, wie alles andere auch. Weitere bedeutende Punkte sind die Bewertung, Ordnung, bei Bedarf Reorganisation und schließlich die Kombination des Gefundenen.
Zitat
Wenn ich im Siedlerforum die Portfreigabe für Router suche muss ich wissen, dass ich das im folgenden Forum finde: Siedler 3
Community Foren-Übersicht » Router & Firewall » Screenshot der verschiedenen Geräte

Ehrlich gesagt brauche ich dazu kein Wissen. Logik und systematische Vorgehensweise sind ausschlaggebend.
Zitat
Meine Frage
Hat jemand eine Idee, wie man ermitteln kann, wieviele der gesuchten Dreierbuchstabenfolgen gefunen wurden, um danach zu
sortieren?

Ich hoffe, du hast sie auch in einem Datenbankforum gestellt. Du schreibst eine theoretische Abhandlung über Suchvorgänge und suchst dann in der Praxis in einem Siedler 3 Forum. :-O
Über SQL weiß ich leider nur, dass es sich dabei um eine Datenbanksprache handelt. Es stellen sich mir mehr Fragen, als ich Antworten bieten könnte:
Woraus besteht die Ausgabe deines Requests? Gibt es zusätzliche Informationen oder nur Absatz- oder zeilenweise Kopie bzw. einzelne Wörter? Wird sie automatisch zwischengespeichert (d.h. kann man ohne Performanceverlust erneut darauf zugreifen) oder brauche ich dazu eine weitere Anweisung?
Zitat
(Denkt euch Prozentzeichen um die Suchstrings, die konnte das Forum nicht darstellen.

1 2 3
Müsste man mal in den Editor übernehmen. Ein ganzes Forum ohne Prozentzeichen... :?
Bearbeitung: Prozentzeichenaktualisierung
maximilius
Priester
Avatar
Geschlecht: keine Angabe
Beiträge: 1748
Dabei seit: 01 / 2007

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 13:07 Uhr  ·  #4
@auditt
Vielen Dank für deine Stichworte, damit konnte ich schon mal mehr Input erlangen.

Ich habe in erster Linie an PHP in Verbindung mit einer SQL Datenbank gedacht, da mich interessieren würde, mit wieviel Aufwand man eine Unscharfe Suche auf einer Website implementieren kann.
Aber Danke für den Einwand: Ich sollte mich dabei nicht auf eine Programmiersprache beschränken lassen.

@unknown_spirit
Aus Entwicklersicht kommt es auf die Zielgruppe einer Software drauf an, ob man voraussetzen kann, dass bestimmte Dinge angelernt werden oder nicht.

Wird eine Software in einer Abteilung eingeführt und von Anfang an steht fest, dass die Mitarbeiter geschult werden, kann man davon ausgehen, dass diese sich mit den logischen Hierarchien auskennen werden.

In der Siedler3 Community hingegen finden sich Personen unterschiedlichem Erfahrungsgrades und Wissenshintergrunds.

Beispiellsweise weiß ich was in einem Router vorgeht und habe auch schon mehrfach Router konfiguriert, damit ich Siedler3 Spielen kann. Meine Freundin hingegen spielt Siedler3 bisher nur offline. Kommt sie irgendwann auf die Idee, sich in die Internetwelt zu wagen, wird sie keine Verbindung zu offenen Spielen erhalten. Sie wird nicht auf die Idee kommen, im Forum gleich das Unterforum Router zu öffnen.

Die angesprochene systematische Vorgehensweise benötigt je nach Komplexität mehr oder weniger Zeit.
Beispielsweise erhalte ich Momentan aufgrund meines Onlinestudiums viele E-Mails mit Informationen rund ums Studium.

Wenn ich eine bestimmte Information heraussuchen möchte, weiß ich, wo ich sie finden kann: Im Studium Ordner meines Mailpostfachs.
Jetzt kan ich anfangen mich zu erinnern, in welchem Zeitraum ich die Mail erhalten habe, um die Menge an E-Mails, die ich zu durchsuchen habe zu verkleinern. So führe ich die systematische Vorgehensweise fort und finde irgendwann die gesuchte Information.
Dabei vergeht mir jedoch zu viel Zeit, die ich gerne der Verarbeitung der gefundenen Information zugute kommen lassen würde.
Daher starte ich lieber eine Suche und finde dadurch die Information viel schneller.

Dass ich die Frage in einem (speziellen) Siedler3 Forum stelle hängt damit zusammen, dass ich mich gerne mit bestimmten Personen über dieses Thema austauschen möchte, bei der die Wahrscheinlichkeit ungleich höher ist sie in diesem Forum anzutreffen, statt in einem Datenbankforum.

Wie die Rückgabewerte einer SQL Abfrage aussehen, kommt auf die Abfrage drauf an. In diesem Fall kann ich mir vorstellen, dass es sinnvoll ist die Primärschlüssel (Ein Index der abgefragten Daten) und den Text der Datensätze zurück zu erhalten, um damit Links auf der Website zu generieren.

Datenbanksysteme benutzen selbstständig Zwischenspeichermechanismen. Es gibt Mittel und Wege, die Zugriffsgeschwindigkeit von Datenbanken positiv zu beeinflussen. Beispielsweise muss man beim Erstellen der Datenbank sinnvoll das Indizierungsverhalten einzelner Spalten der Datenbanktabellen festlegen.

Das Prozentzeichen als Bild im Forum einzufügen ist eine gute Idee. Leider funktioniert diese nicht innerhalb eines Code-Blocks, wie ich ihn im obigen Beitrag verwendet habe.

lg Stephan
unknownSpirit
Müller
Avatar
Geschlecht: keine Angabe
Beiträge: 827
Dabei seit: 04 / 2006

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 14:00 Uhr  ·  #5
Zitat
Aus Entwicklersicht kommt es auf die Zielgruppe einer Software drauf an, ob man voraussetzen kann, dass bestimmte Dinge angelernt werden oder nicht.

Ich möchte mich nicht über Kleinigkeiten streiten. Du scheinst gerne mit mehr oder weniger akkuraten Beispielen zu jonglieren. Ein kurzer Kommentar zum Routerbeispiel: Wenn ich die Absicht habe, nach Portfreigaben für Router zu suchen, wie in deinem Beispiel vorgeschlagen, werde ich diese mit 99 Wahrscheinlichkeit nicht in der Abteilung Skurriles im Unterforum Fun Forum finden, sondern eben im gleichnamigen (!) Forum Router. Für diese Schlußfolgerung brauche ich nur minimalstes Wissen über Router (->Logik, Systematik). Deine Freundin hätte möglicherweise gar nicht die Intention Routereinstellungen vorzunehmen, weil sie den elementaren Zusammenhang Onlinespiel - Router gar nicht erst kennen würde.

Es geht dir also um einen spezifischen SQL-Code zum Ermitteln der Patternquantität, und nicht um grundsätzliche Ideen. Dann liegt wieder einmal ein Missverständnis vor. Du hast das Thema (Suchvorgänge) nur so umfangreich aufgezäumt, dass ich eine generelle Diskussion erwartete.
maximilius
Priester
Avatar
Geschlecht: keine Angabe
Beiträge: 1748
Dabei seit: 01 / 2007

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 09.07.2010 - 14:21 Uhr  ·  #6
Zitat geschrieben von unknown_spirit
Deine Freundin hätte möglicherweise gar nicht die Intention Routereinstellungen vorzunehmen, weil sie den elementaren Zusammenhang Onlinespiel - Router gar nicht erst kennen würde.
Genau das meine ich. Sie würde eher nach "Internet Siedler Problem" suchen und würde dann auf Beiträge treffen wie (ausgedacht:) "Wer Probleme beim Spielen von Siedler3 im Internet hat und hinter einem Router sitzt, sollte folgende Portfreigaben aktivieren..."
Im weiteren Verlauf des Themas würde sie dann die Lösung ihres Problems finden.

Entfernen wir uns von diesem konkreten Beispiel: Ja es geht um grundsätzliche Ideen einer "findenden" Suche. Eine die vielleicht sowohl über Forenbeiträge, als auch über Maps, Lanpartys, Tips und Tricks, Bildergallerien und allen anderen Siedler3 Inhalten läuft.

Der nächste Schritt wäre das Vorschlagen von weiteren Suchwörtern.
Als ich gerade eben "siedler" bei google.de eingegeben habe, wurde mir unter anderem "siedler 7 demo" und "siedler von catan" vorgeschlagen.
Das eine ist hauptsächlich ein Brettspiel, das andere ein Computerspiel. Diese Vorschläge haben den Vorteil, dass ich unterstützt werde, wenn ich nicht weiß, wie ich meine Suche weiter eingrenzen soll.

Nur wie die Daten zur Vorschlagssuche generiert werden, weiß ich leider nicht.

Jemand eine Idee?
Jemand eine Idee für die Sortierung von oben genanntem SQL Statement?

lg Stephan
Igi
R.I.P.
Avatar
Geschlecht: keine Angabe
Beiträge: 909
Dabei seit: 07 / 2007

VPN-Key:
Betreff:

Re: @Programmierer: Suchfunktion

 · 
Gepostet: 12.07.2010 - 15:27 Uhr  ·  #7
Das ist so Kompliziert ich würde siedler 3 einfach deinstalieren......

Spass beiseite, für mich sind all die suchmaschinen abhängig von der genauen Indexierung der Wörter.

Worter Wörter Woerter woter usw. Ich kann mir nicht vorstellen wie das gehen sollte.

Normalerweise sind doch suchabfragen so das sie erst die Wörter der reihenfolge nach suchen. wenn nichts gefunden wird die buchstabenfolgen betrachten.

Wenn jetzt also Deutschland richtig geschrieben ist, das wort davor aber flasch wird er dutschland aufführen und dann die von vorne nach hinten logisten buchstabenfolgen.

Ausser der Suchassistent ist eben wir mit dem beispiel Wörter in verschiedenen schreibweisen ausgestattet und kann daraus den warscheinlichsten Bereich wählen.

LG igi
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.

Cookie-Einwilligung

Diese Seite verwendet Cookies sowie Tracking-Technologien, um Dir die bestmögliche Funktionalität bieten zu können und um unsere Website stets zu verbessern.

Mit der Auswahl "Zustimmen" erlaubst Du dieser Webseite die Verwendung dieser Cookies und Technologien. Diese Webseite kann diese Daten an Dritte – etwa Social Media-Werbepartner wie Facebook und twitter – zu Marketingzwecken weitergeben. Weitere Informationen findest Du in der Datenschutzerklärung.

Cookie-Einstellungen verwalten

Bitte wähle und akzeptiere Deine Cookie-Einstellungen:

Weitere Informationen zu den verwendeten Daten kannst Du der Datenschutzerklärung entnehmen.