Genauigkeit von Suchergebnissen ermitteln

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Gute Morgen, ich durchforste die SQLalchemy und Postgresql Dokumentationen nach einer Möglichkeit, wie man Informationen über die Genauigkeit eines Suchergebnisses erhalten kann, aber mich beschleicht der Verdacht, dass mir die Datenbank diese Information gar nicht liefern kann. Bevor ich also noch ein paar Stunden sinnlos vergeude frage ich lieber mal.

Wenn ich mit SQLAlchemy eine Anfrage mit .like() durchführe bekomme ich ja nicht unbedingt einen exakten Treffer. Kann mir die Datenbank/SQLAlchemy Informationen darüber liefern, wie exakt ein Suchergebnis mit dem Suchbegriff übereinstimmt? Ich mache keine Volltextsuche sondern eine Stichwortsuche.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
BlackJack

@burli: Die Information bekommt man über normales SQL tatsächlich nicht.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich bin bei Postgresql über Ranking gestolpert. Aber so richtig bringt mich das nicht weiter, zumindest, wenn ich es richtig verstanden hab.

Da muss ich wohl selbst ran.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Mir fällt grad der Name nicht ein, aber in den Postgres-Extensions gibts afair ein Tool, das die Buchstabenvertauschungen zwischen den beiden Begriffen zählt und so ein Maß für die Genauigkeit bildet. Mußt mal in der Postgres- Doku (Anhang F;)) schauen, da sollte das drin stehen.

Gruß Uwe
---------------------------------
have a lot of fun!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

@Käptn Haddock: Meinst du fuzzymatchstr?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Leonidas hat geschrieben:@Käptn Haddock: Meinst du fuzzymatchstr?
Genau. Habs auch grad gefunden. Die Levenshtein-Distance könnte hier hilfreich sein.

Gruß Uwe
---------------------------------
have a lot of fun!
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wenn ich mit SQLAlchemy eine Anfrage mit .like() durchführe bekomme ich ja nicht unbedingt einen exakten Treffer.
Darum sucht man doch mit 'LIKE', eben um nicht exakt zu suchen. :-)

Was ist denn der Hintergrund der Frage?

Gruß, noisefloor
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Naja, ich möchte wissen, wie weit die gefundenen Treffer vom Suchbegriff abweichen. Wenn ich nach 12 suche und eine 12 finde ist das ein besserer Treffer als wenn ich eine 128 oder 1280 finde. Wenn ich nach ABC suche ist ABCD besser als ABCDEF usw

Es soll also weniger wie bei soundex ein "klingt ähnlich" sein sondern ein "der gefundene Treffer entspricht *exakt* dem Suchbegriff" oder "der gefundene Treffer enthält den Suchbegriff plus x andere Zeichen"
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

axo. Also quasi eine "Qualitätsbewertung" der Suchergebnisse. Frag' doch mal bei Google nach deren Ranking-Algorithmus. :D

Gruß, noisefloor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

burli hat geschrieben: Es soll also weniger wie bei soundex ein "klingt ähnlich" sein sondern ein "der gefundene Treffer entspricht *exakt* dem Suchbegriff" oder "der gefundene Treffer enthält den Suchbegriff plus x andere Zeichen"
Genau dazu hatte Käptn Haddock ja etwas geschrieben:
http://en.wikipedia.org/wiki/Levenshtein_distance

@niosefloor: google arbeitet primär mit dem PageRank Algorithmus (http://en.wikipedia.org/wiki/PageRank). Das ist ein Algo, der auf Graphen basiert (Seiten = Knoten, Hyperlinks = (gerichtete) Kanten) und somit nicht für Ähnlichkeit von Strings zu gebrauchen ist.

Das Hauptproblem dürfte nur sein, dass SQL so etwas nicht von Haus aus bietet. Allerdings kann man doch bei Postgres selber Funktionen erstellen, oder? Vielleicht hat ja da mal jemand eine Levenshtein-Funktion implementiert, die man dann direkt in SQL benutzen könnte.

Edit: Ok, hab grad gesehen, dass diese Funktion bereits existiert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ok, danke, ich werde mir das dann mal anschauen
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Antworten