Suchfunktion Programmieren?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Suchen kann man so einiges. Die Frage wäre also zunächst: Wie sieht die Nadel aus, die im Heuhaufen versteckt wurde? Und gleich hinterher: Wie groß ist der Heuhaufen bzw. welches Gebiet umfasst er?

Geht es darum, ein Wort in einer Liste zu finden? Ein Wort in einem Text? Ein Wort in einer Datei in einem Verzeichnis? Assoziationen zu einem Wort in irgendeiner gegebenen Datenmenge?

Je nachdem gestaltet sich so ein Projekt einfach oder komplex. Und je nach Datenquelle sollte ebenso die Herangehensweise angepasst werden.

  • Bei größeren Datenmengen wäre es sicherlich praktisch, diese zu indizieren. Apache Lucene kann dabei helfen.
  • Vielleicht ordnet man sich die Daten zuvor in einer geordneten Baumstruktur an oder sortiert sie, um via binärer Suche schnell an sie heranzukommen?
  • Bei Wortassoziationen (Bsp.: blau -> Wasser, Himmel, Freiheit, giftig, ...) könnte sich ein Graph eignen.
  • Eine Suche nach Wortähnlichkeit (im Klang) wird als phonetische Suche bezeichnet. Auf die Zeichenunterschiede beschränkt wäre die Levenshtein-Distanz.

Die aufgeführten Punkte würde ich nicht als einfach für Anfänger bezeichnen. Dies solltest du aber nicht als Hürde sehen, es nicht dennoch zu versuchen, wenn das Interesse daran groß ist.


Maik09890 
Beitragsersteller
 29.01.2021, 15:54

Ja ich glaub da bin ich dann doch noch ein bissl zu sehr am Anfang des Programmierens, aber danke trotzdem :)

0

Das kommt darauf an, wie 'mächtig' Deien Suche sein soll und wie effizient. In der Regel braucht es dann eine Indizierung, die natürlich wiederum Stemming beachten muß. Wenn DU wie in anderen Antworten angeklungen, eine Ähnlichkeitssuche brauchst, dann wird die Levenshtein-Distanz Dich beschäftigen müssen.

Daß die Aufgabe nicht leicht ist, sieht man ganz gut an Google, deren Ähnlichkeitssuche ist angelsächsisch geprägt und funktioniert teilweise ausgesprochen schlecht.

Hallo,

Die Idee ist nicht schlecht. Der Code sollte nicht zu umfangreich sein, aber das erforderliche Gehirnschmalz trotzdem ansehnlich. Ich glaube das Problem ist die Implementierung einer potenten Volltextrecherche. Es gilt in einem Inhalt nach passendem Text zu suchen und dann den gesamten Inhalt darzustellen.

Zum Testen bedient man sich am besten eines Buchinhaltes oder einer Tageszeitung oder was auch immer.

Wie finde ich in einem Text einen gesuchten Teilstring? Wie ist der Text zu organisieren?

Viel Spass bei Entwicklung und Codierung!

Harry


Maik09890 
Beitragsersteller
 28.01.2021, 14:43

Mit indexOf() finde ich doch ein Teilstring in nem Text, oder? Und was genau meinnst du mit Buchinhalt?

0
heizfeld  28.01.2021, 15:17
@Maik09890

Jaja, IndexOf(), bist du sicher, das ist wirklich schnell. Dein IndexOf wirst du dir selber schreiben müssen, wenn deine software was taugen soll.

Ja, was ist denn in einem Buch?? Jede Menge Text, oder? Da kannst du auch gleich sehen, wie schnell deine Suchroutine ist

0

Wo soll das Programm denn nach "dem Ding" suchen?

Gaaaaan stark vereinfachtes Beispiel: Google klappert ja aller Seiten im Internet ab und merkt sich, welche Worte auf welcher Seite vorkommen. Das Ganze kannst du dir wie eine lange Liste vorstellen, wo pro Zeile eines der gefundenen Worte steht und daneben die Adresse der Webseite. Wenn du nun nach einem Begriff "googelst", wird diese Liste durchsucht und die Web-Adresse aus der Zeile dir dann als Link in dem Suchergebnis angezeigt.

Was soll dein Programm finden können?


Maik09890 
Beitragsersteller
 28.01.2021, 14:41

Also ich dachte mir das so: Ich mache ein paar Methoden und da stehen dann irgendwelche Infos drinne. Wenn man jz in der Konsole was eingibt zum Bsp zum Thema Baum, dann soll die Methode aufgerufen werden, die mit Bäumen zu tun hat. Mein Problem war jetzt auch eigl mehr so dass wenn ich was zu Baum suchen will, aber ausversehen Baom eingebe. Dann soll trotzdem Baum kommen, weil das eingegebene Wort sehr viel Ähnlichkeit mit Baum hat. Ok?

0
VanLorry  28.01.2021, 15:12
@Maik09890

D.h. du willst eine Methode aufrufen, dessen Name der Benutzer eingegeben hat? Gibt er "baum" ein, ruft dein Programm die Methode "baum( )" auf?
Das ist ungünstig - wie du ja mit deinem "Baom" Beispiel schon selbst gesehen hast.
Du benötigtst deine Daten, nach denen gesucht werden soll, und die dazugehörigen Infos, die du dann ausgeben willst in einer Datenstruktur, wie z.B. einer Liste (z.B. verkette Liste oder Arrays). Dann bist du viel flexibler beim Programmieren und der Lösung, die du entwickelst.
Datenstrukturen allemein sind auch nur Variablen, die aber mehr als nur einen Wert enthalten können. Mein Tipp: informiere dich mal darüber, was Datenstrukturen sind und was man damit machen kann.

0

Wie kompliziert es ist hängt davon abwas für Funktion die Suche hat. Je nachdem wie kompliziert du den such Algorithmus machst.

Woher ich das weiß:Hobby – Ich interessiere mich für das programmieren und Informatik