2 Stimmen

"Persönlichkeitsquiz" Art Vergleich [PHP]

Ich versuche, über einen effizienten oder sinnvollen Algorithmus nachzudenken, um die Ergebnisse eines vom Benutzer eingereichten Tests mit den Werten mehrerer Profile zu vergleichen, um eine Übereinstimmung zu finden (ähnlich wie bei Online-Dating-Services, die Ihre Antworten mit geeigneten Partnern abgleichen).

Ich habe wirklich keine Ahnung, wie ich das angehen soll. Wenn der Benutzer 10 Fragen über sich selbst beantwortet und es 10 Kandidaten gibt, die zu ihm passen sollen, sprechen wir von Tausenden von Vergleichen durch die Datenbank. Es muss einen besseren Weg geben, dies zu tun.

Von den Recherchen, die ich gemacht habe, könnte ich dies vielleicht mit der Levenshtein-Distanzfunktion erreichen, aber ich weiß nicht, wie ich da vorgehen soll, da ich damit nicht vollständig vertraut bin und sie nicht so gut verstehe. Aber vielleicht könnte ich etwas Vergleichbares tun, indem ich die vom Benutzer eingegebenen Ergebnisse zu einem String konkateniere (z.B. 'AEBCDAABEAD') und die Ähnlichkeit mit den Antworten jedes Kandidaten messen?

Irgendwelche Vorschläge?

Vielen Dank.

4voto

Smamatti Punkte 3891

Ich denke, dass die Verwendung der genauen Antworten keine ausreichend flexible Lösung für jeden Zweck ist, da andere Antworten möglicherweise bei bestimmten Profiltypen keine tiefgreifende Auswirkung haben. Jemand mit 1-2 und 3-4 wird immer noch eine nicht übereinstimmende Antwort haben, auch wenn die Person 20-25 ist. Meines Wissens nach sind 'AB' und 'AC' mit Levenshtein genauso ähnlich wie 'AZ' zu 'AB'.

Auch der Levenshtein-Algorithmus ist eine gute Idee, ich denke, dass Sie in einigen Fällen schlechtere Übereinstimmungen erhalten, wenn Sie dies fragebasiert tun.

Lassen Sie mich beschreiben, welche Technik mir in den Sinn kommt, wenn ich Ihre Frage lese.

Profilkategorien und Antwortgewichtung

Ich denke an eine Konfiguration, in der Sie einige Profile oder Attributkategorien beschreiben können. Nehmen wir zum Beispiel Geschmacksrichtungen. Unsere Kategorien könnten so aussehen: süß, sauer, scharf, normal usw.

Jetzt würde ich für Ihre Umfrage für jede Frage eine Kategoriegewichtung konfigurieren, die Sie akkumulieren können.

Beispiel

Mögen Sie Chili con Carne
Ja - scharf +3
Nein - scharf -1

Jetzt können Sie einen Algorithmus verwenden, um die Distanz in jeder Kategorie zu bestimmen und diese in einer Berechnung zu gewichten.

(süß | scharf | sauer | normal)
    -5      15      2        8  // Person 1
    10      -5     10        2  // Person 2
     8      -8      7       12  // Person 3

Jetzt können Sie zum Beispiel die Entscheidungen der Personen vergleichen und sehen, dass die Distanz zwischen [2] und [3] deutlich kleiner ist als zwischen [1] und [2]. Hinweis: Ich spreche hier nicht über die Levenshtein-Distanz, da diese Werte numerisch sind und eine Berechnung bessere Ergebnisse liefert als nur nicht übereinstimmende Zeichen.


Ich bin mir nicht sicher, ob Ihnen das hilft, aber das kam mir in den Sinn und schien eine saubere Lösung zu sein.

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