Ich habe einige Liste von Strings, zum Beispiel:
Python: Wie sortiere ich eine Liste von Strings nach Substring-Relevanz?
["foo bar SOME baz TEXT bob",
"SOME foo bar baz bob TEXT",
"SOME foo TEXT",
"foo bar SOME TEXT baz",
"SOME TEXT"]
Ich will es durch Exaktheit zu SOME TEXT
Teilzeichenfolge sortiert werden (Großschreibung spielt keine Rolle). So etwas wie diese Reihenfolge:
["SOME TEXT",
"foo bar SOME TEXT baz",
"SOME foo TEXT",
"foo bar SOME baz TEXT bob",
"SOME foo bar baz bob TEXT"]
Die Idee ist - das beste Ergebnis erhält die Saite mit der besten Übereinstimmung Worten Position zu String. Und für eine größere Anzahl von "schlampigen" Wörtern zwischen den Wörtern der Teilstrings - die niedrigere Reihenfolge, die es bekommt.
Ich habe einige Bibliotheken wie fuzzyset oder Levenshtein distance gefunden, aber ich bin mir nicht sicher, das ist was ich brauche. Ich kenne die genaue Teilzeichenfolge nach dem, was ich sortieren möchte, und diese Bibliotheken durchsuchen die ähnlichen Wörter, so wie ich es verstanden habe.
Eigentlich muss ich diese Sortierung nach einer Datenbankabfrage (Postgresql) in meinem Django-Projekt tun. Ich habe bereits Volltextsuche mit seinem ORM versucht, aber diese relevante Sortierreihenfolge nicht erhalten (es zählt nicht den Abstand zwischen Substring-Wörtern). Als nächstes habe ich versucht, Haystack + Whoosh, aber auch in diesem Moment nicht finden, wie man diese Art dort tun. Die Idee ist nun, die Abfrage zu setzen und sie als nächstes aus der Datenbank zu sortieren (ja, ich weiß, dass das eine schlechte Entscheidung sein könnte, aber jetzt will ich, dass es einfach funktioniert). Aber wenn mir irgendjemand sagt, wie man das in irgendeiner der Technologien macht, habe ich hier erwähnt - das wird auch super cool sein. Vielen Dank!
p.s. Die Länge der Teilzeichenfolge sollte 2-10 Wörter in maximal 20 Wortfolgen betragen.
Das ist eine interessante Klasse, die mir nicht bekannt war. +1. –
Ja, das funktioniert perfekt! Vielen Dank! p.s.Btw difflib war die dritte Bibliothek, die ich gefunden habe, aber vergessen habe, es hier zu erwähnen (und auch nicht, wie man es richtig benutzt). :) – Chiefir