Nehmen wir an, es gibt Käufer und Verkäufer, die versuchen, sich auf einem Markt gegenseitig zu finden. Käufer können ihre Bedürfnisse mit Schlüsselwörtern kennzeichnen; Verkäufer können dasselbe für das tun, was sie verkaufen. Ich bin daran interessiert, einen Algorithmus zu finden, der Verkäufer nach ihrer Relevanz für einen bestimmten Käufer auf der Grundlage ihrer beiden Schlüsselwortsätze ordnet.
Hier ist ein Beispiel:
buyer_keywords = {"furry", "four legs", "likes catnip", "has claws"}
und dann haben wir zwei potenzielle Verkäufer, die wir nach ihrer Relevanz ordnen müssen:
seller_keywords[1] = {"furry", "four legs", "arctic circle", "white"}
seller_keywords[2] = {"likes catnip", "furry",
"hates mice", "yarn-lover", "whiskers"}
Wenn wir nur die Schnittmenge der Schlüsselwörter verwenden, erhalten wir keine große Unterscheidung: beide schneiden sich bei 2 Schlüsselwörtern. Teilt man die Anzahl der Schnittpunkte durch die Größe der Vereinigungsmenge, schneidet Verkäufer 2 aufgrund der größeren Anzahl von Schlüsselwörtern sogar schlechter ab. Dies scheint eine automatische Bestrafung für jede Methode einzuführen, die die Größe der Schlüsselwortmenge nicht korrigiert (und wir wollen definitiv nicht das Hinzufügen von Schlüsselwörtern bestrafen).
Um dem Problem etwas mehr Struktur zu geben, nehmen wir an, wir haben ein wahrheitsgetreues Maß für die Intensität der Schlüsselwortattribute (die sich für jeden Verkäufer auf 1 summieren müssen), z. B.:
seller_keywords[1] = {"furry":.05,
"four legs":.05,
"arctic circle":.8,
"white":.1}
seller_keywords[2] = {"likes catnip":.5,
"furry":.4,
"hates mice":.02,
"yarn-lover":.02,
"whiskers":.06}
Jetzt könnten wir den Wert der Treffer zusammenzählen: Verkäufer 1 erhält also nur noch eine Punktzahl von 0,1, während Verkäufer 2 eine Punktzahl von 0,9 erhält. So weit, so gut, aber jetzt gibt es vielleicht einen dritten Verkäufer mit einem sehr begrenzten, nicht beschreibenden Stichwortsatz:
seller_keywords[3] = {"furry":1}
Das katapultiert sie bei jedem Treffer zu ihrem einzigen Schlüsselwort an die Spitze, was nicht gut ist.
Wie auch immer, ich vermute (und hoffe), dass dies ein ziemlich allgemeines Problem ist und dass es verschiedene algorithmische Lösungen mit bekannten Stärken und Grenzen gibt. Das ist wahrscheinlich etwas, das in CS101 behandelt wird, also denke ich, dass eine gute Antwort auf diese Frage einfach ein Link zu den relevanten Referenzen sein könnte.