16 Stimmen

Die Relevanz der Volltextsuche wird gemessen in?

Ich bin dabei, ein Quizsystem zu entwickeln, und wenn Quizmacher Fragen in die Fragebank eingeben, soll ich die DB auf doppelte / sehr ähnliche Fragen überprüfen.

Testen von MySQLs MATCH() ... AGAINST() Die höchste Relevanz, die ich erhalte, ist 30+, wenn ich gegen eine 100% ähnliche Zeichenfolge teste.

Worin genau besteht also die Relevanz? Um die Handbuch :

Relevanzwerte sind nichtnegative Gleitkommazahlen. Relevanz Null bedeutet keine Ähnlichkeit. Die Relevanz wird auf der Grundlage der Anzahl der Wörter in der Zeile, der Anzahl der eindeutigen Wörter in dieser Zeile, der Gesamtzahl der Wörter in der Sammlung und der Anzahl der Dokumente (Zeilen), die ein bestimmtes Wort enthalten, berechnet.

Mein Problem ist, wie man die Relevanz Wert zu testen, wenn eine Zeichenfolge ein Duplikat ist. Wenn sie zu 100% doppelt ist, soll sie nicht in die Question Bank eingefügt werden. Wenn sie aber nur so ähnlich ist, soll der Quizmaker aufgefordert werden, zu überprüfen, ob sie eingefügt werden soll oder nicht. Wie mache ich das also? 30+ für 100% identische Zeichenfolge ist kein Prozentsatz, also bin ich ratlos.

Vielen Dank im Voraus.

8voto

Die grundlegende Datenstruktur für ein Textabfragesystem ist eine Umgekehrter Index . Dies ist im Wesentlichen eine Liste der in der Dokumentensammlung gefundenen Wörter mit einer Liste der Dokumente, in denen sie vorkommen. Sie kann auch Metadaten über das Vorkommen in jedem Dokument enthalten, z. B. wie oft das Wort vorkommt.

Dokumente, die diese Wörter enthalten, können durch Abgleich mit den Suchbegriffen abgefragt werden. Um die Relevanz zu bestimmen, wird eine Heuristik, bekannt als Kosinus-Ranking wird anhand der Treffer berechnet. Dazu wird ein n-dimensionaler Vektor mit einer Komponente für jeden der n Suchbegriffe konstruiert. Falls gewünscht, können Sie die Suchbegriffe auch gewichten. Dieser Vektor ergibt einen Punkt im n-dimensionalen Raum, der Ihren Suchbegriffen entspricht.

Ein ähnlicher Vektor, der auf den gewichteten Vorkommen in jedem Dokument basiert, kann aus dem invertierten Index konstruiert werden, wobei jede Achse im Vektor der Achse für jeden Suchbegriff entspricht. Wenn man das Punktprodukt dieser Vektoren berechnet, erhält man den Kosinus des Winkels zwischen ihnen. 1,0 entspricht cos (0), was voraussetzen würde, dass die Vektoren auf einer gemeinsamen Linie vom Ursprung aus liegen. Je näher die Vektoren beieinander liegen, desto kleiner ist der Winkel und desto näher liegt der Kosinus bei 1,0.

Wenn Sie die Suchergebnisse nach dem Kosinus sortieren (oder sie in eine Prioritätswarteschlange als mg tut) erhalten Sie die relevantesten. Clevere Relevanzalgorithmen neigen dazu, an der Gewichtung der Suchbegriffe zu rütteln und das Punktprodukt zugunsten von Begriffen mit hoher Relevanz zu verzerren.

Wenn Sie ein wenig graben wollen, Gigabytes verwalten von Glocke y Moffet erörtert die interne Architektur von Textabfragesystemen.

6voto

Dave Sherohman Punkte 44017

Andygeers ist auf dem richtigen Weg: Diese Zahlen haben keine andere empirische Bedeutung als ihre Beziehungen zueinander und können nicht allein dazu verwendet werden, um zu bestimmen, was eine "exakte Übereinstimmung" ist oder nicht. Das müssen Sie selbst herausfinden. Abgesehen von den Einschränkungen der Volltextsuche stellt sich auch die Frage, was Sie als "exakte Übereinstimmung" betrachten. (Nur tatsächlicher Text oder zählen auch Soundex-Übereinstimmungen? Zählen Synonyme (z. B. "Couch" vs. "Sofa") als Übereinstimmung oder als Unterschied? Sollte versucht werden, Rechtschreibfehler auszugleichen? Etc.)

Wenn ich eine solche Prüfung durchführen müsste, würde ich nur den höchstrangigen Eintrag nehmen, der von der Volltextsuche zurückgegeben wird, alle gekennzeichneten Stoppwörter entfernen, Leerzeichen normalisieren, in Kleinbuchstaben konvertieren, den Vergleich durchführen und es dabei belassen, bis ich auf einen Fall stoße, der eine weitere Verfeinerung erfordert. Es ist nicht wirklich alles que Wenn Sie die Sprache angeben, die Sie für Ihre Anwendung verwenden, können Sie wahrscheinlich jemanden finden, der die Normalisierungsfunktion in einem Dutzend Codezeilen schreiben kann.

2voto

andygeers Punkte 6677

Ich kenne die Besonderheiten der MySQL-Funktion, die Sie verwenden, nicht, aber ich könnte mir vorstellen, dass es keine absolute Bedeutung für diese Zahlen gibt - sie sind nur dazu gedacht, mit anderen Werten verglichen zu werden, die von derselben Funktion erzeugt werden. Um zu prüfen, ob eine absolute Übereinstimmung vorliegt, könnten Sie den Text selbst auswählen und manuell vergleichen.

0 Stimmen

Ich bevorzuge, wann immer möglich, die MySQL-Suchmaschine. Wenn ich meine eigene vergleichen würde, müsste ich viele Vorbereitungen und Überprüfungen vornehmen, z. B. alle Leer- und Sonderzeichen entfernen, alles in Großbuchstaben umwandeln und so weiter. Das ist mein letzter Ausweg.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X