You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Tuesday, October 28th 2008, 4:29pm

Suche Tips zum Erstellen einer intelligenten Suche

Ich möchte ein Skript erstellen mit dem man durch Eingabe eines Suchbegriffs nicht nur die Ergebnisse findet welche exakt auf den Begriff passen sondern auch die Dinge welche ggf. ein klein wenig anders geschrieben sind. Mal ein Beispiel.

Enthalten in der Datenbank ist folgendes
Autofahrer
Autofarer
Autopfahrer
Audofahrer

Suchbegriff ist einfach Autofahrer. Normal würde lediglich der erste Eintrag gefunden werden und selbst dieser ggf. nur wenn die Groß- und Kleinschreibung passt. Nun soll das Skript aber in der Lage sein zu erkennen, dass das Wort auch auf die anderen Einträge passt wenn man berücksichtigt der der Schreiber leider keine so guten Rechtschreibkenntnisse hatte.

Oder kennt jemand ein Skript oder sonst was womit sowas bereits möglich ist?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Cust

Unregistered

2

Wednesday, October 29th 2008, 7:21pm

Da musst du dir was mit den regular expressions zusammenstellen. Sollte normalerweise schon nmachbar sein, müsste ich mich aber auch genauer mit auseinandersetzen um dir dort genaueres sagen zu können. Aber das wichtigste Stichwort ist ja schon gefallen ;), Reguläre Ausdrücke.

lg

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

3

Friday, October 31st 2008, 5:16pm

ich kann mir momentan nicht vorstellen, wie das mit regular expressions laufen soll. ich hab mal an einer nummernschilderkennung gearbeitet, wo ich erkannte nummernschilder mit in einer db vorhandenen abgleichen musste. aufgrund der qualität des erkennungsalgorithmus' war es hier nötig strings auf ähnlichkeit zu überprüfen und ich denke sowas sucht der prometheus. ich kann dir kein ganzes script jetzt auf die schnelle basteln, aber ich habs nach punktesystem gemacht.

gleicher buchstabe an gleicher stelle gab 3 punkte, gleicher buchstabe ein feld nach vorne oder hinten verschoben gab dann einen punkt abzug, buchstabe gar nicht vorhanden gab 2 punkte abzug, ähnlicher buchstabe (zum beispiel 1 und i, oder 0 (Null) und O) gab einen punkt. dann musste man nachher nur noch den treffer mit der höchsten, bzw bei dir die treffer mit den höchsten punkten anzeigen.

könntest du ja mal probieren.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Spy

Trainee

Posts: 127

Occupation: Feriengammler

  • Send private message

4

Wednesday, November 5th 2008, 10:48pm

Hmm.. weiß nicht ob es effizient ist...

Autofahrer
Audofahrer

du suchst beide Strings nach Perioden ab: Au, ofahrer damit kann man evtl. anhand der anzahl der perioden(gleichen strings) und länge eine art prozentzahl entwickeln.

Audutfahrrer
Autofahrer

Peropide bzw. gleiche Strings: Au .... fahr ... er (oder fah ... rer)
_________________________________________________________

Vielleicht kann man den next() Array Erstellungs Algorithmus nutzen bzw. etwas erweitern. (KMP Textsuche)
Die Welt ist irgendwie total Buggy programmiert X(

This post has been edited 1 times, last edit by "Spy" (Nov 5th 2008, 10:50pm)


Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Friday, November 21st 2008, 11:25pm

Nun ja, ich hab inzwischen ein Konzept für so eine Suche. Allerdings ist glaube ich damit jeder Webserver überfordert falls mal 10-20 Leute gleichzeitig was suchen. Ich zerlege dabei die eingegebenen Suchbegriffe sequenziell und bilde daraus eine Treffergenauigkeit. Und dann lass ich die Ergebnisse die über 75% liegen ausgeben. Allerdings hab ich unglaublich viele DB Abfragen und das geht gar nicht. Das Wort "Tester" erzeugt schon 20 Abfragen bei meiner momentanen Methode. Ich schau mal ob ich das verfeinert bekomme.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

splasch

Beginner

Posts: 24

  • Send private message

6

Sunday, November 23rd 2008, 7:05pm

Also es gibt Firmen die sich speziel nur dem Thema gewittmet haben.

Ich glaube das ganze läuft eher über Backlisten. Dort werden einfach alle Variationen von verschreibfehler abgelegt und eine zuweisung zum Richtigen Begriff geben.

Man könnte Suchanfragen die 0 Suchtreffer ergeben haben extra abspeichern um Sie später eine Manuelle zuordnung zu gewähren.

Im Grunde ist es nix anderes als ein Großes Lexion mit allen Möglichen schreibfehler varianten.

Ich glaub nicht das man den Vorgang Automatiesieren kann. Eine Manuelle nachbearbeitung wird immer notwendig sein.

Alles andere Were sicher zu Performec lastig.

Aber entell läst du uns ja Teil haben wie du das Momentan mit 20 Abfragen gelöst hast.

Mit Lexion ist sicher nur 1 Abfrage notwenig.

Mfg Splasch

This post has been edited 1 times, last edit by "splasch" (Nov 23rd 2008, 7:06pm)


davil

Beginner

Posts: 36

Location: Wien

Occupation: Entwickler

  • Send private message

7

Thursday, February 26th 2009, 12:47am

Ich weiß, die Antwort kommt jetzt viel zu spät, aber da bis jetzt keine sinnvolle Lösung genannt wurde: Zend Lucene Search kann Fuzzy Search, was ziemlich genau den Anforderungen entsprechen sollte (außerdem ist es auch ansonsten eine ziemlich geniale Such-Engine). Die Einbindung des Zend Framework in eine bestehende Applikation ist gar nicht so schwer und lohnt sich in diesem Fall ziemlich sicher.

Einziger Nachteil den man berücksichtigen muss: Lucene benötigt immer einen eigenen Suchindex in Dateiform, d.h. man muss die DB-Einträge einmal alle indizieren, damit sie durchsuchbar sind. Dafür ist die Suche aber in vielen Fällen auch deutlich schneller als viele LIKE o.ä. in MySQL. Lucene verwendet für die Fuzzy Search die Levenshtein-Distanz.

Für einfache Sachen kann man auch SOUNDEX verwenden, was in MySQL nativ unterstützt wird. Das funktioniert allerdings eigentlich nur für Englisch vernünftig und dort auch nur recht eingeschränkt.
~~~ ihr seid alle krank! ~~~ :D

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

8

Thursday, February 26th 2009, 8:17am

Das Zend Framework wollte ich mir so oder so mal anschauen da ich mal testen wollte ob ich mein Vorhaben damit umsetzen kann. Werde das auf jeden Fall mal ins Auge fassen. Danke für den Tip.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel